Hallo,
ich würde gerne Testweise etwas mit einem Arduino Nano ausprobieren. Ich
würde gern vom Seriellen Monitor zum Arduino Zeichen schicken. In meinem
Fall zum Beispiel "1_ON" und 1_OFF". Dann soll ein bestimmter DigitalPin
auf HIGH bzw. auf LOW geschaltet werden.
Leider habe ich es bis jetzt nur hinbekommen eine eingegebene Zahl
direkt wieder ausgegeben. Habe schon einiges im Internet darüber
gesucht, aber leider nicht weiteres gefunden was mit helfen könnte.
Würde mich über Hilfe sehr freuen.
Viele Grüße
Florian
Florian D. schrieb:> Leider habe ich es bis jetzt nur hinbekommen eine eingegebene Zahl> direkt wieder ausgegeben.
Du kannst also den String über die Serielle empfangen nur nicht
auswerten?
Zeig mal was du bis jetzt hast…
wenn >Du< es hinbekommen hast, eine Zahl zu empfangen und wieder
auszugeben, wo liegt dann das Problem eine Aktion beim Empfang einer
Bytefolge zu realisieren??
Das habe ich bis jetzt. Das mit dem Abfragen hab ich aber nicht
hinbekommen, um somit wenn eben die Zeichenkette "1_ON" bzw. "1_OFF"
entweder den D2 HIGH oder LOW zu schalten
Als erstes musst du mal die empfangenen Zeichen zu einem String
zusammensetzten. Am einfachsten ist wenn du am Ende jeder Nachricht z.B.
ein '\n' anhängst um zu wissen wenn sie fertig ist, und danach musst
diesen String auswerten.
Florian D. schrieb:> Wo genau muss ich das '\n' hinsetzten?
Am Ende deiner Nachricht, damit du weißt das fertig ist. Du würdest dann
z.B. "1_ON\n" senden.
> Und wie werte ich den String dann eben aus?
Bei deinem Beispiel würde ich es so machen:
Also muss ich bei jedem "Befehl" den ich am PC im Serien Monitor ein
'\n' eingeben?
Und sorry das ich nochmal frage, aber ich weiß nicht genau wie ich das
so in meinen Code einbauen soll.
Florian D. schrieb:> Also muss ich bei jedem "Befehl" den ich am PC im Serien Monitor ein> '\n' eingeben?
Viele Terminals können das auch automatisch mitsenden.
> Und sorry das ich nochmal frage, aber ich weiß nicht genau wie ich das> so in meinen Code einbauen soll.
Als erstes musst du mal die empfangenen Zeichen in einen String packen.
Witzig, ich fuhrwerke gerade an der selben Sache rum.
Ich habe den Klassen etwas unter die Haube geschaut, weil ich in der
Ardu-Referenz bei einigen Readfunktionen etwas von Timeout gelesen habe.
Und siehe da, letztenende wird an einer while-Schleife rumgenudelt -
entweder bis der erwartete String da ist, oder eben der Timeout
zuschlägt. Find ich nicht so gut.
Ich habe jetzt LämpchenAn-LämpchenAus realisiert, indem ich ganz bewusst
nur die einfachen Funktionen der Serial Klasse benutzt habe.
Ist zwar auch eine while drin, aber die wartet nicht auf etwas konkretes
sondern läuft solange, wie im Buffer noch nicht gelesene Zeichen
enthalten sind.
Kleiner Hinweis, ich habe für meinen Test nicht mit einer \0
Terminierung gearbbeitet, sondern mit einem $ Starttoken. Ist ja nicht
in Zement gegossen.
Mel Gibson schrieb:> ...naja, was willst du von den Arduinopfuschern auch erwarten?
....auf jeden Fall haben diese "Arduinopfuscher" sinnvollere Beiträge
als Ihr Superhelden der Bitschubserei, also kommt mal wieder runter...
Ich möchte gern mal Eure ersten Programmierversuche sehen!
Wenn es Euch nicht gefällt, warum zeigt ihr nicht wie man es besser
machen kann statt Euch den Heldenstatus auf die Brust zu drücken...
Seh ich auch so. Jetzt hat man schon das Pech, dass einer
"Arduinopfuscher" die mitgelieferten Klassen auf bestimmte
Eigenschafften untersucht und dann noch entsprechend handelt. Dann
werden eben Offensichtlichkeiten aus einem für Testzwecke
zusammengeworfenem Programm hergenommen um rumzubashen.
Hope, this made your day...
Bastler schrieb:> Chefkoch schrieb:>> Serial.write(buffer[0]);>> Serial.write(buffer[1]);>> Serial.write(buffer[2]);>> Serial.write(buffer[3]);>> Serial.write(buffer[4]);>> Serial.write(buffer[5]);>> Serial.write(buffer[6]);>> Serial.write(buffer[7]);>> Bei Deinen Programmierkünsten wird mir schlecht.
Es gibt Leute, die so eine Laufschrift programmiert haben - damals in
TurboPascal.
Arduino ist halt für Anfänger ein guter Einstieg.
Dass Serial.write auch anders funktioniert, kann man in dessen Doku
nachlesen - wenn man denn will.
> Es gibt Leute, die so eine Laufschrift programmiert haben - damals in> TurboPascal.> Arduino ist halt für Anfänger ein guter Einstieg.> Dass Serial.write auch anders funktioniert, kann man in dessen Doku> nachlesen - wenn man denn will.
Mein Hinweis es besser zu machen wurde anscheinend in keinster Weise
verstanden oder überdacht. Macht nix, popelt weiter rum.
>Bei Deinen Programmierkünsten wird mir schlecht.
Würdest du dir Wünschen, dass Lehrer und Erziehungsberechtigte auf diese
Auszubildenden (seien es Schüler, Kinder, Lehrlingen) Hinweise geben?
Florian D. schrieb:> Also muss ich bei jedem "Befehl" den ich am PC im Serien Monitor ein> '\n' eingeben?
Du gibst kein '\n' ein.
\n ist die C++ Schreibsweise für das Zeichen, das gesendet wird, wenn du
auf 'Return' drückst. Das ist die große Taste rechts ,die aussieht wie
ein Tetris Baustein und auf der manchmal 'Enter' steht, bei manchen
Herstellern ist da aber auch abgewinkelter Pfeil drauf.
> Und sorry das ich nochmal frage, aber ich weiß nicht genau wie ich das> so in meinen Code einbauen soll.
Indem du erst mal einen STring zusammenbaust.
Ein String ist eine Abfolge von Zeichen, die mit einem '\0' endet. Das
Ende der Übertragung erkennst du daran, dass ein \n eintrifft. Dann ist
dein String komplett.
und kauf dir ein C++ Buch oder ein C Buch.
C++ deswegenm weil du eigentlich in C++ programmierst. Auf der anderen
Seite sind viele Arduino Programme sehr C lastig, weil man viele Dinge
aus C++ nicht verwenden möchte (wie zb eine String-Klasse), deshalb
greift man da auf die C Variante zurück und daher solltest du die
ebenfalls beherrschen.
Auch wenn immer wieder gesagt wird: Um Arduino zu programmieren muss man
nichts können - es stimmt nicht.
Fehlerbehandlung musst du in den Code noch einbauen. Im speziellen musst
du dafür sorgen, dass dir ein Benutzer, der auf der Tastatur
eingeschlafen ist, dir nicht das Array überfährt.
Lute schrieb:> Wenn es die Wahrheit ist: Ja.
Leider ist es heutzutage nicht mehr politisch korrekt zu einer
drastischen Ausdrucksweise zu greifen. Die lieben Kleinen könnten davon
ja einen psychischen Knacks erhalten und dann laufen sie Amok wenn sie
17 sind. Wie hat es meine Generation nur geschafft, erwachsen zu werden?
Warum schickst du nicht einfach eine Zahl rüber und benutzt die Funktion
toInt() um aus dem String einen Integer zu machen. Dann kannst du das
ganze sogar noch in einer Case-Abfrage verwursten und hast 32k
verschiedene komandos zur Verfügung.
https://www.arduino.cc/en/Tutorial/StringToIntExample
Alex Z. schrieb:> Warum schickst du nicht einfach eine Zahl rüber und benutzt die Funktion> toInt() um aus dem String einen Integer zu machen.
Weil er noch keinen String hat. Ganz einfach
Karl H. schrieb:> inputLine[nrChars++] = nextChar ;
Was mit hier noch fehlt, wäre etwas um zu verhindern dass über die Array
Grenzen hinausgeschrieben wird, z.B.: