Hallo, ich bin ein Elektro/MC Neuling. Derzeit versuche ich eine kleine Steuerung umzusetzen. Soweit funktioniert das ganze auch sehr gut, ich arbeite hierbei vom Rechner über die Console. Ich hätte die Ports aber gerne sinvoller "beschriftet", daher habe ich mir hierfür folgendes Muster ausgesucht "0011" soll Ausgang 1 anschalten (001=port 1=true/false) "0010" schaltet Ausgang 1 aus. Wenn ich diesen "Code" (0011) allerdings über die Console sende, wird dieser scheinbar nicht zusammenhängend verarbeitet sondern jedes Zeichen für sich. Hat jemand für mich einen Lösungsvorschlag, bzw. kann mir helfen ? Danke ! :) ################################## int ausgang1 = 2; void setup() { pinMode(2, OUTPUT); Serial.begin(9600); } void loop() { while (Serial.available() == 0); int value = Serial.read() - '0'; Serial.println("Erfolgreich einen Befehl erhalten!\n"); if (value == 0011) { digitalWrite(ausgang1,HIGH); delay(10); } else if (value == 0010) { digitalWrite(ausgang1,HIGH); delay(10); } else { Serial.println("Leider war die Eingabe fehlerhaft!\n\n"); } Serial.flush(); } ##################################
Hi, du musst halt warten bis du die vier Zeichen im Puffer hast.
1 | If (Serial.available() >= 4) |
2 | {
|
3 | ....
|
4 | |
5 | }
|
Und dann musst du nur noch die Daten zu deiner Zahl zusammensetzten
1 | value = 0; |
2 | for(uint8_t i=0; i>3; i++) |
3 | {
|
4 | value = value * 10 + ( serial.read() - '0'; |
5 | |
6 | }
|
Gruß JackFrost
Bastian W. schrieb: > Und dann musst du nur noch die Daten zu deiner Zahl zusammensetzten Und dann darfst Du den Vergleich nicht mehr so machen: Fridolin schrieb: > if (value == 0010)
Wobei ein prüfen mit Dezimal oder Oktal Werten unnötig viel Code macht. Mit ner Bitmaske geht das einfacher. Vorallem bei 4 Bit hast du 16 Zustände und so mit 16 If Abfragen mit ner Bitmaske nur 8. Bei 8 Bit müsstest du 256 If Abfragen schreiben mit der Maske nur 16 Dafür musst du nur das Zusammensetzen über links schieben der Bits machen Gruß JackFrost
Vorsicht: in C (C++/"Arduino Sketch") werden Ziffern-Konstaneten, die mit "0" beginnen, als Oktal-Zahl aufgefaßt. Also ist 0011 = 1*8 + 1 = 9 Andere Darstellungen: binär 0b1001 (Eigentlich GCC-Erweiterung, aber inzwischen Standard dezimal 9 Hexadezimal 0x09 Oktal 011 oder aber als char '\t'. TAB (ASCII und ff. vorausgesetzt) Und ganz wichtig: Zfferfolgen sind numerische Literale und nicht das gleiche wie Strings.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.