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.
  • Fat FlyF Offline
    Fat FlyF Offline
    Fat Fly
    wrote on last edited by Fat Fly
    #1

    My skill in programming is low. I make something for last 2.x library but some errors. Moisture sensors A0-A5 and if possible add relays from relay sketch.
    https://pastebin.com/VRXyT8Ut
    I want to add same harware these two components.
    sensor0_1490948536425_88C588F1-B9C3-4436-A31B-DE58DA97AD6F.jpg

    1 Reply Last reply
    0
    • 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


                            15

                            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