Also ich habe das mit der PWM versucht auszuwerten.
Impuls 1-2 ms high, 18ms low
Mit millis() und micros() hat das leider bei mir nicht funktioniert.
Der Impuls ist 1000us -2000us lang.
Die Abfragen und Auswertungen dauerten irgendwie zu lange.
So habe ich während des Impulses ein Zähler laufen, der einfach eine Zahl hochzählt.
Es ergeben sich dabei Werte von 200-400 die man dann entsprechend auswerten kann.
Danach wird je nach Zählerstand die LED gedimmt und blitzt auch 3 mal.
Unter 250 ist die LED aus, von 250-350 ist sie gedimmt, und über 350 Blitzt sie zusätzlich 3x.
Ein Problem gibt es aber beim Dimmen.
Da liegt je die Abfrage des Impulses dazwischen. Und die dauert länger als die Ein- Auszeit beim Dimmen,
sodaß man eine kurze Unterbrechung bei Dimmen hat.
Aber die wird man nicht wegbekommen, evtl mit Interruptverarbeitung (da kenne ich micht nicht aus).
Ich weiß leider noch nicht, wie man Codetags einfügt (hatte mit Programmieren lernen zu tun).
Deshalb hier der Sketch nochmal normal:
int led = 13; // LED Ausgang Nr.
int e1=2; // SignalEingang Nr.
int e1_Level; // Eingangszustand
int time1 =0; // Zähler Zeit
int count = 0; // Loop LED
void setup()
{
pinMode(led , OUTPUT); // Ausgang setzen
pinMode(e1 , INPUT_PULLUP); // Eingang setzen
}
void loop()
{
{
time1 = 0;
do // Impulsynchronisierung
{
e1_Level = digitalRead(e1);
}
while (e1_Level == 0); // ppm Pause
do
{
e1_Level = digitalRead(e1);
}
while (e1_Level == 1); // ppm high
do
{
e1_Level = digitalRead(e1);
}
while (e1_Level == 0); // ppm Pause
do // Impulsauswertung
{
e1_Level = digitalRead(e1); // 2. PPM Signal = Längenmessung
time1++; // ca.: -100% = 200 , 0% = 300 , 100% = 400
}
while (e1_Level == 1); // ppm Signal high
if(time1 > 250) // LED Stufe 1 - gedimmt
{
count = 0;
do
{
digitalWrite(led,HIGH); // 30x LED ein 1:5
delay(3);
digitalWrite(led,LOW);
delay(15);
count++;
}
while (count <= 30);
}
if(time1 > 350) // LED Stufe 2 - mit Blitzer
{
count = 0;
do
{
digitalWrite(led,HIGH); // 3x LED ein 3:1
delay(100);
digitalWrite(led,LOW);
delay(33);
count++;
}
while (count < 4);
}
}
}