Forum: Mikrocontroller und Digitale Elektronik Arduino/ C# RGB LED Steuerung


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Jannick G. (jannick_g)


Bewertung
0 lesenswert
nicht 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

von Marc V. (Firma: Vescomp) (logarithmus)


Bewertung
0 lesenswert
nicht lesenswert
Jannick G. schrieb:
> Nun zu meiner Frage wie kann ich diesen String nun am besten
> verarbeiten?

 Und nun zu meiner Frage:
 Wie sieht der String für reines Rot oder Grün aus ?

von KeK (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Zeig mal dein komplettes Programm her.

von Joachim S. (oyo)


Bewertung
0 lesenswert
nicht 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).

von Arduino Fanboy D. (ufuf)


Bewertung
0 lesenswert
nicht lesenswert
Eine Brücke zwischen C# und Arduino gibt es schon fertig.
http://playground.arduino.cc/Code/CmdMessenger3

: Bearbeitet durch User
von Wolfgang H. (drahtverhau)


Bewertung
0 lesenswert
nicht lesenswert

von Jannick G. (jannick_g)


Bewertung
0 lesenswert
nicht 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.

von Arduino Fanboy D. (ufuf)


Bewertung
0 lesenswert
nicht lesenswert
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.

: Bearbeitet durch User
von Marc V. (Firma: Vescomp) (logarithmus)


Bewertung
0 lesenswert
nicht lesenswert
Arduino F. schrieb:
> Dann kannst du das mit strtok() und atoi() recht einfach wieder
> zerlegen.

 Du bist einfach zu schnell...

von Arduino Fanboy D. (ufuf)


Bewertung
0 lesenswert
nicht lesenswert
Danke, für die Blumen!

Jannick G. schrieb:
> 255000000

Mir gefallen solche Zahlenwürste nicht.
Außerdem tappe ich bei sowas immer wieder in die Oktal Falle...
Mittlerweile kenne ich sie, aber beim ersten Mal, da hat es richtig weh 
getan.

: Bearbeitet durch User
von Felix F. (wiesel8)


Bewertung
1 lesenswert
nicht 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

: Bearbeitet durch User
von Jannick G. (jannick_g)


Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.