Új hozzászólás Aktív témák

  • krisztián28

    csendes tag

    válasz layerke #4283 üzenetére

    Szia!

    Abszolút igazad van!

    Némileg módosítottam a programot, alább fel is töltöm...

    Annyi a lényeg, hogy az első led tökéletesen működik, lehet dimmelni, ki és bekapcsolni (bekapcsoláskor és kikapcsoláskor is van fade-lése) nyomógombról és a domoticz alól is.
    A második led viszont ha például megnyomom a második nyomógombot akkor a gomb hatására fade-lés nélkül bekapcsol majd újabb gombnyomásra fadelés nélkül kikapcsol. Dimmelni nem lehet hosszú gombnyomással. Domoticz alól pedig ha a virtuális gombra kattintok akkor csak az első ledet kapcsolja ki és be.
    Úgy gondolom hogy amit a vázlaton kiemeltem részt, oda kellene még valamit beírni illetve duplikálni, csak azt nem tudom, hogy mit...
    #define SN "eloszoba led"
    #define SV "1.0"

    #define MY_DEBUG
    #define MY_NODE_ID 6
    #define MY_RS485
    #define MY_RS485_DE_PIN 10
    #define MY_RS485_BAUD_RATE 9600

    #include <OneButton.h>
    #include <MySensors.h>

    #define CHILD_ID_LIGHT1 1
    #define CHILD_ID_LIGHT2 2
    #define FADE_DELAY 10 // Delay in ms for each percentage fade up/down (10ms = 1s full-range dim)
    #define LED1_PIN 6 //led szalag
    #define LED2_PIN 7 //led szalag
    #define BUTTON1_PIN 3 //nyomógomb
    #define BUTTON2_PIN 4 //nyomógomb

    byte ledLevel;
    boolean ledDimWay;
    byte ledLevel2;
    boolean ledDimWay2;

    OneButton button1(BUTTON1_PIN, HIGH); //a 3-as lábat kell GND-re húzni! nyomógomb
    OneButton button2(BUTTON2_PIN, HIGH); //a 3-as lábat kell GND-re húzni! nyomógomb

    void setup()
    {
    pinMode(BUTTON1_PIN, INPUT_PULLUP);

    button1.attachClick(click1);
    button1.attachDuringLongPress(press1);
    button1.attachLongPressStart(pstart1);
    button1.attachLongPressStop(pstop1);

    request(CHILD_ID_LIGHT1, V_DIMMER); // Pull the gateway's current dim level - restore light level upon sendor node power-up


    pinMode(BUTTON2_PIN, INPUT_PULLUP);

    button2.attachClick(click2);
    button2.attachDuringLongPress(press2);
    button2.attachLongPressStart(pstart2);
    button2.attachLongPressStop(pstop2);

    request(CHILD_ID_LIGHT2, V_DIMMER); // Pull the gateway's current dim level - restore light level upon sendor node power-up
    }


    void presentation()
    {
    sendSketchInfo(SN, SV);

    present(CHILD_ID_LIGHT1, S_DIMMER, "előszoba világítás1"); // Register the LED Dimmable Light with the gateway
    present(CHILD_ID_LIGHT2, S_DIMMER, "előszoba világítás2"); // Register the LED Dimmable Light with the gateway
    }


    void loop()
    {
    button1.tick();
    button2.tick();
    }

    //-------------------------------------------------------------------------------------------------------------------------------------------------
    void receive(const MyMessage &message)
    {
    if (message.type == V_LIGHT || message.type == V_DIMMER) {

    int requestedLevel = atoi(message.data); // Retrieve the power or dim level from the incoming request message

    requestedLevel *= ( message.type == V_LIGHT ? 100 : 1 ); // Adjust incoming level if this is a V_LIGHT variable update [0 == off, 1 == on]

    requestedLevel = requestedLevel > 100 ? 100 : requestedLevel; // Clip incoming level to valid range of 0 to 100
    requestedLevel = requestedLevel < 0 ? 0 : requestedLevel; // Clip incoming level to valid range of 0 to 100

    setLED(requestedLevel);
    }
    }
    //---------------------------------------------------------------------------------------------------------------------------------------------------

    void setLED(byte level)
    {
    int delta = (level - ledLevel) < 0 ? -1 : 1; //Fade LED to set level

    while (ledLevel != level)
    {
    ledLevel += delta;
    analogWrite(LED1_PIN, (int)(ledLevel / 100. * 255) );
    delay(FADE_DELAY);
    }

    MyMessage lightMsg(CHILD_ID_LIGHT1, V_LIGHT);
    MyMessage dimmerMsg(CHILD_ID_LIGHT1, V_DIMMER);

    send(lightMsg.set(ledLevel > 0));
    send(dimmerMsg.set(ledLevel));
    }

    void setLED2(byte level)
    {
    int delta = (level - ledLevel2) < 0 ? -1 : 1; //Fade LED to set level

    while (ledLevel2 != level)
    {
    ledLevel2 += delta;
    analogWrite(LED2_PIN, (int)(ledLevel2 / 100. * 255) );
    delay(FADE_DELAY);
    }

    MyMessage light2Msg(CHILD_ID_LIGHT2, V_LIGHT);
    MyMessage dimmer2Msg(CHILD_ID_LIGHT2, V_DIMMER);

    send(light2Msg.set(ledLevel2 > 0));
    send(dimmer2Msg.set(ledLevel2));
    }


    void writeToLED()
    {
    analogWrite(LED1_PIN, map(ledLevel,0,100,0,255));
    }

    void writeToLED2()
    {
    analogWrite(LED2_PIN, map(ledLevel2,0,100,0,255));
    }

    void click1() {setLED(ledLevel>0 ? 0 : 100); }
    void pstart1() {ledDimWay = ledLevel<100; }
    void press1() {if(ledDimWay && ledLevel<100) ledLevel++; if(!ledDimWay && ledLevel>5) ledLevel--; writeToLED(); delay(25); }
    void pstop1() {setLED(ledLevel); }

    void click2() {setLED2(ledLevel2>0 ? 0 : 100); }
    void pstart2() {ledDimWay2 = ledLevel2<100; }
    void press2() {if(ledDimWay2 && ledLevel2<100) ledLevel2++; if(!ledDimWay2 && ledLevel2>5) ledLevel2--; writeToLED2(); delay(25); }
    void pstop2() {setLED2(ledLevel2); }

Új hozzászólás Aktív témák