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

  • krisztián28

    csendes tag

    válasz ghck #4286 üzenetére

    Szia!
    Nagyon köszönöm a segítséget!!! Tökéletesen működik így, hogy átírtam egy másik lábra :C :C :C
    Nagy az öröm!!!

    Ha valakit érdekel feltöltöm a működő kódot, hátha valaki hasznát veszi !
    Az eredeti kód nem az én szüleményem! Innen származik!
    Az átalakított programban egy arduino nano RS485-ön kommunikál a központtal ami szintén egy arduino nano ami usb-n van csatlakoztatva egy raspberry pi-re. A gomb megnyomásakor a rákötött led szalag fokozatosan (fadel-ve) bekapcsol 100%-ra, következő gombnyomásra fokozatosan lekapcsol 0%-ra. Ha hosszan tartod nyomva a gombot akkor pedig lehet fényerőt szabályozni. Domoticz alatt is tökéletesen működik ott is lehet ki -be kapcsolni és a csúszkán (át kell állítani dimmerre) is lehet szabályozni a fényerőt. A programban jelenleg összesen 2 db különálló led szalagot lehet szabályozni 2 db nyomógombbal.
    /*
    Board Transmit Receive PWM Unusable
    ----- -------- ------- ------------
    Arduino Uno 9 8 10
    Arduino Mega 46 48 44, 45
    */

    #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 FADE_DELAY2 10 // Delay in ms for each percentage fade up/down (10ms = 1s full-range dim)
    #define LED1_PIN 6 //led szalag
    #define LED2_PIN 5 //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) {

    if (message.sensor == 1){

    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);
    }

    if (message.sensor == 2){

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

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

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

    setLED2(requestedLevel2);
    }
    }
    }
    //---------------------------------------------------------------------------------------------------------------------------------------------------

    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 level2)
    {

    int delta = (level2 - ledLevel2) < 0 ? -1 : 1; //Fade LED to set level

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

    MyMessage lightMsg2(CHILD_ID_LIGHT2, V_LIGHT);
    MyMessage dimmerMsg2(CHILD_ID_LIGHT2, V_DIMMER);
    send(lightMsg2.set(ledLevel2 > 0));
    send(dimmerMsg2.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); }

    Használjátok egészséggel!
    Mindenkinek köszönöm a segítséget!
    Szép estét! :)

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