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
    #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


                      21

                      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