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

  • krisztián28

    csendes tag

    Sziasztok!
    Segítséget szeretnék kérni!
    Adott egy MySensors sketch ami egy ledet hivatott dimmerelni.
    Szeretném duplikálni, magyarul egy Arduino Nanoval két külön led szalagot vezérelni két külön nyomógombbal.
    Programozásban nem vagyok jártas, de megpróbáltam átírni a programot viszont nem igazán úgy működik ahogy kéne.
    Valaki ránézne, hogy mit rontottam el? :F :F :F

    /*
    Board Transmit Receive PWM Unusable
    ----- -------- ------- ------------
    Arduino Uno 9 8 10
    Arduino Mega 46 48 44, 45
    */

    #define SN "tobb_led_dimmer_teszt_proba"
    #define SV "1.0"

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

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

    #define CHILD_ID_LIGHT1 1
    #define CHILD_ID_LIGHT2 2
    #define LED1_PIN 6 //nappali fehér led
    #define LED2_PIN 7 //előszoba led
    #define BUTTON1_PIN 3 //nappali fehér led gomb GND-re
    #define BUTTON2_PIN 4 //előszoba led gomb GND-re
    #define FADE_DELAY 10 // Delay in ms for each percentage fade up/down (10ms = 1s full-range dim)

    byte ledLevel;
    boolean ledDimWay;

    OneButton button1(BUTTON1_PIN, false);
    OneButton button2(BUTTON2_PIN, false);

    void setup()
    {

    // Setup the buttons
    pinMode(BUTTON1_PIN, INPUT_PULLUP);
    pinMode(BUTTON2_PIN, INPUT_PULLUP);

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

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

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

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

    // Register the LED Dimmable Light with the gateway
    present(CHILD_ID_LIGHT1, S_DIMMER, "nappali fehér led");
    present(CHILD_ID_LIGHT2, S_DIMMER, "előszoba világítás");
    }

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


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

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

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

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

    setLED(requestedLevel);
    }
    }

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

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

    MyMessage lightMsg1(CHILD_ID_LIGHT1, V_LIGHT);
    MyMessage dimmerMsg1(CHILD_ID_LIGHT1, V_DIMMER);
    MyMessage lightMsg2(CHILD_ID_LIGHT2, V_LIGHT);
    MyMessage dimmerMsg2(CHILD_ID_LIGHT2, V_DIMMER);

    send(lightMsg1.set(ledLevel > 0));
    send(dimmerMsg1.set(ledLevel));
    send(lightMsg2.set(ledLevel > 0));
    send(dimmerMsg2.set(ledLevel));
    }

    void writeToLED()
    {
    analogWrite(LED1_PIN, map(ledLevel,0,100,0,255));
    analogWrite(LED2_PIN, map(ledLevel,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() {setLED(ledLevel>0 ? 0 : 100); }
    void pstart2() {ledDimWay = ledLevel<100; }
    void press2() {if(ledDimWay && ledLevel<100) ledLevel++; if(!ledDimWay && ledLevel>5) ledLevel--; writeToLED(); delay(25); }
    void pstop2() {setLED(ledLevel); }

    Köszönöm előre is!

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