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. Troubleshooting
  3. 2.2.0-rc.1 sleep not working as expected...

2.2.0-rc.1 sleep not working as expected...

Scheduled Pinned Locked Moved Troubleshooting
9 Posts 4 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.
  • skywatchS Offline
    skywatchS Offline
    skywatch
    wrote on last edited by
    #1

    Hi,

    I have a pro mini with 1MHz bootloader (running at 3.3v to test).
    I am using the door sensor from the 'build' page, with the addition of a sleep function as it will be battery powered.
    Here is the code...

    // Enable debug prints to serial monitor
    //#define MY_DEBUG 
    
    // Enable and select radio type attached
    #define MY_RADIO_NRF24
    #define MY_RF24_PA_LEVEL RF24_PA_HIGH   //Options are: RF24_PA_MIN, RF24_PA_LOW, RF24_PA_HIGH or RF24_PA_MAX
    //#define MY_RADIO_RFM69
    //#define MY_NODE_ID 1
    #include <SPI.h>
    #include <MySensors.h>
    #include <Bounce2.h>
    unsigned long SLEEP_TIME = 0; // Sleep time between reports (in milliseconds)
    #define CHILD_ID 3
    #define BUTTON_PIN  3  // Arduino Digital I/O pin for button/reed switch
    
    Bounce debouncer = Bounce(); 
    int oldValue=-1;
    
    // Change to V_LIGHT if you use S_LIGHT in presentation below
    MyMessage msg(CHILD_ID,V_TRIPPED);
    
    void setup()  
    {  
      // Setup the button
      pinMode(BUTTON_PIN,INPUT);
      // Activate internal pull-up
      digitalWrite(BUTTON_PIN,HIGH);
    
      // After setting up the button, setup debouncer
      debouncer.attach(BUTTON_PIN);
      debouncer.interval(5);
      Serial.begin(4800);
    }
    
    void presentation() {
      sendSketchInfo("Door Sensor", "1.0");
      // 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, 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(msg.set(value==HIGH ? 1 : 0));
         oldValue = value;
         Serial.print("Value change  ");
         Serial.println(value);
      }
        // Sleep until interrupt comes in on motion sensor. Send update every two minute.
     // sleep(digitalPinToInterrupt(BUTTON_PIN), CHANGE, SLEEP_TIME);
    }
    

    With this setup it will only work with sleep commented out (ie no sleep function). As soon as I remove the comment from sleep it fails to send on pin change.

    I invite anyone to test this out for themselves and tell me if it works or not for you.

    Thanks for any help....

    1 Reply Last reply
    0
    • rejoe2R Offline
      rejoe2R Offline
      rejoe2
      wrote on last edited by
      #2

      Not sure, but your problem may be related to the use of debounce() and sleep().
      As on PINs 2+3 there is already some sort of debouncing from mcu side, you may just use the same code as in the motion sensor example without further debouncing.

      Controller: FHEM; MySensors: 2.3.1, RS485,nRF24,RFM69, serial Gateways

      1 Reply Last reply
      0
      • skywatchS Offline
        skywatchS Offline
        skywatch
        wrote on last edited by skywatch
        #3

        @rejoe2

        Thanks for the reply.

        That is bizzare. I would expect the two sketches to be the same as it is basically the same thing (a button press).

        I modified the motion to report as a door, here is the code.

        /**
         * 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.
         *
         *******************************
         *
         * REVISION HISTORY
         * Version 1.0 - Henrik Ekblad
         *
         * DESCRIPTION
         * Motion Sensor example using HC-SR501
         * http://www.mysensors.org/build/motion
         *
         */
        
        // Enable debug prints
        // #define MY_DEBUG
        
        // Enable and select radio type attached
        #define MY_RADIO_NRF24
        #define MY_RF24_PA_LEVEL RF24_PA_HIGH  //Options are: RF24_PA_MIN, RF24_PA_LOW, RF24_PA_HIGH or RF24_PA_MAX
        
        //#define MY_RADIO_NRF5_ESB
        //#define MY_RADIO_RFM69
        //#define MY_RADIO_RFM95
        
        #include <MySensors.h>
        
        uint32_t SLEEP_TIME = 0; // Sleep time between reports (in milliseconds)
        #define DIGITAL_INPUT_SENSOR 3   // The digital input you attached your motion sensor.  (Only 2 and 3 generates interrupt!)
        #define CHILD_ID 1   // Id of the sensor child
        
        // Initialize motion message
        MyMessage msg(CHILD_ID, V_TRIPPED);
        
        void setup()
        {
            pinMode(DIGITAL_INPUT_SENSOR, INPUT);      // sets the motion sensor digital pin as input
        }
        
        void presentation()
        {
            // Send the sketch version information to the gateway and Controller
            sendSketchInfo("Door Sensor", "2.0");
        
            // Register all sensors to gw (they will be created as child devices)
            present(CHILD_ID, S_DOOR);
        }
        
        void loop()
        {
            // Read digital motion value
            bool tripped = digitalRead(DIGITAL_INPUT_SENSOR) == HIGH;
        
            Serial.println(tripped);
            send(msg.set(tripped?"1":"0"));  // Send tripped value to gw
        
            // Sleep until interrupt comes in on motion sensor. Send update every two minute.
            sleep(digitalPinToInterrupt(DIGITAL_INPUT_SENSOR), CHANGE, SLEEP_TIME);
        }
        

        I will try and get more time to test this out again. Maybe tomorrow. I wonder if having the nrf24l01+ irq pin attached to the pro mini has some effect? Again will test out when I can.

        rejoe2R 1 Reply Last reply
        0
        • M Offline
          M Offline
          manutremo
          wrote on last edited by
          #4

          I have used that same debouncer library but not in a battery powered node. I'm not sure I fully understand how the debouncer library and the sleep in interrupt mode may play together, but I'd bet the problem is there...

          You may want to ask the author on the official questions thread here.

          1 Reply Last reply
          0
          • skywatchS Offline
            skywatchS Offline
            skywatch
            wrote on last edited by
            #5

            @manutremo

            Thanks for the input - I did get further with this, but have different issues now. I will get back if I find a solution. I hope to get time this weekend to have a good look into my code and see what the issue might be. Failing this I will post how far I get and ask for more input from the friendly helpful people on here. :)

            1 Reply Last reply
            1
            • skywatchS skywatch

              @rejoe2

              Thanks for the reply.

              That is bizzare. I would expect the two sketches to be the same as it is basically the same thing (a button press).

              I modified the motion to report as a door, here is the code.

              /**
               * 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.
               *
               *******************************
               *
               * REVISION HISTORY
               * Version 1.0 - Henrik Ekblad
               *
               * DESCRIPTION
               * Motion Sensor example using HC-SR501
               * http://www.mysensors.org/build/motion
               *
               */
              
              // Enable debug prints
              // #define MY_DEBUG
              
              // Enable and select radio type attached
              #define MY_RADIO_NRF24
              #define MY_RF24_PA_LEVEL RF24_PA_HIGH  //Options are: RF24_PA_MIN, RF24_PA_LOW, RF24_PA_HIGH or RF24_PA_MAX
              
              //#define MY_RADIO_NRF5_ESB
              //#define MY_RADIO_RFM69
              //#define MY_RADIO_RFM95
              
              #include <MySensors.h>
              
              uint32_t SLEEP_TIME = 0; // Sleep time between reports (in milliseconds)
              #define DIGITAL_INPUT_SENSOR 3   // The digital input you attached your motion sensor.  (Only 2 and 3 generates interrupt!)
              #define CHILD_ID 1   // Id of the sensor child
              
              // Initialize motion message
              MyMessage msg(CHILD_ID, V_TRIPPED);
              
              void setup()
              {
                  pinMode(DIGITAL_INPUT_SENSOR, INPUT);      // sets the motion sensor digital pin as input
              }
              
              void presentation()
              {
                  // Send the sketch version information to the gateway and Controller
                  sendSketchInfo("Door Sensor", "2.0");
              
                  // Register all sensors to gw (they will be created as child devices)
                  present(CHILD_ID, S_DOOR);
              }
              
              void loop()
              {
                  // Read digital motion value
                  bool tripped = digitalRead(DIGITAL_INPUT_SENSOR) == HIGH;
              
                  Serial.println(tripped);
                  send(msg.set(tripped?"1":"0"));  // Send tripped value to gw
              
                  // Sleep until interrupt comes in on motion sensor. Send update every two minute.
                  sleep(digitalPinToInterrupt(DIGITAL_INPUT_SENSOR), CHANGE, SLEEP_TIME);
              }
              

              I will try and get more time to test this out again. Maybe tomorrow. I wonder if having the nrf24l01+ irq pin attached to the pro mini has some effect? Again will test out when I can.

              rejoe2R Offline
              rejoe2R Offline
              rejoe2
              wrote on last edited by
              #6

              @skywatch said in 2.2.0-rc.1 sleep not working as expected...:

              I wonder if having the nrf24l01+ irq pin attached to the pro mini has some effect? Again will test out when I can.

              The irq@nRF is not used yet within MySensors. Afik this is planned for version 3.0 (don't have any link wrt this at the moment).

              Controller: FHEM; MySensors: 2.3.1, RS485,nRF24,RFM69, serial Gateways

              1 Reply Last reply
              0
              • skywatchS Offline
                skywatchS Offline
                skywatch
                wrote on last edited by
                #7

                @rejoe2

                Apparently it is implemented....

                https://forum.mysensors.org/topic/7833/do-i-need-to-implement-the-irq-on-future-pcbs-for-nodes/3

                rejoe2R 1 Reply Last reply
                0
                • skywatchS skywatch

                  @rejoe2

                  Apparently it is implemented....

                  https://forum.mysensors.org/topic/7833/do-i-need-to-implement-the-irq-on-future-pcbs-for-nodes/3

                  rejoe2R Offline
                  rejoe2R Offline
                  rejoe2
                  wrote on last edited by
                  #8

                  @skywatch Thx for clarification.
                  Seems this is a very recent development (I only knew this to be planed for V3, so things are ahead of theit time..). Nevertheless, most users will not yet have activated the MY_RX_MESSAGE_BUFFER_FEATURE.

                  Controller: FHEM; MySensors: 2.3.1, RS485,nRF24,RFM69, serial Gateways

                  YveauxY 1 Reply Last reply
                  0
                  • rejoe2R rejoe2

                    @skywatch Thx for clarification.
                    Seems this is a very recent development (I only knew this to be planed for V3, so things are ahead of theit time..). Nevertheless, most users will not yet have activated the MY_RX_MESSAGE_BUFFER_FEATURE.

                    YveauxY Offline
                    YveauxY Offline
                    Yveaux
                    Mod
                    wrote on last edited by Yveaux
                    #9

                    @rejoe2 it is a feature currently mainly useful for gateways. Furthermore, only avr is supported, as far as I know.
                    It has been in for over a year iirr.

                    http://yveaux.blogspot.nl

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


                    13

                    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