Benötige Hilfe bei LED-Ansteuerung

Hallo Community,
ich möchte mit dem Arduino Uno Daten über das sichtbare Licht übertragen. Funktioniert auch alles (~200Byte/s), aber nur über wenn ich die zu sendenden Daten über den SerialMonitor sende(Anhang "VLC_Serial"). Aus dem Programm selbst bekomm ich die LED nicht angesteuert (Anhang "VLC_Stream) und ich komme einfach nicht drauf. Ich denke, es fehlt nicht viel, aber meine c-Künste sind etwas amateurhaft... anscheinend. Für Hilfe/Tipps wäre ich sehr dankbar.
Grüße
der Fred

VLC_Serial.ino (6 KB)

VLC_Stream.ino (5.8 KB)

Eigentlich müßte ein LED mit Vorwiderstand an der TX-Kanal einer seriellen Schnittstelle ( Hardware oder Software emuiert ) und ein Fototransistor mit eienm Pulldown-Widerstand an RX genügen um eine optiche Schnittstelle zu bauen. Dieser Aufbau ist aber empfindlich gegenüber Umgebungslicht. Da ist es besser ein Moduliertes Signal zu verwenden; zB als Empfänger ein TSOP und als Sender eine LED die mit einem UND-Gatter die Wechselspannung aufmoduliert bekommt.

Grüße Uwe

Hallo Uwe, erstmal Danke für deine Antwort. Die bisherige Signal-Modulation genügt mir und die Ergebnisse sind auch ausreichend. Mein Problem besteht eigentlich nur darin, dass ich nicht verstehe, wieso die LED in der Datei "VLC_Stream" nicht genauso leuchtet bei High-Pegel "1" wie in der anderen Datei. Meine einzige Änderung besteht darin, dass ich die zu sendenden Bytes nicht über SerialRead() sondern direkt von einem char array einlese und senden will. Das Problem muss irgendwo in der Schnittstelle von gelesenem Byte und LED-Ansteuerung liegen, aber ich stehe im Wald :~

Ich habe einen Ansatz gefunden, worin das Problem liegen könnte. Die Daten die von Serial.Read() kommen haben doch 8-N-1-Format! Könnte das der Grund sein?
Denn wenn ich ein "A" in den SerialMonitor eingebe bei
char in = Serial.read();
wird die LED angesteuert.
Wenn ich hingegen
char in = 65;
Serial.write(in);
schreibe, wird die LED nicht mehr angesteuert.

Könnte da der Fehler liegen?

Denn wenn ich ein "A" in den SerialMonitor eingebe bei
char in = Serial.read();
wird die LED angesteuert.

Welche LED wird beim Empfangen angesteuert?
Grüße Uwe

Hallo Uwe,
nicht beim Empfangen. Die LED ist der Sender! Sonst gar nichts! :slight_smile: ...definiert an PIN 12.
Was ich mittlerweile herausgefunden habe: Von Serial.Read() wird das ASCII-Zeichen PLUS(!) '1101' gesendet (werden wohl Parität und Stopbit sein).
Bei Eingabe 'A' in den SerialMonitor gibt der Code
in = Serial.read();
Serial.println(in,BIN);
Serial.write(in);
folgendes aus:
1000001
A1101
'1101' (Dezimal '13') werden erst im nächsten Zyklus in die Var. "in" geschrieben. Wie kann ich das ohne Serial.Read()-Funktion nachbauen bzw. wo wird das 1101 im Code benötigt?

Eine LED als Empfänger ist nicht sehr effizient bzw sensibel bessere ein Fototransistor.
grüße Uwe

Ich glaube ich drücke mich nicht deutlich aus :cold_sweat:
Die LED sendet, die Photodiode empfängt. Das Problem liegt einzig und allein im Code, denn über die serielle Eingabe sendet die LED und die Photodiode empfängt. Wenn ich versuche, die zu übertragenden Zeichen in den Code direkt zu implementieren, sendet die LED nicht (also kann die PD auch nichts empfangen)...
Danke für die Geduld & Hilfe im Voraus!