Forum: Mikrocontroller und Digitale Elektronik Processing Arduino Uart Lösungsfindung


von Bernd H. (masterz)


Lesenswert?

Hallo Community und frohes Fest!

Zu Weihnachnachten hab ich endlich ein bisschen Zeit, und schon kommen 
die ersten Frhen auf.

Ich will über Processing mein Arduino steuern.
Über 3Grafische Tasten sollen je ein Bit High/Löw gesetzt werden und 
dass dritte Bit soll blinken.

Nun meine Frage..

1. in Processing habe ich die 3 Tasten in ein int Array eingelesen. Wie 
übertrage ich nun dieses Array über Uart an mein Arduino Board?

Ein Bit kann ich schon rüberschaufeln. Aber 3 Bits? Hat jmd eine Idee?

Vielen Dank schonmal im vorraus.

von Hubert G. (hubertg)


Lesenswert?

Bernd Hubert schrieb:
> Ein Bit kann ich schon rüberschaufeln

Wie schaufelst du über UART 1Bit?
Bis jetzt war ich der Meinung es geht immer nur 1 Byte.

von Bernd H. (masterz)


Lesenswert?

Ok dass zeigt dass ich den serial Port noch nicht beherrsche.

Wenn ich die Tasten z.B. 0,1,0 in ein Array einlese und den an den 
serial Port Sende über SerialPort.write(myarray) dann lese ich im 
Terminal:

[0]
[1]
[0]

Aber wie lese ich dieses Array in mein Arduino ein?

Gibt es ein Beispiel Programm der sowas zeigt ?

von Hubert G. (hubertg)


Lesenswert?

Bei den Arduino Beispielen gibt es unter Communikation ein SerialEvent. 
Das Ergebnis ist inChar. Dieses inChar kannst du dann abfragen welchen 
Wert es hat und entsprechend eine Aktion starten.

von Bernd H. (masterz)


Lesenswert?

Und das inChar loggt den gesamten Array mit?

Wenn ich auf dem Serial Port die

[0]
[1]
[0]

Sende, wie sieht der Inhalt des inChars aus?

von Bernd H. (masterz)


Lesenswert?

Eigentlich habe ich gerade näher darüber nachgedacht und der richtige 
weg ist eigentlich dass ich nicht alle tastenwerte auf einmal sende, 
sondern nur eine Taste als Datensatz versende.
Bsp. Taste 1 = Enable und kann die Werte 0/1 annehmen
Taste 2 = Direktion und kann die Werte 0/1 annehmen.

Wird also Taste 1 gedrückt, müsste ein Datensatz gesendet werden der 
folgendermaßen Aussieht:

|  Enable  |  ,  |  0  |

Das liegt dann an der Uart Schnittstelle meines PCs an an dem ich 
Processing laufen habe.

Das müsste dann ein String sein.

Aber dann muss ich ja in meinem Arduino den String einlesen.. Rausfinden 
dass es sich um das Enable Signal handelt und das Bit von eine. String 
in ein Integer oder boolean Wandeln.
Soweit meine Erkenntnis. Ist das Extrahieren der Daten sehr schwierig? 
Nach was muss ich denn suchen um ein Beispiel dazu zu finden?
Eigentlich geht es mir tatsächlich darum einen Datensatz zu übertragen.

Vielen Dank schonmal für eure Hilfe

von Hubert G. (hubertg)


Lesenswert?

Du kannst auch mehrere Tasten auf einmal senden.
Du musst nur wissen wie der Datensatz aussieht.
Wenn der Datensatz so aussieht für Taste 1   00000010  oder für Taste 1 
und Taste 2  00000110  dann ist auch das auswerten von inChar kein 
Problem.
if (inChar ==2) ist wahr wenn Taste 1 gedrückt ist.
Wenn du also weißt was du zum Arduino schickst, ist das Auswerten kein 
Problem mehr.

von Bernd H. (masterz)


Lesenswert?

Hallo an alle,

so habe ich es vorerst einmal gelöst:

https://www.inkling.com/read/arduino-cookbook-michael-margolis-2nd/chapter-4/recipe-4-8


Als MOUSE TAG nehme ich das ENABLE DIR und MODE
Als Int Value übergebe ich das High low bit.

Somit kann ich mit einem Datensatz abfragen welches Bit wie gesetzt 
werden soll.

Es funktioniert, aber irgendwie finde ich es immer noch nicht so 
elegant. Ich tüftel mal weiter.

von PittyJ (Gast)


Lesenswert?

Die Basis von Processing ist C++.
Besorg dir ein C++-Buch und lerne das Kapitel über Arrays.

C++ kann man auch auf dem PC lernen, da gibt es auch Debugger mit 
SingleStep um zu sehen, was da wirklich passiert.

von Karl H. (kbuchegg)


Lesenswert?

Bernd Hubert schrieb:

> Es funktioniert, aber irgendwie finde ich es immer noch nicht so
> elegant.

"Eleganz" ist Ansichtssache.

Tatsache ist aber, dass du an der seriellen Schnittstelle zur 
Übertragung erst mal nur einzelne Bytes hast. Alles darauf weiter 
aufbauende, wie zum Beispiel die Übertragung von Bytesequenzen ist dein 
Bier als Programmierer. Um mehrere Werte zu übertragen (wie sie zb bei 
dir in Form eines Arrays vorliegen) musst du ein System finden, wie du
* alles auf die Übertragung von einzelnen Bytes zurück führst
* der Empfänger erkennen kann, welches Byte er gerade empfängt und 
welche Bedeutung er ihm daher zuerkennen muss.

Und ja. Speziell der letzte Punkt bedeutet im Normalfall, dass es 
zusätzlich zu den reinen Nutzdaten in einer Übertragung auch Steuerdaten 
geben muss, die den Empfänger bei der Interpretation und Zuordnung der 
Nutzdaten leiten.

: Bearbeitet durch User
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.