Diese Seite ist Teil des Projekts Automatische Gewächshauslüftung.
Die Android App auf dem Handy baut die Bluetooth-Verbindung auf und initiiert die Übertragung. Etwa jede Sekunde wird ein "?" gesendet. Die Lüftungssteuerung antwortet mit der Übertragung des aktuellen Zustands: "aa,bb,c,d,ee,ff,gg,h,i\n". Mit
Das Komma zwischen den einzelnen Einheiten erleichtert das Auftrennen des Textes.
Kontrolle des Steuerung:
Ungültige Werte werden ignoriert.
Die Steuerung führt einen Reset des HC-05 aus, wenn innerhalb von etwa 1 Minute kein Zeichen empfangen wurde. Dies stellt sicher, dass sich das Modul nicht irgendwie aufgehängt hat. Das bedeutet natürlich, dass ggf. für wenige Sekunden keine Verbindung aufgebaut werden kann.
Der zugehörige Programmteile zur Analyse des seriellen Zeichenstroms sieht wie folgt aus. Die Funktion der aufgerufenen Methoden erklärt sich aus ihrem Namen.
// Anfragen über die serielle Schnittstelle behandeln void CheckSerial() { char c1 = '0', c2 ='0'; // Vorbelegung auf '0', damit einfach auf numerischen Inhalt getestet werden kann. uint8_t Param; // Parameter in numerischer Form char c = ReadChar(); // Liefert empfangenes Zeichen oder 0 bei Timeout switch (c) { case 'T': // zwei weitere Zeichen notwendig case 'U': case 'V': c1 = ReadChar(); case 'P': // ein weiteres Zeichen notwendig case 'Z': c2 = ReadChar(); } if (c1 < '0' || c1 > '9' || c2 < '0' || c2 > '9') // Parameter ist numerisch? return; // ... wenn nicht, Befehl ignorieren Param = (c1 - '0') * 10 + (c2 - '0'); switch (c) { case '?': // Aktuellen Status melden XmitState(); break; case 'A': // Modus Automatik einstellen SetMode(ModeAutomatic); break; case 'M': // Modus Manuell einstellen, Lüfter anschalten SetMode(ModeManual); SetFan(On); break; case 'O': // Modus Manuell einstellen, Lüfter ausschalten SetMode(ModeManual); SetFan(Off); break; case 'T': // Maximale Temperatur einstellen if (Param < 10 || Param > 45) return; // ungültiger Wert SetMaxTemp(Param); break; case 'U': // Minimale Temperatur einstellen if (Param < 5 || Param > 45) return; // ungültiger Wert SetMinTemp(Param); break; case 'V': // Maximale Luftfeuchtigkeit einstellen if (Param < 30 || Param > 90) return; // ungültiger Wert SetMaxHum(Param); break; case 'P': // Phasenlänge einstellen if (Param < 1) return; // ungültiger Wert SetPhaseLength(Param); return; case 'Z': // HC-05-Reset-Zeit einstellen if (Param < 1) return; // ungültiger Wert SetHC05Timeout(Param); break; case 'R': // Reset durchführen while (1); // Warten, bis der Watchdog zuschlägt default: // ungültiges Kommando return; } }