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. Attempt to combine three sketches failed.

Attempt to combine three sketches failed.

Scheduled Pinned Locked Moved Troubleshooting
4 Posts 3 Posters 1.3k 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.
  • Cliff KarlssonC Offline
    Cliff KarlssonC Offline
    Cliff Karlsson
    wrote on last edited by
    #1

    I tried to merge BinarySwitchSleepSensor, Dallas temperature and batterymonitoring sketches into one but as predicted it ended in failure. Could someone look at the mess and correct me?

    This where I get an error:

      present(SECONDARY_CHILD_ID, S_TEMP);  
    
    
    exit status 1
    expected constructor, destructor, or type conversion before '(' token
    
    
    /**
     * 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
     *
     * Interrupt driven binary switch example with dual interrupts
     * Author: Patrick 'Anticimex' Fallberg
     * Connect one button or door/window reed switch between 
     * digitial I/O pin 3 (BUTTON_PIN below) and GND and the other
     * one in similar fashion on digital I/O pin 2.
     * This example is designed to fit Arduino Nano/Pro Mini
     * 
     */
    
    
    // Enable debug prints to serial monitor
    #define MY_DEBUG 
    
    // Enable and select radio type attached
    #define MY_RADIO_NRF24
    //#define MY_RADIO_RFM69
    #include <DallasTemperature.h>
    #include <OneWire.h>
    #include <SPI.h>
    #include <MySensor.h>
    
    #define SKETCH_NAME "Binary Sensor+temp"
    #define SKETCH_MAJOR_VER "1"
    #define SKETCH_MINOR_VER "0"
    
    #define PRIMARY_CHILD_ID 3
    #define SECONDARY_CHILD_ID 4
    #define COMPARE_TEMP 1 // Send temperature only if changed? 1 = Yes 0 = No
    
    #define ONE_WIRE_BUS 3 // Pin where dallase sensor is connected 
    #define MAX_ATTACHED_DS18B20 16
    #define PRIMARY_BUTTON_PIN 3   // Arduino Digital I/O pin for button/reed switch
    //#define SECONDARY_BUTTON_PIN 7 // Arduino Digital I/O pin for button/reed switch
    
    OneWire oneWire(ONE_WIRE_BUS); // Setup a oneWire instance to communicate with any OneWire devices (not just Maxim/Dallas temperature ICs)
    DallasTemperature sensors(&oneWire); // Pass the oneWire reference to Dallas Temperature. 
    float lastTemperature[MAX_ATTACHED_DS18B20];
    int numSensors=0;
    boolean receivedConfig = false;
    boolean metric = true; 
    
    #if (PRIMARY_BUTTON_PIN < 2 || PRIMARY_BUTTON_PIN > 3)
    #error PRIMARY_BUTTON_PIN must be either 2 or 3 for interrupts to work
    #endif
    //#if (SECONDARY_BUTTON_PIN < 2 || SECONDARY_BUTTON_PIN > 3)
    //#error SECONDARY_BUTTON_PIN must be either 2 or 3 for interrupts to work
    //#endif
    #if (PRIMARY_BUTTON_PIN == SECONDARY_BUTTON_PIN)
    #error PRIMARY_BUTTON_PIN and BUTTON_PIN2 cannot be the same
    #endif
    #if (PRIMARY_CHILD_ID == SECONDARY_CHILD_ID)
    #error PRIMARY_CHILD_ID and SECONDARY_CHILD_ID cannot be the same
    #endif
     
    
    // Change to V_LIGHT if you use S_LIGHT in presentation below
    MyMessage msg(PRIMARY_CHILD_ID, V_LIGHT);
    MyMessage msg2(SECONDARY_CHILD_ID, V_TEMP);
    int BATTERY_SENSE_PIN = A0;  // select the input pin for the battery sense point
    unsigned long SLEEP_TIME = 600000;  // sleep time between reads (seconds * 1000 milliseconds)
    int oldBatteryPcnt = 0;
    
    void setup()  
    {  
      // Startup up the OneWire library
      sensors.begin();
      // requestTemperatures() will not block current thread
      sensors.setWaitForConversion(false);
      
      #if defined(__AVR_ATmega2560__)
       analogReference(INTERNAL1V1);
    #else
       analogReference(INTERNAL);
    #endif
    
      // Setup the buttons
      pinMode(PRIMARY_BUTTON_PIN, INPUT);
     // pinMode(SECONDARY_BUTTON_PIN, INPUT);
    
      // Activate internal pull-ups
      digitalWrite(PRIMARY_BUTTON_PIN, HIGH);
     // digitalWrite(SECONDARY_BUTTON_PIN, HIGH);
    }
    
    void presentation() {
      // Send the sketch version information to the gateway and Controller
      sendSketchInfo(SKETCH_NAME, SKETCH_MAJOR_VER "." SKETCH_MINOR_VER);
    
      // Register binary input sensor to sensor_node (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.
    //numSensors = sensors.getDeviceCount();
    
      // Present all sensors to controller
      //for (int i=0; i<numSensors && i<MAX_ATTACHED_DS18B20; i++) {   
         
      }
      
      present(PRIMARY_CHILD_ID, S_LIGHT);  
      present(SECONDARY_CHILD_ID, S_TEMP);  
    }
    
    // Loop will iterate on changes on the BUTTON_PINs
    void loop() 
    {
      
      uint8_t value;
      static uint8_t sentValue=2;
      static uint8_t sentValue2=2;
    
      // Short delay to allow buttons to properly settle
      sleep(5);
      
      value = digitalRead(PRIMARY_BUTTON_PIN);
      
      if (value != sentValue) {
         // Value has changed from last transmission, send the updated value
         send(msg.set(value==HIGH ? 1 : 0));
         sentValue = value;
      }
    
    //  value = digitalRead(SECONDARY_BUTTON_PIN);
    //  
    //  if (value != sentValue2) {
    //     // Value has changed from last transmission, send the updated value
    //     send(msg2.set(value==HIGH ? 1 : 0));
    //     sentValue2 = value;
    //  }
    // Fetch temperatures from Dallas sensors
      sensors.requestTemperatures();
    
      // query conversion time and sleep until conversion completed
      int16_t conversionTime = sensors.millisToWaitForConversion(sensors.getResolution());
      // sleep() call can be replaced by wait() call if node need to process incoming messages (or if node is repeater)
      sleep(conversionTime);
    
      // Read temperatures and send them to controller 
      for (int i=0; i<numSensors && i<MAX_ATTACHED_DS18B20; i++) {
     
        // Fetch and round temperature to one decimal
        float temperature = static_cast<float>(static_cast<int>((getConfig().isMetric?sensors.getTempCByIndex(i):sensors.getTempFByIndex(i)) * 10.)) / 10.;
     
        // Only send data if temperature has changed and no error
        #if COMPARE_TEMP == 1
        if (lastTemperature[i] != temperature && temperature != -127.00 && temperature != 85.00) {
        #else
        if (temperature != -127.00 && temperature != 85.00) {
        #endif
     
          // Send in the new temperature
          send(msg.setSensor(i).set(temperature,1));
          // Save new temperatures for next compare
          lastTemperature[i]=temperature;
        }
    
    // get the battery Voltage
       int sensorValue = analogRead(BATTERY_SENSE_PIN);
       #ifdef DEBUG
       Serial.println(sensorValue);
       #endif
       
       // 1M, 470K divider across battery and using internal ADC ref of 1.1V
       // Sense point is bypassed with 0.1 uF cap to reduce noise at that point
       // ((1e6+470e3)/470e3)*1.1 = Vmax = 3.44 Volts
       // 3.44/1023 = Volts per bit = 0.003363075
       
       int batteryPcnt = sensorValue / 10;
    
       #ifdef DEBUG
       float batteryV  = sensorValue * 0.003363075;
       Serial.print("Battery Voltage: ");
       Serial.print(batteryV);
       Serial.println(" V");
    
       Serial.print("Battery percent: ");
       Serial.print(batteryPcnt);
       Serial.println(" %");
       #endif
    
       if (oldBatteryPcnt != batteryPcnt) {
         // Power up radio after sleep
         sendBatteryLevel(batteryPcnt);
         oldBatteryPcnt = batteryPcnt;
       }
      
      }
      // Sleep until something happens with the sensor
      sleep(PRIMARY_BUTTON_PIN-2, CHANGE, SLEEP_TIME);
    } 
    
    DidiD 1 Reply Last reply
    0
    • Cliff KarlssonC Cliff Karlsson

      I tried to merge BinarySwitchSleepSensor, Dallas temperature and batterymonitoring sketches into one but as predicted it ended in failure. Could someone look at the mess and correct me?

      This where I get an error:

        present(SECONDARY_CHILD_ID, S_TEMP);  
      
      
      exit status 1
      expected constructor, destructor, or type conversion before '(' token
      
      
      /**
       * 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
       *
       * Interrupt driven binary switch example with dual interrupts
       * Author: Patrick 'Anticimex' Fallberg
       * Connect one button or door/window reed switch between 
       * digitial I/O pin 3 (BUTTON_PIN below) and GND and the other
       * one in similar fashion on digital I/O pin 2.
       * This example is designed to fit Arduino Nano/Pro Mini
       * 
       */
      
      
      // Enable debug prints to serial monitor
      #define MY_DEBUG 
      
      // Enable and select radio type attached
      #define MY_RADIO_NRF24
      //#define MY_RADIO_RFM69
      #include <DallasTemperature.h>
      #include <OneWire.h>
      #include <SPI.h>
      #include <MySensor.h>
      
      #define SKETCH_NAME "Binary Sensor+temp"
      #define SKETCH_MAJOR_VER "1"
      #define SKETCH_MINOR_VER "0"
      
      #define PRIMARY_CHILD_ID 3
      #define SECONDARY_CHILD_ID 4
      #define COMPARE_TEMP 1 // Send temperature only if changed? 1 = Yes 0 = No
      
      #define ONE_WIRE_BUS 3 // Pin where dallase sensor is connected 
      #define MAX_ATTACHED_DS18B20 16
      #define PRIMARY_BUTTON_PIN 3   // Arduino Digital I/O pin for button/reed switch
      //#define SECONDARY_BUTTON_PIN 7 // Arduino Digital I/O pin for button/reed switch
      
      OneWire oneWire(ONE_WIRE_BUS); // Setup a oneWire instance to communicate with any OneWire devices (not just Maxim/Dallas temperature ICs)
      DallasTemperature sensors(&oneWire); // Pass the oneWire reference to Dallas Temperature. 
      float lastTemperature[MAX_ATTACHED_DS18B20];
      int numSensors=0;
      boolean receivedConfig = false;
      boolean metric = true; 
      
      #if (PRIMARY_BUTTON_PIN < 2 || PRIMARY_BUTTON_PIN > 3)
      #error PRIMARY_BUTTON_PIN must be either 2 or 3 for interrupts to work
      #endif
      //#if (SECONDARY_BUTTON_PIN < 2 || SECONDARY_BUTTON_PIN > 3)
      //#error SECONDARY_BUTTON_PIN must be either 2 or 3 for interrupts to work
      //#endif
      #if (PRIMARY_BUTTON_PIN == SECONDARY_BUTTON_PIN)
      #error PRIMARY_BUTTON_PIN and BUTTON_PIN2 cannot be the same
      #endif
      #if (PRIMARY_CHILD_ID == SECONDARY_CHILD_ID)
      #error PRIMARY_CHILD_ID and SECONDARY_CHILD_ID cannot be the same
      #endif
       
      
      // Change to V_LIGHT if you use S_LIGHT in presentation below
      MyMessage msg(PRIMARY_CHILD_ID, V_LIGHT);
      MyMessage msg2(SECONDARY_CHILD_ID, V_TEMP);
      int BATTERY_SENSE_PIN = A0;  // select the input pin for the battery sense point
      unsigned long SLEEP_TIME = 600000;  // sleep time between reads (seconds * 1000 milliseconds)
      int oldBatteryPcnt = 0;
      
      void setup()  
      {  
        // Startup up the OneWire library
        sensors.begin();
        // requestTemperatures() will not block current thread
        sensors.setWaitForConversion(false);
        
        #if defined(__AVR_ATmega2560__)
         analogReference(INTERNAL1V1);
      #else
         analogReference(INTERNAL);
      #endif
      
        // Setup the buttons
        pinMode(PRIMARY_BUTTON_PIN, INPUT);
       // pinMode(SECONDARY_BUTTON_PIN, INPUT);
      
        // Activate internal pull-ups
        digitalWrite(PRIMARY_BUTTON_PIN, HIGH);
       // digitalWrite(SECONDARY_BUTTON_PIN, HIGH);
      }
      
      void presentation() {
        // Send the sketch version information to the gateway and Controller
        sendSketchInfo(SKETCH_NAME, SKETCH_MAJOR_VER "." SKETCH_MINOR_VER);
      
        // Register binary input sensor to sensor_node (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.
      //numSensors = sensors.getDeviceCount();
      
        // Present all sensors to controller
        //for (int i=0; i<numSensors && i<MAX_ATTACHED_DS18B20; i++) {   
           
        }
        
        present(PRIMARY_CHILD_ID, S_LIGHT);  
        present(SECONDARY_CHILD_ID, S_TEMP);  
      }
      
      // Loop will iterate on changes on the BUTTON_PINs
      void loop() 
      {
        
        uint8_t value;
        static uint8_t sentValue=2;
        static uint8_t sentValue2=2;
      
        // Short delay to allow buttons to properly settle
        sleep(5);
        
        value = digitalRead(PRIMARY_BUTTON_PIN);
        
        if (value != sentValue) {
           // Value has changed from last transmission, send the updated value
           send(msg.set(value==HIGH ? 1 : 0));
           sentValue = value;
        }
      
      //  value = digitalRead(SECONDARY_BUTTON_PIN);
      //  
      //  if (value != sentValue2) {
      //     // Value has changed from last transmission, send the updated value
      //     send(msg2.set(value==HIGH ? 1 : 0));
      //     sentValue2 = value;
      //  }
      // Fetch temperatures from Dallas sensors
        sensors.requestTemperatures();
      
        // query conversion time and sleep until conversion completed
        int16_t conversionTime = sensors.millisToWaitForConversion(sensors.getResolution());
        // sleep() call can be replaced by wait() call if node need to process incoming messages (or if node is repeater)
        sleep(conversionTime);
      
        // Read temperatures and send them to controller 
        for (int i=0; i<numSensors && i<MAX_ATTACHED_DS18B20; i++) {
       
          // Fetch and round temperature to one decimal
          float temperature = static_cast<float>(static_cast<int>((getConfig().isMetric?sensors.getTempCByIndex(i):sensors.getTempFByIndex(i)) * 10.)) / 10.;
       
          // Only send data if temperature has changed and no error
          #if COMPARE_TEMP == 1
          if (lastTemperature[i] != temperature && temperature != -127.00 && temperature != 85.00) {
          #else
          if (temperature != -127.00 && temperature != 85.00) {
          #endif
       
            // Send in the new temperature
            send(msg.setSensor(i).set(temperature,1));
            // Save new temperatures for next compare
            lastTemperature[i]=temperature;
          }
      
      // get the battery Voltage
         int sensorValue = analogRead(BATTERY_SENSE_PIN);
         #ifdef DEBUG
         Serial.println(sensorValue);
         #endif
         
         // 1M, 470K divider across battery and using internal ADC ref of 1.1V
         // Sense point is bypassed with 0.1 uF cap to reduce noise at that point
         // ((1e6+470e3)/470e3)*1.1 = Vmax = 3.44 Volts
         // 3.44/1023 = Volts per bit = 0.003363075
         
         int batteryPcnt = sensorValue / 10;
      
         #ifdef DEBUG
         float batteryV  = sensorValue * 0.003363075;
         Serial.print("Battery Voltage: ");
         Serial.print(batteryV);
         Serial.println(" V");
      
         Serial.print("Battery percent: ");
         Serial.print(batteryPcnt);
         Serial.println(" %");
         #endif
      
         if (oldBatteryPcnt != batteryPcnt) {
           // Power up radio after sleep
           sendBatteryLevel(batteryPcnt);
           oldBatteryPcnt = batteryPcnt;
         }
        
        }
        // Sleep until something happens with the sensor
        sleep(PRIMARY_BUTTON_PIN-2, CHANGE, SLEEP_TIME);
      } 
      
      DidiD Offline
      DidiD Offline
      Didi
      wrote on last edited by
      #2
      This post is deleted!
      1 Reply Last reply
      0
      • mfalkviddM Offline
        mfalkviddM Offline
        mfalkvidd
        Mod
        wrote on last edited by mfalkvidd
        #3

        Remove the } before present(PRIMARY_CHILD_ID, S_LIGHT);
        } denotes end of the presentation function, but you haven't finished the presentation function yet.

        1 Reply Last reply
        0
        • mfalkviddM Offline
          mfalkviddM Offline
          mfalkvidd
          Mod
          wrote on last edited by mfalkvidd
          #4

          Pro tip1: the error is often a line before the line that the compiler complains about. So don't always focus on the highlighted line :)
          Pro tip2: Use Tools->Auto Format in the Arduino IDE to make the code more readable. In this case, auto format would probably have made the error more visible because the could would have looked like this after auto-format:

          /**
           * 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
           *
           * Interrupt driven binary switch example with dual interrupts
           * Author: Patrick 'Anticimex' Fallberg
           * Connect one button or door/window reed switch between
           * digitial I/O pin 3 (BUTTON_PIN below) and GND and the other
           * one in similar fashion on digital I/O pin 2.
           * This example is designed to fit Arduino Nano/Pro Mini
           *
           */
          
          
          // Enable debug prints to serial monitor
          #define MY_DEBUG
          
          // Enable and select radio type attached
          #define MY_RADIO_NRF24
          //#define MY_RADIO_RFM69
          #include <DallasTemperature.h>
          #include <OneWire.h>
          #include <SPI.h>
          #include <MySensor.h>
          
          #define SKETCH_NAME "Binary Sensor+temp"
          #define SKETCH_MAJOR_VER "1"
          #define SKETCH_MINOR_VER "0"
          
          #define PRIMARY_CHILD_ID 3
          #define SECONDARY_CHILD_ID 4
          #define COMPARE_TEMP 1 // Send temperature only if changed? 1 = Yes 0 = No
          
          #define ONE_WIRE_BUS 3 // Pin where dallase sensor is connected 
          #define MAX_ATTACHED_DS18B20 16
          #define PRIMARY_BUTTON_PIN 3   // Arduino Digital I/O pin for button/reed switch
          //#define SECONDARY_BUTTON_PIN 7 // Arduino Digital I/O pin for button/reed switch
          
          OneWire oneWire(ONE_WIRE_BUS); // Setup a oneWire instance to communicate with any OneWire devices (not just Maxim/Dallas temperature ICs)
          DallasTemperature sensors(&oneWire); // Pass the oneWire reference to Dallas Temperature.
          float lastTemperature[MAX_ATTACHED_DS18B20];
          int numSensors = 0;
          boolean receivedConfig = false;
          boolean metric = true;
          
          #if (PRIMARY_BUTTON_PIN < 2 || PRIMARY_BUTTON_PIN > 3)
          #error PRIMARY_BUTTON_PIN must be either 2 or 3 for interrupts to work
          #endif
          //#if (SECONDARY_BUTTON_PIN < 2 || SECONDARY_BUTTON_PIN > 3)
          //#error SECONDARY_BUTTON_PIN must be either 2 or 3 for interrupts to work
          //#endif
          #if (PRIMARY_BUTTON_PIN == SECONDARY_BUTTON_PIN)
          #error PRIMARY_BUTTON_PIN and BUTTON_PIN2 cannot be the same
          #endif
          #if (PRIMARY_CHILD_ID == SECONDARY_CHILD_ID)
          #error PRIMARY_CHILD_ID and SECONDARY_CHILD_ID cannot be the same
          #endif
          
          
          // Change to V_LIGHT if you use S_LIGHT in presentation below
          MyMessage msg(PRIMARY_CHILD_ID, V_LIGHT);
          MyMessage msg2(SECONDARY_CHILD_ID, V_TEMP);
          int BATTERY_SENSE_PIN = A0;  // select the input pin for the battery sense point
          unsigned long SLEEP_TIME = 600000;  // sleep time between reads (seconds * 1000 milliseconds)
          int oldBatteryPcnt = 0;
          
          void setup()
          {
            // Startup up the OneWire library
            sensors.begin();
            // requestTemperatures() will not block current thread
            sensors.setWaitForConversion(false);
          
          #if defined(__AVR_ATmega2560__)
            analogReference(INTERNAL1V1);
          #else
            analogReference(INTERNAL);
          #endif
          
            // Setup the buttons
            pinMode(PRIMARY_BUTTON_PIN, INPUT);
            // pinMode(SECONDARY_BUTTON_PIN, INPUT);
          
            // Activate internal pull-ups
            digitalWrite(PRIMARY_BUTTON_PIN, HIGH);
            // digitalWrite(SECONDARY_BUTTON_PIN, HIGH);
          }
          
          void presentation() {
            // Send the sketch version information to the gateway and Controller
            sendSketchInfo(SKETCH_NAME, SKETCH_MAJOR_VER "." SKETCH_MINOR_VER);
          
            // Register binary input sensor to sensor_node (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.
            //numSensors = sensors.getDeviceCount();
          
            // Present all sensors to controller
            //for (int i=0; i<numSensors && i<MAX_ATTACHED_DS18B20; i++) {
          
          }
          
          present(PRIMARY_CHILD_ID, S_LIGHT);
          present(SECONDARY_CHILD_ID, S_TEMP);
          }
          
          // Loop will iterate on changes on the BUTTON_PINs
          void loop()
          {
          
            uint8_t value;
            static uint8_t sentValue = 2;
            static uint8_t sentValue2 = 2;
          
            // Short delay to allow buttons to properly settle
            sleep(5);
          
            value = digitalRead(PRIMARY_BUTTON_PIN);
          
            if (value != sentValue) {
              // Value has changed from last transmission, send the updated value
              send(msg.set(value == HIGH ? 1 : 0));
              sentValue = value;
            }
          
            //  value = digitalRead(SECONDARY_BUTTON_PIN);
            //
            //  if (value != sentValue2) {
            //     // Value has changed from last transmission, send the updated value
            //     send(msg2.set(value==HIGH ? 1 : 0));
            //     sentValue2 = value;
            //  }
            // Fetch temperatures from Dallas sensors
            sensors.requestTemperatures();
          
            // query conversion time and sleep until conversion completed
            int16_t conversionTime = sensors.millisToWaitForConversion(sensors.getResolution());
            // sleep() call can be replaced by wait() call if node need to process incoming messages (or if node is repeater)
            sleep(conversionTime);
          
            // Read temperatures and send them to controller
            for (int i = 0; i < numSensors && i < MAX_ATTACHED_DS18B20; i++) {
          
              // Fetch and round temperature to one decimal
              float temperature = static_cast<float>(static_cast<int>((getConfig().isMetric ? sensors.getTempCByIndex(i) : sensors.getTempFByIndex(i)) * 10.)) / 10.;
          
              // Only send data if temperature has changed and no error
          #if COMPARE_TEMP == 1
              if (lastTemperature[i] != temperature && temperature != -127.00 && temperature != 85.00) {
          #else
              if (temperature != -127.00 && temperature != 85.00) {
          #endif
          
                // Send in the new temperature
                send(msg.setSensor(i).set(temperature, 1));
                // Save new temperatures for next compare
                lastTemperature[i] = temperature;
              }
          
              // get the battery Voltage
              int sensorValue = analogRead(BATTERY_SENSE_PIN);
          #ifdef DEBUG
              Serial.println(sensorValue);
          #endif
          
              // 1M, 470K divider across battery and using internal ADC ref of 1.1V
              // Sense point is bypassed with 0.1 uF cap to reduce noise at that point
              // ((1e6+470e3)/470e3)*1.1 = Vmax = 3.44 Volts
              // 3.44/1023 = Volts per bit = 0.003363075
          
              int batteryPcnt = sensorValue / 10;
          
          #ifdef DEBUG
              float batteryV  = sensorValue * 0.003363075;
              Serial.print("Battery Voltage: ");
              Serial.print(batteryV);
              Serial.println(" V");
          
              Serial.print("Battery percent: ");
              Serial.print(batteryPcnt);
              Serial.println(" %");
          #endif
          
              if (oldBatteryPcnt != batteryPcnt) {
                // Power up radio after sleep
                sendBatteryLevel(batteryPcnt);
                oldBatteryPcnt = batteryPcnt;
              }
          
            }
            // Sleep until something happens with the sensor
            sleep(PRIMARY_BUTTON_PIN - 2, CHANGE, SLEEP_TIME);
          }
          
          1 Reply Last reply
          0
          Reply
          • Reply as topic
          Log in to reply
          • Oldest to Newest
          • Newest to Oldest
          • Most Votes


          23

          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