Arduino Serial (4 oder mehr Zeichen)

Gast #4528993
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
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.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 10 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.