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. General Discussion
  3. Help!!! Binary & Relay Compilation Not Working

Help!!! Binary & Relay Compilation Not Working

Scheduled Pinned Locked Moved General Discussion
15 Posts 4 Posters 4.3k Views 1 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.
  • jeylitesJ Offline
    jeylitesJ Offline
    jeylites
    wrote on last edited by
    #5

    This is the serial message I get

    repeater started, id 12
    send: 12-12-0-0 s=255,c=0,t=18,pt=0,l=5,st=ok:1.4.1
    send: 12-12-0-0 s=255,c=3,t=6,pt=1,l=1,st=ok:0
    read: 0-0-12 s=255,c=3,t=6,pt=0,l=1:M
    send: 12-12-0-0 s=255,c=3,t=11,pt=0,l=5,st=ok:Relay
    send: 12-12-0-0 s=255,c=3,t=12,pt=0,l=3,st=ok:1.0
    send: 12-12-0-0 s=255,c=3,t=11,pt=0,l=12,st=ok:Alarm Pannel
    send: 12-12-0-0 s=255,c=3,t=12,pt=0,l=3,st=ok:1.0
    send: 12-12-0-0 s=255,c=3,t=1,pt=0,l=3,st=ok:1.0
    send: 12-12-0-0 s=0,c=0,t=0,pt=0,l=5,st=ok:1.4.1
    setup for switch: 5 complete
    send: 12-12-0-0 s=1,c=0,t=3,pt=0,l=5,st=ok:1.4.1
    read: 0-0-12 s=255,c=3,t=1,pt=0,l=10:1435918408

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

      @jeylites

      fyi, just pick one name...

      gw.sendSketchInfo("Relay", "1.0");
      gw.sendSketchInfo("Alarm Pannel", "1.0");

      What is this supposed to be doing? it looks like:

      reporting the state of three reed switches
      actuating a relay

      Why are you using the dalays? time?

      hard to really understand what you are trying to do here...

      1 Reply Last reply
      0
      • jeylitesJ Offline
        jeylitesJ Offline
        jeylites
        wrote on last edited by
        #7

        @BulldogLowell
        Essentially, I will like to combine Array Binary and Relay Actuator in one sketch.

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

          three binary switches and a single relay?

          1 Reply Last reply
          0
          • jeylitesJ Offline
            jeylitesJ Offline
            jeylites
            wrote on last edited by
            #9

            yes sir !

            1 Reply Last reply
            0
            • jeylitesJ Offline
              jeylitesJ Offline
              jeylites
              wrote on last edited by jeylites
              #10

              @BulldogLowell

              Any ideas how I can get this to work?

              Moshe LivneM BulldogLowellB 2 Replies Last reply
              0
              • jeylitesJ jeylites

                @BulldogLowell

                Any ideas how I can get this to work?

                Moshe LivneM Offline
                Moshe LivneM Offline
                Moshe Livne
                Hero Member
                wrote on last edited by
                #11

                @jeylites it looks like you are overwriting i somewhere inside the loop. can you try to add prints of the value of i at several strategic points to see when it becomes 5? I would suggest to add one (and also print BUTTON_PIN[i]) before "msg[i].sensor = i;", one after "// Setup the button" and print i with the BUTTON_PIN[i].

                1 Reply Last reply
                0
                • jeylitesJ Offline
                  jeylitesJ Offline
                  jeylites
                  wrote on last edited by
                  #12

                  @Moshe-Livne

                  I'm going to try fix it as suggested. But the thing is it complies....

                  Moshe LivneM 1 Reply Last reply
                  0
                  • jeylitesJ jeylites

                    @Moshe-Livne

                    I'm going to try fix it as suggested. But the thing is it complies....

                    Moshe LivneM Offline
                    Moshe LivneM Offline
                    Moshe Livne
                    Hero Member
                    wrote on last edited by
                    #13

                    @jeylites Alas compiling is not a guarantee against memory overwrites....as button_pin should have shown 4 and not 5 i assume that either the index (i) got corrupt or the button_pin array.

                    1 Reply Last reply
                    0
                    • jeylitesJ jeylites

                      @BulldogLowell

                      Any ideas how I can get this to work?

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

                      @jeylites

                      I think this is what you want. I cannot test it right now, but it does compile:

                      #include <MySensor.h>
                      #include <SPI.h>
                      #include <Bounce2.h>
                      
                      #define NUMBER_OF_REEDS 3
                      
                      const int relayPin = 3;
                      const int reedPin[NUMBER_OF_REEDS] = {4, 5, 6};
                      
                      int reedState[NUMBER_OF_REEDS];
                      Bounce debouncer[NUMBER_OF_REEDS] = Bounce();
                      
                      MySensor gw;
                      MyMessage msg[NUMBER_OF_REEDS];
                      
                      void setup()
                      {
                        gw.begin(incomingMessage, AUTO, true);
                        gw.sendSketchInfo("Test", "1.0a");
                        gw.present(0, S_LIGHT);
                        pinMode(relayPin, OUTPUT);
                        digitalWrite(relayPin, gw.loadState(0));
                        for (int i = 0; i < NUMBER_OF_REEDS; i++)
                        {
                          debouncer[i].attach(reedPin[i]);
                          debouncer[i].interval(5);
                          pinMode(reedPin[i], INPUT_PULLUP);
                          gw.present(i, S_DOOR);
                          gw.wait(250);
                        }
                      }
                      
                      void loop()
                      {
                        gw.process();
                        for (int i = 0; i < NUMBER_OF_REEDS; i++) 
                        {
                          debouncer[i].update();
                          int value = debouncer[i].read();
                          if (value != reedState[i]) 
                          {
                            gw.send(msg[i+1].set(value), false); // device number mismatch here because of the array
                            reedState[i] = value;
                            Serial.print("updating state for switch: ");
                            Serial.print(reedPin[i]);
                            Serial.print(" state: ");
                            Serial.println(reedState[i]);
                          }
                        }
                      }
                      
                      void incomingMessage(const MyMessage &message)
                      {
                        if (message.type == V_LIGHT)
                        {
                          int newState = message.getBool();
                          digitalWrite(relayPin, newState);
                          gw.saveState(0, newState);
                          Serial.print(F("Incoming change for relay, New state: "));
                          Serial.println(newState);
                        }
                      }
                      

                      EDIT: Updated to correct debounce class errors

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

                        @jeylites

                        to turn relay off automatically after two minutes (and send the updated "off status" to controller... try something like this untested code:

                        #include <MySensor.h>
                        #include <SPI.h>
                        #include <Bounce2.h>
                        
                        #define NUMBER_OF_REEDS 3
                        
                        const int relayPin = 3;
                        const int reedPin[NUMBER_OF_REEDS] = {4, 5, 6};
                        
                        int reedState[NUMBER_OF_REEDS];
                        Bounce debouncer[NUMBER_OF_REEDS] = Bounce();
                        
                        unsigned long relayTimer;
                        
                        MySensor gw;
                        MyMessage msg[NUMBER_OF_REEDS];
                        MyMessage relayMessage(0,V_LIGHT);
                        
                        void setup()
                        {
                          gw.begin(incomingMessage, AUTO, true);
                          gw.sendSketchInfo("Test", "1.0a");
                          gw.present(0, S_LIGHT);
                          pinMode(relayPin, OUTPUT);
                          digitalWrite(relayPin, gw.loadState(0));
                          for (int i = 0; i < NUMBER_OF_REEDS; i++)
                          {
                            debouncer[i].attach(reedPin[i]);
                            debouncer[i].interval(5);
                            pinMode(reedPin[i], INPUT_PULLUP);
                            gw.present(i, S_DOOR);
                            gw.wait(250);
                          }
                        }
                        
                        void loop()
                        {
                          gw.process();
                          for (int i = 0; i < NUMBER_OF_REEDS; i++) 
                          {
                            debouncer[i].update();
                            int value = debouncer[i].read();
                            if (value != reedState[i]) 
                            {
                              gw.send(msg[i+1].set(value), false); // device number mismatch here because of the array
                              reedState[i] = value;
                              Serial.print("updating state for switch: ");
                              Serial.print(reedPin[i]);
                              Serial.print(" state: ");
                              Serial.println(reedState[i]);
                            }
                          }
                          if (millis() - relayTimer > 2 * 60 * 1000UL && digitalRead(relayPin)) // two minute timer
                          {
                            digitalWrite(relayPin, LOW);
                            gw.saveState(0, false);
                            gw.send(relayMessage.set(false), true);
                          }
                        }
                        
                        void incomingMessage(const MyMessage &message)
                        {
                          if (message.type == V_LIGHT)
                          {
                            int newState = message.getBool();
                            digitalWrite(relayPin, newState);
                            gw.saveState(0, newState);
                            if (newState)
                            {
                              relayTimer = millis();
                            }
                            Serial.print(F("Incoming change for relay, New state: "));
                            Serial.println(newState);
                          }
                        }
                        
                        1 Reply Last reply
                        0
                        Reply
                        • Reply as topic
                        Log in to reply
                        • Oldest to Newest
                        • Newest to Oldest
                        • Most Votes


                        20

                        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