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. Moisture sensing + relay. Please help with software.

Moisture sensing + relay. Please help with software.

Scheduled Pinned Locked Moved Troubleshooting
13 Posts 4 Posters 2.4k Views 6 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.
  • gohanG Offline
    gohanG Offline
    gohan
    Mod
    wrote on last edited by
    #2

    Sure, just copy code from the relay and add it to the sketch you are using, just change child ID for relay so it doesn't conflict with the other from the sensor you are using already.

    1 Reply Last reply
    0
    • Fat FlyF Offline
      Fat FlyF Offline
      Fat Fly
      wrote on last edited by
      #3

      I try but without luck.

      1 Reply Last reply
      0
      • gohanG Offline
        gohanG Offline
        gohan
        Mod
        wrote on last edited by
        #4

        Ok, but what is the problem you are experiencing? You need to provide code and errors if you want some help

        1 Reply Last reply
        0
        • Fat FlyF Offline
          Fat FlyF Offline
          Fat Fly
          wrote on last edited by
          #5

          Arduino/libraries/MySensors/MySensors.h:328:2: error: #error No forward link or gateway feature activated. This means nowhere to send messages! Pretty pointless.
          I want this for Arduino Nano.
          and code is here
          #include <SPI.h>
          #include <MySensors.h>
          #define MY_RADIO_NRF24
          #define MY_GATEWAY_SERIAL

          #define round(x) ((x)>=0?(long)((x)+0.5):(long)((x)-0.5))
          #define MY_DEBUG
          #define CHILD_ID_BATTERY 0
          #define SLEEP_TIME 600000 // Sleep time between reads (in milliseconds)
          #define STABILIZATION_TIME 500 // Let the sensor stabilize 0.5 seconds before reading
          #define BATTERY_FULL 3000 // 3,000 millivolts when battery is full (assuming 2xAA)
          #define BATTERY_ZERO 1700 // 1,700 millivolts when battery is empty (reqires blown brownout detection fuse, use 2,800 otherwise)
          // This sketch assumes power from 2xAA on Vcc (not RAW). Remove the power led and the voltage regulator for better battery life.
          // Sensors shall be connected to GND and their analog pin. Throw away the middle chip, just use the pitchfork.
          // Number of analog pins for each Arduino model can be seen at https://www.arduino.cc/en/Products/Compare
          // A5 and A6 on most Arduinos cannot be used because they don't have internal pullups
          const int SENSORS[] = {A0, A1, A2, A3, A4, A5}; // Remove the pins that you don't want to use
          #define N_ELEMENTS(array) (sizeof(array)/sizeof((array)[0]))
          long oldvoltage = 0;

          #define RELAY_1 3 // Arduino Digital I/O pin number for first relay (second on pin+1 etc)
          #define NUMBER_OF_RELAYS 1 // Total number of attached relays
          #define RELAY_ON 1 // GPIO value to write to turn on attached relay
          #define RELAY_OFF 0 // GPIO value to write to turn off attached relay

          MyMessage moisture_messages[N_ELEMENTS(SENSORS)];
          MyMessage voltage_msg(CHILD_ID_BATTERY, V_VOLTAGE);

          void before()
          {
          for (int sensor = 1, pin = RELAY_1; sensor <= NUMBER_OF_RELAYS; sensor++, pin++) {
          // Then set relay pins in output mode
          pinMode(pin, OUTPUT);

          }
          }

          void setup()
          {
          //gw.begin();
          sendSketchInfo("Plants moisture w bat", "1.2");
          present(CHILD_ID_BATTERY, S_CUSTOM);
          sendSketchInfo("Relay", "1.0");

          for (int sensor = 0; sensor < N_ELEMENTS(SENSORS); sensor++) {
          moisture_messages[sensor].sensor = sensor + 1; // Battery uses child ID 0 so sensors start at 1
          moisture_messages[sensor].type = V_HUM;
          delay(250);
          gw.present(sensor + 1, S_HUM);
          }
          for (int i = 0; i < N_ELEMENTS(SENSORS); i++) {
          pinMode(SENSORS[i], OUTPUT);
          digitalWrite(SENSORS[i], LOW);
          }

          for (int sensor = 1, pin = RELAY_1; sensor <= NUMBER_OF_RELAYS; sensor++, pin++) {

          }
          }

          void receive(const MyMessage &message)
          {
          {
          // We only expect one type of message from controller. But we better check anyway.
          if (message.type == V_STATUS) {
          // Change relay state
          digitalWrite(message.sensor - 1 + RELAY_1, message.getBool() ? RELAY_ON : RELAY_OFF);
          // Store state in eeprom
          saveState(message.sensor, message.getBool());
          // Write some debug info
          Serial.print("Incoming change for sensor:");
          Serial.print(message.sensor);
          Serial.print(", New status: ");
          Serial.println(message.getBool());
          }

          void loop()
          
          for (int sensor = 0; sensor < N_ELEMENTS(SENSORS); sensor++) {
            pinMode(SENSORS[sensor], INPUT_PULLUP); // "Power on" the sensor and activate the internal pullup resistor
            analogRead(SENSORS[sensor]); // Read once to let the ADC capacitor start charging
            sleep(STABILIZATION_TIME);
            int moistureLevel = (1023 - analogRead(SENSORS[sensor])) / 10.23;
          
            // Turn off the sensor to conserve battery and minimize corrosion
            pinMode(SENSORS[sensor], OUTPUT);
            digitalWrite(SENSORS[sensor], LOW);
          
            send(moisture_messages[sensor].set(moistureLevel));
          }
          
          long voltage = readVcc();
          if (oldvoltage != voltage) { // Only send battery information if voltage has changed, to conserve battery.
            send(voltage_msg.set(voltage / 1000.0, 3)); // redVcc returns millivolts and set wants volts and how many decimals (3 in our case)
            sendBatteryLevel(round((voltage - BATTERY_ZERO) * 100.0 / (BATTERY_FULL - BATTERY_ZERO)));
            oldvoltage = voltage;
          }
          sleep(SLEEP_TIME);
          

          }

          long readVcc()

          }
          // From http://provideyourown.com/2012/secret-arduino-voltmeter-measure-battery-voltage/
          // Read 1.1V reference against AVcc
          // set the reference to Vcc and the measurement to the internal 1.1V reference
          #if defined(AVR_ATmega32U4) || defined(AVR_ATmega1280) || defined(AVR_ATmega2560)
          ADMUX = _BV(REFS0) | _BV(MUX4) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1);
          #elif defined (AVR_ATtiny24) || defined(AVR_ATtiny44) || defined(AVR_ATtiny84)
          ADMUX = _BV(MUX5) | _BV(MUX0);
          #elif defined (AVR_ATtiny25) || defined(AVR_ATtiny45) || defined(AVR_ATtiny85)
          ADMUX = _BV(MUX3) | _BV(MUX2);
          #else
          ADMUX = _BV(REFS0) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1);
          #endif

          delay(2); // Wait for Vref to settle
          ADCSRA |= _BV(ADSC); // Start conversion
          while (bit_is_set(ADCSRA, ADSC)); // measuring

          uint8_t low = ADCL; // must read ADCL first - it then locks ADCH
          uint8_t high = ADCH; // unlocks both

          long result = (high << 8) | low;

          result = 1125300L / result; // Calculate Vcc (in mV); 1125300 = 1.110231000
          return result; // Vcc in millivolts
          }

          1 Reply Last reply
          0
          • gohanG Offline
            gohanG Offline
            gohan
            Mod
            wrote on last edited by
            #6

            The include mysensors.h needs to go after the defines, otherwise it can not know how you want the gateway to behave

            1 Reply Last reply
            0
            • Fat FlyF Offline
              Fat FlyF Offline
              Fat Fly
              wrote on last edited by
              #7

              Line 84 a function-definition is not allowed here before '{' token
              I put these 2 line with include after defines.

              1 Reply Last reply
              0
              • Fat FlyF Offline
                Fat FlyF Offline
                Fat Fly
                wrote on last edited by
                #8

                https://pastebin.com/zSb0hPNK

                1 Reply Last reply
                0
                • gohanG Offline
                  gohanG Offline
                  gohan
                  Mod
                  wrote on last edited by
                  #9

                  I think you forgot to close a parenthesis in the receive function. If you like a more helping programming interface, you can install visual studio and the extension Visual Micro that are much better than Arduino IDE and help you also visually with parenthesis and auto completion of functions and variables names.

                  1 Reply Last reply
                  0
                  • Fat FlyF Offline
                    Fat FlyF Offline
                    Fat Fly
                    wrote on last edited by
                    #10

                    @gohan said in Moisture sensing + relay. Please help with software.:

                    I think you forgot to close a parenthesis in the receive function. If you like a more helping programming interface, you can install visual studio and the extension Visual Micro that are much better than Arduino IDE and help you also visually with parenthesis and auto completion of functions and variables names.

                    I use linux. Ubuntu. For linux what software ?

                    1 Reply Last reply
                    0
                    • gohanG Offline
                      gohanG Offline
                      gohan
                      Mod
                      wrote on last edited by
                      #11

                      Maybe eclipse, but I'm not much into Linux, sorry.

                      1 Reply Last reply
                      0
                      • O Offline
                        O Offline
                        ominicw
                        wrote on last edited by
                        #12

                        I think you forgot to close a parenthesis in the receive function. If you like a more helping programming interface, you can install visual studio and the extension Visual Micro that are much better than Arduino IDE and help you also visually with parenthesis and auto completion of functions and variables names.

                        1 Reply Last reply
                        0
                        • alowhumA Offline
                          alowhumA Offline
                          alowhum
                          Plugin Developer
                          wrote on last edited by
                          #13

                          Here is some code that does exactly what was asked for:
                          https://github.com/createcandle/Devices/tree/master/Plant_health

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


                          9

                          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