Skip to content
  • MySensors
  • 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. My Project
  3. Multi Binary Switches

Multi Binary Switches

Scheduled Pinned Locked Moved My Project
13 Posts 6 Posters 7.0k Views 2 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.
  • raditvR Offline
    raditvR Offline
    raditv
    wrote on last edited by
    #4

    you have to make an array also for debouncer

    1 Reply Last reply
    0
    • BulldogLowellB Offline
      BulldogLowellB Offline
      BulldogLowell
      Contest Winner
      wrote on last edited by BulldogLowell
      #5

      @jeylites

      have you checked this thread?

      http://forum.mysensors.org/topic/994/multi-button-relay-switch/24

      jeylitesJ 1 Reply Last reply
      0
      • BulldogLowellB BulldogLowell

        @jeylites

        have you checked this thread?

        http://forum.mysensors.org/topic/994/multi-button-relay-switch/24

        jeylitesJ Offline
        jeylitesJ Offline
        jeylites
        wrote on last edited by jeylites
        #6

        @BulldogLowell

        I'm trying to do Multi Binary switches without the relays. I tried using the Multi Button Relay sketch, but I'm afraid that if remove the relay function, it would affect the button setup.

        @Rachmat-Aditiya How do I go about doing that an array for debouncer?

        BulldogLowellB 1 Reply Last reply
        0
        • jeylitesJ jeylites

          @BulldogLowell

          I'm trying to do Multi Binary switches without the relays. I tried using the Multi Button Relay sketch, but I'm afraid that if remove the relay function, it would affect the button setup.

          @Rachmat-Aditiya How do I go about doing that an array for debouncer?

          BulldogLowellB Offline
          BulldogLowellB Offline
          BulldogLowell
          Contest Winner
          wrote on last edited by
          #7

          @jeylites said:

          How do I go about doing that an array for debouncer?

          the example of debouncing an array of sensors was in the code in the examples... was my point.

          1 Reply Last reply
          0
          • M Offline
            M Offline
            mikeones
            wrote on last edited by
            #8

            Here is one example with a few extras.

            // Simple binary switch example 
            // Connect button or door/window reed switch between 
            // digitial I/O pin 3 (BUTTON_PIN below) and GND.
            
            #include <MySensor.h>
            #include <SPI.h>
            #include <Bounce2.h>
            #include <Time.h>        //http://playground.arduino.cc/Code/Time
            #include <TimeAlarms.h>  //http://playground.arduino.cc/Code/Time
            
            MySensor gw;
            
            #define RADIO_ID 12
            #define noReeds 5
            const int BUTTON_PIN[] = {14, 15, 16, 17, 18};            // Arduino Digital I/O pin for button/reed switch, A0 - A4
            boolean reedState[] = {HIGH, HIGH, HIGH, HIGH, HIGH};
            
            
            Bounce debouncer[noReeds];
            MyMessage msg[noReeds];
            
            void setup(){
              Serial.println("Starting setup" );
              gw.begin(NULL, RADIO_ID, true);  //stattc RADIO_ID an enable repeater
              Alarm.delay(250);
              gw.sendSketchInfo("Alarm Pannel", "1.0");
              Alarm.delay(250);
              gw.requestTime(receiveTime);
              // initialize Relays with corresponding buttons
              for (int i = 0; i < noReeds; i++){
                msg[i].sensor = i;			// initialize messages
                msg[i].type = V_TRIPPED;
                debouncer[i] = Bounce();		// initialize debouncer
                debouncer[i].attach(BUTTON_PIN[i]);
                debouncer[i].interval(5);
                // Setup the button
                pinMode(BUTTON_PIN[i],INPUT);
                // Activate internal pull-up
                digitalWrite(BUTTON_PIN[i],HIGH);
                gw.present(i, S_DOOR);		// present sensor to gateway
                Serial.print("setup for switch: ");
                Serial.print(BUTTON_PIN[i]);
                Serial.println(" complete" );
                Alarm.timerRepeat(720, updateState); // update relay status every 2 hrs
                Alarm.delay(250);
              }
              Serial.println("Setup complete" );
            }
            
            
            //  Check if digital input has changed and send in new value
            void loop() 
            {
              gw.process();
              for (int i = 0; i < noReeds; i++){
                debouncer[i].update();
                // Get the update value
                int value = debouncer[i].read();
                if (value != reedState[i]) {
                   // Send in the new value
                   gw.send(msg[i].set(value==HIGH ? 1 : 0), false);
                   reedState[i] = value;
                   Serial.print("updating state for swicth: ");
                   Serial.print(BUTTON_PIN[i]);
                   Serial.print(" state: ");
                   Serial.println(reedState[i]);
                }
              }
            }
            
            void updateState(){
              Serial.println("Start state info");
              for (int i = 0; i < noReeds; i++)
              {
                  Serial.print("sending update for switch: ");
                  Serial.println(BUTTON_PIN[i]);
                  gw.present(i, S_DOOR);
                  Alarm.delay(250);
                  //MyMessage msg(relayPin[pin],V_LIGHT);
                  gw.send(msg[i].set(reedState[i]), false); // Send last state from eprom to GW
                  Alarm.delay(250);
              }
            }
            
            // This is called when a new time value was received
            void receiveTime(unsigned long time) {
              setTime(time);
            }```
            jeylitesJ 1 Reply Last reply
            0
            • M mikeones

              Here is one example with a few extras.

              // Simple binary switch example 
              // Connect button or door/window reed switch between 
              // digitial I/O pin 3 (BUTTON_PIN below) and GND.
              
              #include <MySensor.h>
              #include <SPI.h>
              #include <Bounce2.h>
              #include <Time.h>        //http://playground.arduino.cc/Code/Time
              #include <TimeAlarms.h>  //http://playground.arduino.cc/Code/Time
              
              MySensor gw;
              
              #define RADIO_ID 12
              #define noReeds 5
              const int BUTTON_PIN[] = {14, 15, 16, 17, 18};            // Arduino Digital I/O pin for button/reed switch, A0 - A4
              boolean reedState[] = {HIGH, HIGH, HIGH, HIGH, HIGH};
              
              
              Bounce debouncer[noReeds];
              MyMessage msg[noReeds];
              
              void setup(){
                Serial.println("Starting setup" );
                gw.begin(NULL, RADIO_ID, true);  //stattc RADIO_ID an enable repeater
                Alarm.delay(250);
                gw.sendSketchInfo("Alarm Pannel", "1.0");
                Alarm.delay(250);
                gw.requestTime(receiveTime);
                // initialize Relays with corresponding buttons
                for (int i = 0; i < noReeds; i++){
                  msg[i].sensor = i;			// initialize messages
                  msg[i].type = V_TRIPPED;
                  debouncer[i] = Bounce();		// initialize debouncer
                  debouncer[i].attach(BUTTON_PIN[i]);
                  debouncer[i].interval(5);
                  // Setup the button
                  pinMode(BUTTON_PIN[i],INPUT);
                  // Activate internal pull-up
                  digitalWrite(BUTTON_PIN[i],HIGH);
                  gw.present(i, S_DOOR);		// present sensor to gateway
                  Serial.print("setup for switch: ");
                  Serial.print(BUTTON_PIN[i]);
                  Serial.println(" complete" );
                  Alarm.timerRepeat(720, updateState); // update relay status every 2 hrs
                  Alarm.delay(250);
                }
                Serial.println("Setup complete" );
              }
              
              
              //  Check if digital input has changed and send in new value
              void loop() 
              {
                gw.process();
                for (int i = 0; i < noReeds; i++){
                  debouncer[i].update();
                  // Get the update value
                  int value = debouncer[i].read();
                  if (value != reedState[i]) {
                     // Send in the new value
                     gw.send(msg[i].set(value==HIGH ? 1 : 0), false);
                     reedState[i] = value;
                     Serial.print("updating state for swicth: ");
                     Serial.print(BUTTON_PIN[i]);
                     Serial.print(" state: ");
                     Serial.println(reedState[i]);
                  }
                }
              }
              
              void updateState(){
                Serial.println("Start state info");
                for (int i = 0; i < noReeds; i++)
                {
                    Serial.print("sending update for switch: ");
                    Serial.println(BUTTON_PIN[i]);
                    gw.present(i, S_DOOR);
                    Alarm.delay(250);
                    //MyMessage msg(relayPin[pin],V_LIGHT);
                    gw.send(msg[i].set(reedState[i]), false); // Send last state from eprom to GW
                    Alarm.delay(250);
                }
              }
              
              // This is called when a new time value was received
              void receiveTime(unsigned long time) {
                setTime(time);
              }```
              jeylitesJ Offline
              jeylitesJ Offline
              jeylites
              wrote on last edited by jeylites
              #9

              @mikeones Thank you, The sketch is very helpful and it works. Just out of curiosity, what is the function of Time & TimeAlarm ?

              1 Reply Last reply
              0
              • M Offline
                M Offline
                mikeones
                wrote on last edited by
                #10

                It forces a status update at a predefined interval.

                Alarm.timerRepeat(720, updateState); // update relay status every 2 hrs
                
                jeylitesJ 1 Reply Last reply
                0
                • M mikeones

                  It forces a status update at a predefined interval.

                  Alarm.timerRepeat(720, updateState); // update relay status every 2 hrs
                  
                  jeylitesJ Offline
                  jeylitesJ Offline
                  jeylites
                  wrote on last edited by
                  #11

                  @mikeones Got it.

                  1 Reply Last reply
                  0
                  • C Offline
                    C Offline
                    Cowboy1980
                    wrote on last edited by
                    #12

                    Much appreciated for the script but Ive been trying to get more reed switches running off the one nano, I added the extra pins to Button_Pin and changed noReeds and boonlean readstate to represent how many pins I was using. I have 12 showing up in vera and serial shows correctly the change in state of all 12 pins but in the Vera all 12 show but dont trip/show the state change. What am I missing? When I run the code youve written as is everything works fine but as soon as I even add 1 more pin Mios wont show the state change. Plz help!

                    jeylitesJ 1 Reply Last reply
                    0
                    • C Cowboy1980

                      Much appreciated for the script but Ive been trying to get more reed switches running off the one nano, I added the extra pins to Button_Pin and changed noReeds and boonlean readstate to represent how many pins I was using. I have 12 showing up in vera and serial shows correctly the change in state of all 12 pins but in the Vera all 12 show but dont trip/show the state change. What am I missing? When I run the code youve written as is everything works fine but as soon as I even add 1 more pin Mios wont show the state change. Plz help!

                      jeylitesJ Offline
                      jeylitesJ Offline
                      jeylites
                      wrote on last edited by
                      #13

                      @Cowboy1980 Can you post your script...

                      1 Reply Last reply
                      0
                      Reply
                      • Reply as topic
                      Log in to reply
                      • Oldest to Newest
                      • Newest to Oldest
                      • Most Votes


                      7

                      Online

                      11.7k

                      Users

                      11.2k

                      Topics

                      113.1k

                      Posts


                      Copyright 2025 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
                      • MySensors
                      • OpenHardware.io
                      • Categories
                      • Recent
                      • Tags
                      • Popular