Arduino/ C# RGB LED Steuerung

OP #4916987
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
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
@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.
Gast #4917034
Falsches Format!

Tipp: (Vorschlag)
Sende für Rot:
> 255,0,0;
Dann kannst du das mit strtok() und atoi() recht einfach wieder 
zerlegen.
Und es bleibt menschenlesbar.
#4917062
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
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

Eine eigene Frage? Dieser Thread ist über 9 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.