Skip to content
  • OpenHardware.io
  • Categories
  • Recent
  • Tags
  • Popular
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Brand Logo
  1. Home
  2. Troubleshooting
  3. Simple binary switch example, trying to add second switch
  • Getting Started
  • Controller
  • Build
  • Hardware
  • Download/API
  • Forum
  • Store

Simple binary switch example, trying to add second switch

Scheduled Pinned Locked Moved Troubleshooting
5 Posts 3 Posters 2.2k Views 4 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • Mitja BlazinsekM Offline
    Mitja BlazinsekM Offline
    Mitja Blazinsek
    wrote on last edited by
    #1

    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;
      }
    }```
    mfalkviddM 1 Reply Last reply
    0
    • Mitja BlazinsekM Mitja Blazinsek

      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;
        }
      }```
      mfalkviddM Offline
      mfalkviddM Offline
      mfalkvidd
      Mod
      wrote on last edited by
      #2

      @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.

      1 Reply Last reply
      1
      • Mitja BlazinsekM Offline
        Mitja BlazinsekM Offline
        Mitja Blazinsek
        wrote on last edited by
        #3

        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;
          }
        }```
        Boots33B 1 Reply Last reply
        0
        • Mitja BlazinsekM Mitja Blazinsek

          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;
            }
          }```
          Boots33B Offline
          Boots33B Offline
          Boots33
          Hero Member
          wrote on last edited by
          #4

          @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;
            }
          
          
          1 Reply Last reply
          1
          • Mitja BlazinsekM Offline
            Mitja BlazinsekM Offline
            Mitja Blazinsek
            wrote on last edited by
            #5

            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;
              }
            
            
            }
            
            1 Reply Last reply
            2
            Reply
            • Reply as topic
            Log in to reply
            • Oldest to Newest
            • Newest to Oldest
            • Most Votes


            17

            Online

            11.7k

            Users

            11.2k

            Topics

            113.0k

            Posts


            Copyright 2019 TBD   |   Forum Guidelines   |   Privacy Policy   |   Terms of Service
            • Login

            • Don't have an account? Register

            • Login or register to search.
            • First post
              Last post
            0
            • OpenHardware.io
            • Categories
            • Recent
            • Tags
            • Popular