Ethersex (Control6-Script)

Persönliche Seite #1816313
Lesenswert?

Hi,

vieleicht kennt sich ja jemand mit control6-scripts in ethersex aus und 
kann mir ein wenig weiter helfen.

Ich möchte gern folgendes realisieren:

An einem ADC-Port ein Poti hängen und abhängig von dem Wert per stella 
(PWM Modul) eine LED in der Helligkeit steuern.

Das klappt auch, nur kann ich stella wohl nicht aus control6 herraus 
direkt steuern, sondern wie im code unten per esend. Wenn ich nun das 
WAIT weglasse funktioniert nix mehr (ich nehme an, er schickt unendlich 
viele esends, wäre logisch) mit 1 Sekunde, ist das aber zu langsam.

Ich hab einen Schiebepoti und in 1 Sekunde kann ich den von einer Seite 
auf die andere schieben und die Reaktion kommt dann halt erst 1 Sekunde 
später. Da ich später Farben mischen möchte (RGB LEDs - 3 Schieberegler) 
ist 1 Sekunde einfach zu lang.

Ich verwende Pollin NetIO, da ich die Einstellungen sowohl übers Netz 
als auch "am Gerät" verändern können möchte.

Ich hab mir schon nen paar gedanken gemacht wie ich mein Problem lösen 
könnte, aber die sind alle irgendwie doof:

 - mehrere dieser Threads mit 1 sek Starten und hoffen das sie zeitlich 
versetzt laufen.
 - einen ADC Wert merken und nur esend benutzen wenn dieser sich 
verändert hat (dann tritt wahrscheinlich das problem "nur" nach auf wenn 
ich den schiebepoti bewege ).
 - eine globale Variable einfuegen, in der ich die Anzahl der gesendeten 
esends speicher, wenn der grösser als x ist werden keine mehr gesendet 
und jede sekunde diese Variable auf 0 setzen (per 2. thread).

[code]
CONTROL_START

   THREAD(testing)
      ECMD_GLOBAL(wert, 0, uint16_t);
      wert = ADC_GET(7);
      WAIT(1)
      ON wert < 512 DO ESEND(192.168.7.3, "channel 0 0\n"); END
      ON wert > 511 DO ESEND(192.168.7.3, "channel 0 255\n"); END
   THREAD_END(testing)

   ON STARTUP
      DO THREAD_START(testing);
   END

CONTROL_END
[code]

vieleicht fällt je jemand was besseres ein.

Danke erstmal
Persönliche Seite #1816573
Lesenswert?

also die ethersex mailingliste hat geholfen, eine lösung wäre:
1
#include "services/stella/stella.h"
2

3
CONTROL_START
4
 
5
    THREAD(testing)
6
       ECMD_GLOBAL(wert, 0, uint16_t);
7
       wert = ADC_GET(7);
8
       ON wert < 512 DO stella_setValue(STELLA_SET_IMMEDIATELY, 0, 0); END
9
       ON wert > 511 DO stella_setValue(STELLA_SET_IMMEDIATELY, 0, 255); END
10
    THREAD_END(testing)
11
 
12
    ON STARTUP
13
       DO THREAD_START(testing);
14
    END
15
 
16
CONTROL_END

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren