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;
  }
}