Forum: Mikrocontroller und Digitale Elektronik Arduino, Serieller Port Einkommende Signale verarbeiten


von Markus B. (boerni98)


Lesenswert?

Hallo alle zusammen,

ich habe einen Arduino Uno und ein WIFI-Shield (RN-XV WiFly Module 
(Roving Networks) 
http://www.watterott.com/de/Roving-Networks-RN-XV-WiFly-Module )

Außerdem verwende ich diese Arduino Total Control App: 
https://play.google.com/store/apps/details?id=com.apps.emim.btrelaycontrol

Diese App soll mehrere Relays (8) ansteuern.
Dies geht über eine Bluetooth oder Wlan-Verbindung (in meinem Fall 
WLAN).

Ich habe bin bis jetzt soweit dass ich das WLAN-Modul und mein 
Smartphone in einem Netztwerk habe. Außerdem habe ich ´das WIFI-Shield 
soweit programmiert, dass er Buchstaben die von der App über das 
Netzwerk ankommen an seinem RX/TX ausgibt.
Ich kann also wenn ich auf den Arduino eienen Bare Minimum Sketch lade 
und den seriellen Monitor öffne die Buchstaben empfangen wenn ich in der 
App auf den entsprechenden Button drücke. Außerdem kann ich über den 
Seriellen Monitor "Sachen" an die App senden diese erscheinen dann oben 
in der App.

Mein Problem ist es jetzt den Arduino so zu Programmieren, dass er 
einfach wenn z.B. Ein A ankommt er Pin 2 auf High setzt und wenn später 
ein a akomm er Pin 2 auf Low setzt.

Dies sollt ja durch Serial.Begin und dann mit einer if-Bedingung und 
mehreren cases möglich sein.

Bei der App gibt es schon Beispiel-Programme dazu. Eines ist für die 
Verwendung eines Bluetooth Shields welches am RX-TX angeschlossen ist.
Das Andere für die Verwendung eines WLAN shields an wo die Pins 10, 11, 
12, 13 benötigt werden.

Also brauche ich meiner Meinung nach eher den Bluetooth-Sketch weil ich 
ja nur ankommende Daten vom RX verarbeiten möchte allerdings ist das 
Programm viel ausführlicher ich kann den Sketch gerne zeigen.
Mein Problem: wenn ich den Beispiel Sketch auf en Arduino Lade und dann 
wieder RX/TX mit dem Wifi Shield verbinde und Anschließend den Serial 
Monitor öffne bekomme ich nur irgendwelche Sensor Daten.

Hat jemand von euch solch ein einfaches Programm welches nur ankommende 
Buchstaben/Signale verarbeitet?

von Frank E. (Firma: Q3) (qualidat)


Lesenswert?

Es liest sich so, als ob das dein erstes Arduino-Projekt ist. Dafür und 
zum Lernen ist es m.E. viel zu komplex. Das genannte Projekt kann ja 
dein Ziel sein, zum Einstieg würde ich auf einfachere (Teil-) Aufgaben 
setzten.

Zu deiner Frage: Du musst die einkommenden Zeichen durch einen Puffer 
(String oder Chr-Array) "schieben" (Pufferinhalt um eine Stelle 
verschieben, ältestes Zeichen fällt weg, neues Zeichen kommt auf Platz 
1). Wie viele Stellen du brauchst, hängt von der Zahl der benötigten 
Befehle ab.

Zusätzlich (später!) könnte man noch Start- und Stopzeichen und eine 
Prüfsumme hinzufügen, damit zufällig durch Störungen erzeugte 
Zeichenfolgen keine wilde Schaltorgie auslösen ...

Immer wenn also ein neues Zeichen in deinem Puffer hinzugekommen ist, 
vergleichst du in einer Reihe von if- oder select/case-Statements, ob 
ein bekannter Befehl dabei ist.

Gibts einen Treffer, löschst du den Puffer und führst den Befehl (z.B. 
Pin setzen) aus, danach beginnt das Lesen bzw. Warten auf Zeichen von 
vorn ...

: Bearbeitet durch User
von Markus B. (boerni98)


Lesenswert?

Ich habe jetzt dieses Programm ausprobiert:

#define ledPin 13
int incomingByte;

void setup() {

  Serial.begin(9600);
  pinMode(ledPin, OUTPUT);
}

void loop() {
  if (Serial.available() > 0) {

    incomingByte = Serial.read();

    if (incomingByte == 'A')
    {
      digitalWrite(ledPin, HIGH);
      Serial.println("LED ist eingeschaltet!");
    }

    if (incomingByte == 'a')
    {
      digitalWrite(ledPin, LOW);
      Serial.println("LED ist ausgeschaltet!");
    }
  }
}

Wenn ich es auf meinen Arduino lade und rx und tx wieder verbinde und 
anschließend am Serial Monitor ein A sende geht die Led an pin 13 an. 
Auch wenn ich ein a sende geht sie wieder aus.

Wenn ich aber von der App ein A oder a sende passiert nichts.

Wenn ich das richtig verstehe: der Arduino Uno hat sowohl die USB-Buchse 
als serielle Schnittstelle als auch den 0/1 Port als serielle 
Schnittstelle.

Woher weiß der Arduino welcher RX/TX gemeint ist???

Ich habe ihn vom Pc getrennt und über eine externe Spannungsquelle 
versorgt und anschließend von meiner App ein A gesendet, aber es ist 
nichts passiert.

Wenn ich aber auf den Arduino nur ein Bare Minimum Lade kann ich im 
Serial Monitor sehen dass ein A von der App ankommt.

Vielen Dank für eure Hilfe

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.