Blamaster
08.05.2009, 18:45
Hi,
ich möchte mir aktuell ein Atmolight aufbauen.
Die Platine dazu steht auch bereits und funktioniert soweit.
Jeder Led (R,G und B) kann ich einen Helligkeitswert zwischen 0 und 255 zuweisen.
Nun habe ich ein Programm gefunden, welches mir die passende Farbdaten ausgeben soll. (AtmoWin)
Auf deren Wikiseite habe ich folgendes Protokoll gefunden.
Serielles Protokoll
Baudrate: 38400 bps Parity: None Datenbits: 8 Stopbits: 1
Nachrichtenformat:
Byte Beschreibung
0 0xFF: Startbyte
1 0x00: Startkanal (low byte)
2 0x00: Startkanal (high byte)
3 0x0F: Anzahl Kanäle (15 = 5 * 3 (R, G, B))
4-6 Summenkanal R, G, B (Center)
7-9 linker Kanal R, G, B (Left)
10-12 rechter Kanal R, G, B (Right)
13-15 oberer Kanal R, G, B (Top)
16-18 unterer Kanal R, G, B (Bottom)
Beispiel:
Folgende Nachricht (in hexadezimaler Darstellung) gibt auf allen Kanälen hellstes Rot aus:
0xFF 0x00 0x00 0x0F 0xFF 0x00 0x00 0xFF 0x00 0x00 0xFF 0x00 0x00 0xFF 0x00 0x00 0xFF 0x00 0x00
Interesse habe ich nur an dem Summenkanal (Center) der Bytes 4-6.
Wie könnte ich das Codetechnisch umsetzen ? (Habe noch nicht so oft mit der Rs232 Schnittstelle gearbeitet)
Ich stelle mir das gerade so vor:
Isrlable:
Incr E_id
If E_id = 5 Then Led_r = Udr
If E_id = 6 Then Led_g = Udr
If E_id = 7 Then Led_b = Udr
If E_id = 19 Then E_id = 0
Return
Würde das so gehen, oder habe ich da einen Denkfehler drin ?
Was mich dann noch werwirrt ist das Beispiel:
0xFF 0x00 0x00 0x0F 0xFF 0x00 0x00 0xFF 0x00 0x00 0xFF 0x00 0x00 0xFF 0x00 0x00 0xFF 0x00 0x00
Ich brauche ja einen Zahlenwert zwischen 0 und 255 kann ich die Hexdezimal irgendwie ich einen solchen Zahlenwert umwandeln ?
Ich hoffe schonmal auf Hilfe :)
mfg Yannic
ich möchte mir aktuell ein Atmolight aufbauen.
Die Platine dazu steht auch bereits und funktioniert soweit.
Jeder Led (R,G und B) kann ich einen Helligkeitswert zwischen 0 und 255 zuweisen.
Nun habe ich ein Programm gefunden, welches mir die passende Farbdaten ausgeben soll. (AtmoWin)
Auf deren Wikiseite habe ich folgendes Protokoll gefunden.
Serielles Protokoll
Baudrate: 38400 bps Parity: None Datenbits: 8 Stopbits: 1
Nachrichtenformat:
Byte Beschreibung
0 0xFF: Startbyte
1 0x00: Startkanal (low byte)
2 0x00: Startkanal (high byte)
3 0x0F: Anzahl Kanäle (15 = 5 * 3 (R, G, B))
4-6 Summenkanal R, G, B (Center)
7-9 linker Kanal R, G, B (Left)
10-12 rechter Kanal R, G, B (Right)
13-15 oberer Kanal R, G, B (Top)
16-18 unterer Kanal R, G, B (Bottom)
Beispiel:
Folgende Nachricht (in hexadezimaler Darstellung) gibt auf allen Kanälen hellstes Rot aus:
0xFF 0x00 0x00 0x0F 0xFF 0x00 0x00 0xFF 0x00 0x00 0xFF 0x00 0x00 0xFF 0x00 0x00 0xFF 0x00 0x00
Interesse habe ich nur an dem Summenkanal (Center) der Bytes 4-6.
Wie könnte ich das Codetechnisch umsetzen ? (Habe noch nicht so oft mit der Rs232 Schnittstelle gearbeitet)
Ich stelle mir das gerade so vor:
Isrlable:
Incr E_id
If E_id = 5 Then Led_r = Udr
If E_id = 6 Then Led_g = Udr
If E_id = 7 Then Led_b = Udr
If E_id = 19 Then E_id = 0
Return
Würde das so gehen, oder habe ich da einen Denkfehler drin ?
Was mich dann noch werwirrt ist das Beispiel:
0xFF 0x00 0x00 0x0F 0xFF 0x00 0x00 0xFF 0x00 0x00 0xFF 0x00 0x00 0xFF 0x00 0x00 0xFF 0x00 0x00
Ich brauche ja einen Zahlenwert zwischen 0 und 255 kann ich die Hexdezimal irgendwie ich einen solchen Zahlenwert umwandeln ?
Ich hoffe schonmal auf Hilfe :)
mfg Yannic