Arduino/ C# RGB LED Steuerung

OP #4916987
Lesenswert?

Hallo liebe Community,
ich bin relativ frisch in der Programmierwelt, also hab ein wenig 
nachsehen falls ich es nicht direkt verstehe.
Ich versuche mit einem C# Programm eine einzelne RGB LED anzusteuern. 
Das C# Programm läuft soweit und übermittelt auch den String an den 
Arduino, aber ich schaffe es nicht diesen zu verarbeiten. Der String 
kann folgendermaßen aussehen „ 255255255“ (RGB), das wäre der String 
damit die LED Weiß leuchtet.
Nun zu meiner Frage wie kann ich diesen String nun am besten 
verarbeiten?
mfg Jannick
#4917015
Lesenswert?

Jannick G. schrieb:
> Ich versuche mit einem C# Programm eine einzelne RGB LED anzusteuern.
> Das C# Programm läuft soweit und übermittelt auch den String an den
> Arduino, aber ich schaffe es nicht diesen zu verarbeiten. Der String
> kann folgendermaßen aussehen „ 255255255“ (RGB), das wäre der String
> damit die LED Weiß leuchtet.
> Nun zu meiner Frage wie kann ich diesen String nun am besten
> verarbeiten?

Wenn ich Dich richtig verstehe, dann überträgst Du die RGB-Farbangaben 
also so, dass Du für jeden Farbkanal (also R, G und B) je ein Byte 
vorsiehst, und jedes Byte dann immer als exakt 3 Zeichen überträgst, 
korrekt?
Die Farbe schwarz z.B. würdest Du als "000000000" übertragen?

Das erscheint zwar irgendwie suboptimal, weil Du für einen einzigen 
RGB-Wert dann stolze 9 Zeichen/Bytes übertragen und das ganze dann 
wieder zurückumwandeln musst - aber wenn Du das wirklich so machen 
willst/musst, dann ist es doch ganz einfach:
Du unterteilst den exakt 9 Zeichen langen RGB-Farbangabe-String in drei 
je drei Zeichen lange Strings, die dann dem Byte-Wert der einzelnen 
Farbkanäle entsprechen, und benutzt dann eine Funktion a la 
parse_integer, die einen als String kodierten Integer-Wert in den 
zugehörigen Integer-Wert umwandelt.

Sofern es keinen wirklich guten Grund gibt, die Farbangaben als 
Dezimal-Zahl-Strings zu übertragen, macht es aber vermutlich mehr Sinn, 
sie entweder direkt als Bytes zu übertragen (=3 Byte pro RGB-Wert) oder 
als Hexadezimal-Strings (=6 Zeichen/Bytes pro RGB-Wert, z.B. "FF0000" 
für rot).
OP #4917030
Lesenswert?

@Marc:
Rot: 255000000
Grün: 000255000
Blau: 000000255
@Joachim:
Ja da hast du mich richtig verstanden. Und der einzige Grund warum ich 
das dezimal übertrage ist, weil es mir als erstes eingefallen ist. (kann 
auf keine Erfahrungswerte zurückgreifen)
Aber mein Problem ist ich weiß nicht/ ich schaffe es nicht die 
ankommenden Daten ordentlich zu verarbeiten. Das heißt die einzelnen 
Werte zuzuordnen und sowas.
#4917062
Lesenswert?

Ich würde nur die 3 Bytes senden, dann können sie direkt als uint8 in 
eine Variable gecastet werden und die Werte stehen ohne große 
Stringconvertierung etc. gleich zur Verfügung.

Als erfahrener Anwender würde man sich natürlich noch ein kleines 
Protokoll überlegen, damit es auch (immer) fehlerfrei funktioniert.

z.B.:

uint8_t rgb[3] = {255, 255, 255};
Serial.Send_Data(rgb, 3);

mfg
OP #4917163
Lesenswert?

Arduino F. schrieb:
> Dann kannst du das mit strtok() und atoi() recht einfach wieder
> zerlegen.
Ich habe mir mal die strtok() Methode durchgelesen und finde die recht 
passend. Ich werde diese mal ausprobieren!

Felix F. schrieb:
> Ich würde nur die 3 Bytes senden, dann können sie direkt als uint8 in
> eine Variable gecastet werden und die Werte stehen ohne große
> Stringconvertierung etc. gleich zur Verfügung.
Das hört sich auch nicht schlecht an! Ich probiere beides aus und schaue 
mal was ich praktischer finde.

Und ein dickes Lob an die Community. Ich hätte nicht mit so einer 
schnellen Antwort gerechnet.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren