Simple binary switch example, trying to add second switch
-
Hello! Firs i'm newbie to arduino and my sensors so please don't be mad on me in know that is for you guys probably basic of arduino coding.
so i tok the basic exsample of Simple binary switch example and try to add one more switch but i think i have some problem with bounce function because it work only one switch CHILD_ID_ST2 on the code below
Thanks for any help! Probable master can solve that problem in couple of minutes it bother me 2 days/** * 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_NRF24 //#define MY_RADIO_RFM69 #include <SPI.h> #include <MySensors.h> #include <Bounce2.h> #define CHILD_ID_ST1 3 #define CHILD_ID_ST2 4 #define ST1_PIN 4 // Arduino Digital I/O pin for button/reed switch #define ST2_PIN 3 Bounce debouncer = Bounce(); int oldValue=-1; // Change to V_LIGHT if you use S_LIGHT in presentation below MyMessage msgst1(CHILD_ID_ST1,V_TRIPPED); MyMessage msgst2(CHILD_ID_ST2,V_TRIPPED); void setup() { // Setup the button pinMode(ST1_PIN,INPUT); pinMode(ST2_PIN,INPUT); // Activate internal pull-up digitalWrite(ST1_PIN,HIGH); digitalWrite(ST2_PIN,HIGH); // After setting up the button, setup debouncer debouncer.attach(ST1_PIN); debouncer.attach(ST2_PIN); debouncer.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. present(CHILD_ID_ST1, S_DOOR); present(CHILD_ID_ST2, S_DOOR); } // Check if digital input has changed and send in new value void loop() { debouncer.update(); // Get the update value int value = debouncer.read(); if (value != oldValue) { // Send in the new value send(msgst1.set(value==HIGH ? 1 : 0)); oldValue = value; } if (value != oldValue) { // Send in the new value send(msgst2.set(value==HIGH ? 1 : 0)); oldValue = value; } }```
-
@Mitja-Blazinsek the debouncer can only handle one button. You you'll need two debouncers. Change
Bounce debouncer = Bounce();
to
Bounce debouncer = Bounce(); Bounce debouncer2 = Bounce();
and adjust the rest of the code to use both debouncers.
-
i try to change that but again i'm doing something wrong now it change it constantly both state when i pressed any button
/** * 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_NRF24 //#define MY_RADIO_RFM69 #include <SPI.h> #include <MySensors.h> #include <Bounce2.h> #define CHILD_ID_ST1 3 #define CHILD_ID_ST2 4 #define ST1_PIN 4 // Arduino Digital I/O pin for button/reed switch #define ST2_PIN 3 Bounce debouncer1 = Bounce(); Bounce debouncer2 = Bounce(); int oldValue=-1; // Change to V_LIGHT if you use S_LIGHT in presentation below MyMessage msgst1(CHILD_ID_ST1,V_TRIPPED); MyMessage msgst2(CHILD_ID_ST2,V_TRIPPED); void setup() { // Setup the button pinMode(ST1_PIN,INPUT); pinMode(ST2_PIN,INPUT); // Activate internal pull-up digitalWrite(ST1_PIN,HIGH); digitalWrite(ST2_PIN,HIGH); // After setting up the button, setup debouncer debouncer1.attach(ST1_PIN); debouncer2.attach(ST2_PIN); debouncer1.interval(5); debouncer2.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. present(CHILD_ID_ST1, S_DOOR); present(CHILD_ID_ST2, S_DOOR); } // Check if digital input has changed and send in new value void loop() { debouncer1.update(); // Get the update value int value = debouncer1.read(); if (value != oldValue) { // Send in the new value send(msgst1.set(value==HIGH ? 1 : 0)); oldValue = value; } debouncer2.update(); // Get the update value int value2 = debouncer2.read(); if (value2 != oldValue) { // Send in the new value send(msgst2.set(value2==HIGH ? 1 : 0)); oldValue = value2; } }```
-
@Mitja-Blazinsek You are using the oldValue variable for both switches. You need to declare and use a unique one for each switch.
For example
if (value2 != oldValue2) { // Send in the new value send(msgst2.set(value2==HIGH ? 1 : 0)); oldValue2 = value2; }
-
thank you very much boots33 and mfalkvidd finaly wor also learn a lot on this example, its time now to try with relays i will add 2 relays that i can triger with switch or controler
my working code for switch:
/** 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 updated for 2 switches 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_NRF24 //#define MY_RADIO_RFM69 #include <SPI.h> #include <MySensors.h> #include <Bounce2.h> #define CHILD_ID_ST1 3 #define CHILD_ID_ST2 4 #define ST1_PIN 3 // Arduino Digital I/O pin for button/reed switch #define ST2_PIN 4 Bounce debouncer1 = Bounce(); Bounce debouncer2 = Bounce(); int oldValue = -1; int oldValue1 = -1; // Change to V_LIGHT if you use S_LIGHT in presentation below MyMessage msgst1(CHILD_ID_ST1, V_TRIPPED); MyMessage msgst2(CHILD_ID_ST2, V_TRIPPED); void setup() { // Setup the button1 pinMode(ST1_PIN, INPUT); debouncer1.attach(ST1_PIN); debouncer1.interval(5); digitalWrite(ST1_PIN, HIGH); // Setup the button2 pinMode(ST2_PIN, INPUT); debouncer2.attach(ST2_PIN); debouncer2.interval(5); digitalWrite(ST2_PIN, HIGH); } 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. present(CHILD_ID_ST1, S_DOOR); present(CHILD_ID_ST2, S_DOOR); } // Check if digital input has changed and send in new value void loop() { debouncer1.update(); // Get the update value int value = debouncer1.read(); if (value != oldValue) { // Send in the new value send(msgst1.set(value == HIGH ? 1 : 0)); oldValue = value; } debouncer2.update(); // Get the update value int value1 = debouncer2.read(); if (value1 != oldValue1) { // Send in the new value send(msgst2.set(value1 == HIGH ? 1 : 0)); oldValue1 = value1; } }