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.