FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Familienpapi am 18 Juni 2015, 19:37:07

Titel: Ein-Taster-Dimmer am Arduino Mega2560
Beitrag von: Familienpapi am 18 Juni 2015, 19:37:07
Hallo, Zusammen,

ich möchte einen prellfreien Taster an einem Arduino Mega2560 abfragen und zwar in derart, dass unterschieden werden soll, ob er kurz gedrückt wurde oder länger als 2 Sekunden. Wenn kurz gedrückt, soll nur ein toggle für ein Licht an einem PWM Port erfolgen. Wenn er länger als 2 Sekunden gedrückt wird, soll solange wie der Taster gedrückt wird, das Licht aufgedimmt werden. Wenn bei 100% angekommen, kann bei 0% wieder angefangen werden oder besser noch abgedimmt werden (separates Thema).

Folgenden Code (Ausschnitt) habe ich hierfür:

define notify_Li_Zi1_1 notify Li_Zi1_1_Taster:.*on {\
  my $start=int(time());;\
  while (ReadingsVal("Li_Zi1_1_Taster","reading","Off") eq "On") {\
    if (int(time())-2 > $start) {\
      ##dimmen
    }\
  }\
  if (int(time())-2 < $start) {\
    fhem "set Li_Zi1_1 toggle";;\
  }\
}


Li_Zi1_1 ist der PWM Ausgang, an dem das LED Band angeschlossen ist.
Li_Zi1_1_Taster ist der Eingang, an dem der Taster prellfrei angeschlossen ist.
Beides voll funktionsfähig.

Das Problem dabei ist, dass das Skript nicht bemerkt, wenn der Taster wieder auf "off" geht, also los gelassen wird. FHEM stürzt an der Stelle dann ab bzw. hängt in der Schleife endlos drin. Habe mir mit einem "last"-Abbruch nach 15 Sekunden beholfen, aber ich bekomme keine Aktualisierung des Tasters während die while-Schleife läuft. Erst wenn die while Schleife verlassen wurde, wird der Zustand des Tasters geändert (im Web sichtbar).

Wie bekomme ich die FRM_IN Aktualisierung des Tasters in die while-Schleife rein, also dass der Taster jetzt wieder los gelassen wurde? Das ist mein einziges Problem an der ganzen Sache. Ein zusätzliches "get" half auch nicht.

Bei Unklarheiten einfach fragen. Danke.