3 Taster - 3 schaltstellungen funkübetragung

@thomasbart ich hab mal was ganz kleines gebaut.
Der folgende Sketch aufgespielt wartet, das Du im Seriellen Monitor oben etwas eingibst und sendest.

In diesem Fall ein Telegram, welches mit # begint, dann folgt ein Char als "channel" gefolgt von einem ; und einem weiterem welches den übergebenen Wert darstellt und gefolgt von einem * als EndeMarkierung.

Wenn Du eingibst #2,3* bekommst Du das zurück:

08:44:04.609 -> #
08:44:04.609 -> 2
08:44:04.609 -> ;
08:44:04.609 -> 3
08:44:04.609 -> *
08:44:04.609 -> 
08:44:04.609 -> 
08:44:04.609 -> Empfangen mein Kanal: 2
08:44:04.609 -> Servoposition: 3

Das ist jetzt einfach gemacht und mit Char, damit Du etwas siehst.
Normalerweise wird dem Telegram Byte-Werte übergeben, bzw. mehrstellige Zahlen - darum der Trenner.
Wenn Du als erstes nicht 2 angibst, ignoriert der Sketch alles folgende und wartet wieder auf das "Startzeichen". Ich hab zwischendurch die Ausgabe der Zeichen mit drin, vielleicht wirds dann verständlich :wink:

const byte startChar = '#';
const byte endChar = '*';
const byte delemiter = ';';
const byte myChannel = '2';
byte myServo;


enum status {anfang, kanal, trennung, zustand, ausfuehren, ende};
byte state = anfang;


void setup()
{
  Serial.begin(115200);
  Serial.println(F("Start..."));
}

void loop()
{
  if (Serial.available() > 0)
  {
    byte inByte = Serial.read();
    Serial.println(char(inByte));
    switch (state)
    {
      case anfang:
        if (inByte == startChar)
        { state = kanal; }
        break;
      case kanal:
        if (inByte == myChannel)
        { state = trennung; }
        else
        { state = anfang; }
        break;
      case trennung:
        if (inByte == delemiter)
        { state = zustand; }
        else
        { state = anfang; }
        break;
      case zustand:
        myServo = inByte;
        state = ende;
        break;
      case ende:
        if (inByte == endChar )
        { state = ausfuehren; }
        else
        { state = anfang; }
        break;
      case ausfuehren:
        Serial.print(F("Empfangen mein Kanal: "));
        Serial.println(char(myChannel));
        Serial.print(F("Servoposition: "));
        Serial.println(char(myServo));
        state = anfang;
        break;
    }
  }
}

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.