Need help with Code. Simple Nod with 4 button's and 2 Led output. Cant get he Led to work as I whant. They respond but both lights



  • I want change state for the LEDS but they both lights when i Press on in Domoticz.

    How to solve the last stage with if (message.type == V_STATUS) // Change relay state

    If command A = Led 1 lights or command B = Led 2 Lights.

    Best regards!
    Bosses leksak.jpg

    /**
     * The MySensors Arduino library handles the wireless radio link and protocol
     * between your home built sensors/actuators and HA controller of choice.
     * The sensors forms a self healing radio network with optional repeaters. Each
     * repeater and gateway builds a routing tables in EEPROM which keeps track of the
     * network topology allowing messages to be routed to nodes.
     *
     * Created by Henrik Ekblad <henrik.ekblad@mysensors.org>
     * Copyright (C) 2013-2015 Sensnology AB
     * Full contributor list: https://github.com/mysensors/Arduino/graphs/contributors
     *
     * Documentation: http://www.mysensors.org
     * Support Forum: http://forum.mysensors.org
     *
     * This program is free software; you can redistribute it and/or
     * modify it under the terms of the GNU General Public License
     * version 2 as published by the Free Software Foundation.
     *
     *******************************
     *
     * DESCRIPTION
     *
     * Simple binary switch example 
     * Connect button or door/window reed switch between 
     * digitial I/O pin 3 (BUTTON_PIN below) and GND.
     * http://www.mysensors.org/build/binary
     */
    
    
    // Enable debug prints to serial monitor
    #define MY_DEBUG 
    
    // Enable and select radio type attached
    #define MY_RADIO_RF24
    //#define MY_RADIO_RFM69
    
    #include <MySensors.h>
    #include <Bounce2.h>
    
    #define CHILD_ID_1 1
    #define CHILD_ID_2 2
    #define CHILD_ID_3 3
    #define CHILD_ID_4 4
    #define CHILD_ID_5 5  //LED KNAPP OUTPUT
    #define CHILD_ID_6 6  //LED KNAPP OUTPUT
    
    #define LED_PIN_Channel_1 3 // Relay 
    #define LED_PIN_Channel_2 4 // Relay
    #define BUTTON_PIN_Channel_1 5
    #define BUTTON_PIN_Channel_1 5  // Arduino Digital I/O pin for button/reed switch
    #define BUTTON_PIN_Channel_2 6 
    #define BUTTON_PIN_Channel_3 7
    #define BUTTON_PIN_Channel_4 8
    
    
    
    #define MY_REPEATER_FEATURE
    #define MY_DEFAULT_LED_BLINK_PERIOD 300
    #define MY_DEFAULT_TX_LED_PIN A0
    #define MY_DEFAULT_RX_LED_PIN A1
    
    
    // RELÄ LED
    
    #define RELAY_1_ON 1
    #define RELAY_2_ON 1
    #define RELAY_1_OFF 0
    #define RELAY_2_OFF 0
    bool state_1; // RELÄ 1 
    bool state_2; // RELÄ 2
    
    Bounce debouncer_1 = Bounce(); 
    Bounce debouncer_2 = Bounce(); 
    Bounce debouncer_3 = Bounce(); 
    Bounce debouncer_4 = Bounce(); 
    
    int oldValue_1=-1;
    int oldValue_2=-1;
    int oldValue_3=-1;
    int oldValue_4=-1;
    
    // Change to V_LIGHT if you use S_LIGHT in presentation below
    MyMessage msg1(CHILD_ID_1, V_TRIPPED);
    MyMessage msg2(CHILD_ID_2, V_TRIPPED);
    MyMessage msg3(CHILD_ID_3, V_TRIPPED);
    MyMessage msg4(CHILD_ID_4, V_TRIPPED);
    MyMessage msg5(CHILD_ID_5, V_STATUS); //LED
    MyMessage msg6(CHILD_ID_6, V_STATUS); //LED
    
    void setup()  
    {  
      // Setup the button
      // Activate internal pull-up
       // After setting up the button, setup debouncer
      pinMode(BUTTON_PIN_Channel_1,INPUT);
      pinMode(BUTTON_PIN_Channel_2,INPUT);
      pinMode(BUTTON_PIN_Channel_3,INPUT);
      pinMode(BUTTON_PIN_Channel_4,INPUT);
    
    
    //  RELÄ
    
      pinMode(LED_PIN_Channel_1, OUTPUT);
      pinMode(LED_PIN_Channel_2, OUTPUT);  
      pinMode(A0, OUTPUT); // RX TX Använda Analog pin som output 
      pinMode(A1, OUTPUT); // RX TX
    
      digitalWrite(LED_PIN_Channel_1, RELAY_1_OFF);
      digitalWrite(LED_PIN_Channel_2, RELAY_2_OFF);
    
    // Minne från EEPROM
    
       state_1 = loadState(CHILD_ID_5);
      digitalWrite(LED_PIN_Channel_1, state_1?RELAY_1_ON:RELAY_1_OFF);
    
         state_2 = loadState(CHILD_ID_6);
      digitalWrite(LED_PIN_Channel_2, state_2?RELAY_2_ON:RELAY_2_OFF);
      
      digitalWrite(BUTTON_PIN_Channel_1,LOW);
      digitalWrite(BUTTON_PIN_Channel_2,LOW);
      digitalWrite(BUTTON_PIN_Channel_3,LOW);
      digitalWrite(BUTTON_PIN_Channel_4,LOW);
      
      debouncer_1.attach(BUTTON_PIN_Channel_1);
      debouncer_2.attach(BUTTON_PIN_Channel_2);
      debouncer_3.attach(BUTTON_PIN_Channel_3);
      debouncer_4.attach(BUTTON_PIN_Channel_4);
      debouncer_1.interval(5);
      debouncer_2.interval(5);
      debouncer_3.interval(5);
      debouncer_4.interval(5);
      
    }
    
    void presentation() {
      // Register binary input sensor to gw (they will be created as child devices)
      // You can use S_DOOR, S_MOTION or S_LIGHT here depending on your usage. 
      // If S_LIGHT is used, remember to update variable type you send in. See "msg" above.
    
      // Send the sketch version information to the gateway and Controller
      sendSketchInfo(F("Bosses LEKSAK"), F("1.1"));
      present(CHILD_ID_1, S_DOOR); 
      present(CHILD_ID_2, S_DOOR); 
      present(CHILD_ID_3, S_DOOR); 
      present(CHILD_ID_4, S_DOOR);  
      present(CHILD_ID_5, S_BINARY); 
      present(CHILD_ID_6, S_BINARY);  
    }
    
    
    //  Check if digital input has changed and send in new value
    void loop() 
    {
      debouncer_1.update();
      debouncer_2.update();
      debouncer_3.update();
      debouncer_4.update();
      
      
      
      // Get the update value
      int value_1 = debouncer_1.read();
      int value_2 = debouncer_2.read();
      int value_3 = debouncer_3.read();
      int value_4 = debouncer_4.read();
     
      if (value_1 != oldValue_1) {
         // Send in the new value
         send(msg1.set(value_1==HIGH ? 1 : 0));
         oldValue_1 = value_1; }
      
    
      if (value_2 != oldValue_2) {
         // Send in the new value
         send(msg2.set(value_2==HIGH ? 1 : 0));
         oldValue_2 = value_2; }
    
      if (value_3 != oldValue_3) {
         // Send in the new value
         send(msg3.set(value_3==HIGH ? 1 : 0));
         oldValue_3 = value_3; }
    
      if (value_4 != oldValue_4) {
         // Send in the new value
         send(msg4.set(value_4==HIGH ? 1 : 0));
         oldValue_4 = value_4; }
    }
    
    void receive(const MyMessage &message) {
      // We only expect one type of message from controller. But we better check anyway.
       if (message.isAck()) {
         Serial.println("This is an ack from gateway");
    //XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
    
    
    
    
         
    }
    
       if (message.type == V_STATUS) {
       // Change relay state
        state_1 = message.getBool();
        digitalWrite(LED_PIN_Channel_1, state_1?RELAY_1_ON:RELAY_1_OFF);
        // Store state in eeprom
        saveState(CHILD_ID_5, state_1);
        
         // Write some debug info
         Serial.print("Incoming change for sensor: STATE 1");
         Serial.print(message.sensor);
         Serial.print(", New status: ");
         Serial.println(message.getBool());
       } 
    
    if (message.type == V_STATUS) {
       // Change relay state
        state_2 = message.getBool();
        digitalWrite(LED_PIN_Channel_2, state_2?RELAY_2_ON:RELAY_2_OFF);
        // Store state in eeprom
        saveState(CHILD_ID_6, state_2);
        
         // Write some debug info
         Serial.print("Incoming change for sensor: STATE 2");
         Serial.print(message.sensor);
         Serial.print(", New status: ");
         Serial.println(message.getBool());
       } 
    
    
    
       
    }
    
    
    
     
    

Log in to reply
 

Suggested Topics

15
Online

11.6k
Users

11.2k
Topics

113.0k
Posts