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. Was läuft falsch?What's wrong?

Was läuft falsch?What's wrong?

Scheduled Pinned Locked Moved Troubleshooting
5 Posts 3 Posters 1.1k Views 3 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.
  • aDm1NA Offline
    aDm1NA Offline
    aDm1N
    wrote on last edited by aDm1N
    #1

    Hallo
    Hello

    Ich habe diesen Sketch :
    i have this sketch :

    #include <SPI.h>
    #include <MySensor.h>
    //ds18b20 & DHT
    #include <DHT.h>
    #include <DallasTemperature.h>
    #include <OneWire.h>
    //
    
    #define round(x) ((x)>=0?(long)((x)+0.5):(long)((x)-0.5))
    
    #define CHILD_ID_MOISTURE1 0
    #define CHILD_ID_MOISTURE2 1
    #define CHILD_ID_MOISTURE3 2
    #define CHILD_ID_MOISTURE4 3
    //#define CHILD_ID_BATTERY 1
    #define SENSOR_ANALOG_PIN 0
    #define SENSOR_ANALOG_PIN1 1
    #define SENSOR_ANALOG_PIN2 2
    #define SENSOR_ANALOG_PIN3 3
    #define SENSOR_POWER_PIN 8
    //#define SLEEP_TIME 600000 // Sleep time between reads (in milliseconds) (=10 MINUTES)
    #define STABILIZATION_TIME 500 // Let the sensor stabilize before reading
    //#define BATTERY_FULL 3700 // 3,700 millivolts
    //#define BATTERY_ZERO 1700 // 1,700 millivolts
    
    //ds18b20 & DHT
    #define MAX_ATTACHED_DS18B20 10
    
    #define ONE_WIRE_BUS 6
    #define DHT1_DATA_PIN 7
    
    #define CHILD_ID_DHT1HUM 6
    #define CHILD_ID_DHT1TEMP 7
    
    #define SENSOR_TEMP_OFFSET 0
    
    // Sleep time between sensor updates (in milliseconds)
    // Must be >1000ms for DHT22 and >2000ms for DHT11
    static const uint64_t UPDATE_INTERVAL = 3000;
    
    unsigned long SLEEP_TIME = 30000;
    boolean receivedConfig = false;
    boolean metric = true;
    int numSensors=0;
    
    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. 
    
    MyMessage msgDallas(0,V_TEMP);
    MyMessage msg6DHT1Temp(CHILD_ID_DHT1TEMP,V_TEMP);
    MyMessage msg7DHT1Hum(CHILD_ID_DHT1HUM,V_HUM);
    
    DHT dht;
    //
    
    MySensor gw;
    MyMessage msg1(CHILD_ID_MOISTURE1, V_HUM);
    MyMessage msg2(CHILD_ID_MOISTURE2, V_HUM);
    MyMessage msg3(CHILD_ID_MOISTURE3, V_HUM);
    MyMessage msg4(CHILD_ID_MOISTURE4, V_HUM);
    //MyMessage voltage_msg(CHILD_ID_BATTERY, V_VOLTAGE);
    int lastsoilValue1 = 0;
    int lastsoilValue2 = 0;
    int lastsoilValue3 = 0;
    int lastsoilValue4 = 0;
    
    
    //ds18b20 & DHT
    void before()
    {
      // Startup up the OneWire library
      sensors.begin();
    }  
    //
    void setup()
    {
      gw.begin();
      //ds18b20 & DHT
      // requestTemperatures() will not block current thread
      sensors.setWaitForConversion(false);
      // Fetch the number of attached temperature sensors  
      numSensors = sensors.getDeviceCount();
    
      // Present all sensors to controller
      for (int i=0; i<numSensors && i<MAX_ATTACHED_DS18B20; i++)    
         gw.present(i, S_TEMP);
      
      gw.present(CHILD_ID_DHT1TEMP,S_TEMP);
      gw.present(CHILD_ID_DHT1HUM,S_HUM);
    
      metric = gw.getConfig().isMetric;
      //
      pinMode(SENSOR_POWER_PIN, OUTPUT);
      
    
      gw.sendSketchInfo("Bodenfeuchte, Temperatur und Temp-Hum w bat", "1.0");
    
      gw.present(CHILD_ID_MOISTURE1, S_HUM);
      gw.present(CHILD_ID_MOISTURE2, S_HUM);
      gw.present(CHILD_ID_MOISTURE3, S_HUM);
      gw.present(CHILD_ID_MOISTURE4, S_HUM);
      //delay(250);
      //gw.present(CHILD_ID_BATTERY, S_CUSTOM);
    }
    
    void loop()
    {
      //ds18b20 & DHT
      // 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)
      gw.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>((gw.getConfig().isMetric?sensors.getTempCByIndex(i):sensors.getTempFByIndex(i)) * 10.)) / 10.;
     
      // Send in the new temperature
      gw.send(msgDallas.setSensor(i).set(temperature,1));
          #ifdef MY_DEBUG
          Serial.print("Dallas");
          Serial.print(i);
          Serial.print(" :");
          Serial.println(temperature);
          #endif
    
    //  sleep(SLEEP_TIME);
      }
       
      dht.setup(DHT1_DATA_PIN); // set data pin of DHT1 sensor
      if (UPDATE_INTERVAL <= dht.getMinimumSamplingPeriod()) {
        Serial.println("Warning: UPDATE_INTERVAL is smaller than supported by the sensor!");
      }
      // Sleep for the time of the minimum sampling period to give the sensor time to power up
      // (otherwise, timeout errors might occure for the first reading)
      gw.sleep(dht.getMinimumSamplingPeriod());
      
      // Force reading sensor, so it works also after sleep()
      //dht.readSensor(true);
      
      // Get temperature from DHT library
      float dht1temperature = dht.getTemperature();
      if (isnan(dht1temperature)) {
        Serial.println("Failed reading temperature from DHT!");
      } else 
        if (!metric) {
          dht1temperature = dht.toFahrenheit(dht1temperature);
        }
        
        dht1temperature += SENSOR_TEMP_OFFSET;
        gw.send(msg6DHT1Temp.set(dht1temperature, 1));
    
        #ifdef MY_DEBUG
        Serial.print("DHT1TEMP: ");
        Serial.println(dht1temperature);
        #endif
      gw.sleep(UPDATE_INTERVAL);
    
      // Get humidity from DHT library
      float dht1humidity = dht.getHumidity();
      if (isnan(dht1humidity)) {
        Serial.println("Failed reading humidity from DHT");
      } 
      else {
       gw.send(msg7DHT1Hum.set(dht1humidity, 1));
        
        #ifdef MY_DEBUG
        Serial.print("DHT1HUM: ");
        Serial.println(dht1humidity);
        #endif
      } 
    
      // Sleep for a while to save energy
      gw.sleep(UPDATE_INTERVAL); 
    
      //DHT Ende
      
      digitalWrite(SENSOR_POWER_PIN, HIGH); // Power on the sensors
      
      gw.sleep(STABILIZATION_TIME);     //stabilization before mesuring
      
      int moistureLevel = (1023 - analogRead(SENSOR_ANALOG_PIN)) / 10.23; // read moisture of the first sensor
      if (moistureLevel != lastsoilValue1) {                //test if moisture is different than before
        gw.send(msg1.set(moistureLevel));                  //send to controller moisture level of sensor 1
        lastsoilValue1 = moistureLevel;
      }
      
      int moistureLevel1 = (1023 - analogRead(SENSOR_ANALOG_PIN1)) / 10.23; // read moisture of the second sensor
      if (moistureLevel1 != lastsoilValue2) {                 //test if moisture is different than before
        gw.send(msg2.set(moistureLevel1));                  //send to controller moisture level of sensor 2
        lastsoilValue2 = moistureLevel1;
      }
      
      int moistureLevel2 = (1023 - analogRead(SENSOR_ANALOG_PIN2)) / 10.23; // read moisture of the third sensor
      if (moistureLevel2 != lastsoilValue3) {                 //test if moisture is different than before
        gw.send(msg3.set(moistureLevel2));                  //send to controller moisture level of sensor 3
        lastsoilValue3 = moistureLevel2;
      }
      
      int moistureLevel3 = (1023 - analogRead(SENSOR_ANALOG_PIN3)) / 10.23; // read moisture of fourth sensor
      if (moistureLevel3 != lastsoilValue4) {               //test if moisture is different than before
        gw.send(msg4.set(moistureLevel3));                  //send to controller moisture level of sensor 4
        lastsoilValue3 = moistureLevel3;
      }
      
      //debugging comment it when dont use
      Serial.print("first plant :");
      Serial.println(moistureLevel);
      Serial.print("second plant :");
      Serial.println(moistureLevel1);
      Serial.print("third plant :");
      Serial.println(moistureLevel2);
      Serial.print("fourth plant :");
      Serial.println(moistureLevel3);
      
      digitalWrite(SENSOR_POWER_PIN, LOW); //spower off sensors
      
      //long voltage = readVcc();
      //gw.send(voltage_msg.set(voltage / 1000.0, 3)); // redVcc returns millivolts and set wants volts and how many decimals (3 in our case)
      //gw.sendBatteryLevel(round((voltage - BATTERY_ZERO) * 100.0 / (BATTERY_FULL - BATTERY_ZERO)));
      gw.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.1*1023*1000
      return result; // Vcc in millivolts
    }*/
    

    Das ist die ausgabe des Seriellen Monitor :
    This is the serial monitor:

    send: 6-6-1-0 s=255,c=3,t=15,pt=2,l=2,sg=0,st=ok:0
    send: 6-6-1-0 s=255,c=0,t=17,pt=0,l=5,sg=0,st=fail:1.5.4
    send: 6-6-1-0 s=255,c=3,t=6,pt=1,l=1,sg=0,st=ok:1
    sensor started, id=6, parent=1, distance=2
    send: 6-6-1-0 s=7,c=0,t=6,pt=0,l=0,sg=0,st=ok:
    send: 6-6-1-0 s=6,c=0,t=7,pt=0,l=0,sg=0,st=ok:
    send: 6-6-1-0 s=255,c=3,t=11,pt=0,l=25,sg=0,st=ok:Bodenfeuchte, Temperatur 
    send: 6-6-1-0 s=255,c=3,t=12,pt=0,l=3,sg=0,st=ok:1.0
    send: 6-6-1-0 s=0,c=0,t=7,pt=0,l=0,sg=0,st=ok:
    send: 6-6-1-0 s=1,c=0,t=7,pt=0,l=0,sg=0,st=ok:
    send: 6-6-1-0 s=2,c=0,t=7,pt=0,l=0,sg=0,st=fail:
    send: 6-6-1-0 s=3,c=0,t=7,pt=0,l=0,sg=0,st=ok:
    send: 6-6-1-0 s=7,c=1,t=0,pt=7,l=5,sg=0,st=ok:18.8
    send: 6-6-1-0 s=6,c=1,t=1,pt=7,l=5,sg=0,st=ok:25.2
    send: 6-6-1-0 s=0,c=1,t=1,pt=2,l=2,sg=0,st=fail:86
    send: 6-6-1-0 s=1,c=1,t=1,pt=2,l=2,sg=0,st=fail:86
    send: 6-6-1-0 s=2,c=1,t=1,pt=2,l=2,sg=0,st=fail:86
    send: 6-6-1-0 s=3,c=1,t=1,pt=2,l=2,sg=0,st=fail:86
    first plant :86
    second plant :86
    third plant :86
    fourth plant :86
    

    Das ist der Verdrarungsplan dazu :
    This is the wiring :

    0_1548024920188_MySensors_Bodenfeuchte, dht, ds18b20_Steckplatine.png

    1 Reply Last reply
    0
    • tbowmoT Offline
      tbowmoT Offline
      tbowmo
      Admin
      wrote on last edited by
      #2

      Could you please keep it in English in here, as more people would be able to help, and benefit from the conversations.

      Also try reformatting your code, using the inline code format, it makes it much easier to read your code

      1 Reply Last reply
      0
      • aDm1NA Offline
        aDm1NA Offline
        aDm1N
        wrote on last edited by
        #3

        is it better like this?

        mfalkviddM 1 Reply Last reply
        1
        • aDm1NA aDm1N

          is it better like this?

          mfalkviddM Offline
          mfalkviddM Offline
          mfalkvidd
          Mod
          wrote on last edited by
          #4

          @adm1n try adding gw.wait(200) after each send. Sending many messages quickly often strains the power supply too much. Waiting a bit gives the power supply time to recover.

          What size of capacitors are you using? Adding a larger capacitor in paralell to the existing capacitor can also help stabilize the power supply.

          If you haven’t already, see https://forum.mysensors.org/topic/666/debug-faq-and-how-ask-for-help/ for the most common problems and how to troubleshoot them.

          Note that the sketch is using MySensors 1.x. That’s why the syntax and debug output is different from todays code.

          1 Reply Last reply
          0
          • aDm1NA Offline
            aDm1NA Offline
            aDm1N
            wrote on last edited by aDm1N
            #5

            Danke schon mal für die Hilfe.
            Thank you in advance for the help.

            Ich bin jetzt so weit das alle Daten gesendet werden, bis auf die ds18b20. Ich habe die Verkabelung überprüft, kann jedoch keinen Fehler finden. Bin ich Blind? Sieht jemand eventuell einen Fehler in dem Sketch?

            I am now so far that all data is sent, except for the ds18b20. I have checked the cabling but can not find a fault. Am I blind? Does anyone see an error in the sketch?

            #include <MySensor.h>
            //ds18b20 & DHT
            #include <DHT.h>
            #include <DallasTemperature.h>
            #include <OneWire.h>
            //
            
            #define round(x) ((x)>=0?(long)((x)+0.5):(long)((x)-0.5))
            
            #define CHILD_ID_MOISTURE1 0
            #define CHILD_ID_MOISTURE2 1
            #define CHILD_ID_MOISTURE3 2
            #define CHILD_ID_MOISTURE4 3
            //#define CHILD_ID_BATTERY 1
            #define SENSOR_ANALOG_PIN 0
            #define SENSOR_ANALOG_PIN1 1
            #define SENSOR_ANALOG_PIN2 2
            #define SENSOR_ANALOG_PIN3 3
            #define SENSOR_POWER_PIN 8
            //#define SLEEP_TIME 600000 // Sleep time between reads (in milliseconds) (=10 MINUTES)
            #define STABILIZATION_TIME 300 // Let the sensor stabilize before reading
            //#define BATTERY_FULL 3700 // 3,700 millivolts
            //#define BATTERY_ZERO 1700 // 1,700 millivolts
            
            //ds18b20 & DHT
            #define MAX_ATTACHED_DS18B20 6
            
            #define ONE_WIRE_BUS 6
            #define DHT1_DATA_PIN 7
            
            #define CHILD_ID_DHT1HUM 6
            #define CHILD_ID_DHT1TEMP 7
            
            #define SENSOR_TEMP_OFFSET 0
            
            // Sleep time between sensor updates (in milliseconds)
            // Must be >1000ms for DHT22 and >2000ms for DHT11
            static const uint64_t UPDATE_INTERVAL = 3000;
            
            unsigned long SLEEP_TIME = 30000;
            boolean receivedConfig = false;
            boolean metric = true;
            int numSensors=0;
            
            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. 
            
            MyMessage msgDallas(0,V_TEMP);
            MyMessage msg6DHT1Temp(CHILD_ID_DHT1TEMP,V_TEMP);
            MyMessage msg7DHT1Hum(CHILD_ID_DHT1HUM,V_HUM);
            
            DHT dht;
            //
            
            MySensor gw;
            MyMessage msg1(CHILD_ID_MOISTURE1, V_HUM);
            MyMessage msg2(CHILD_ID_MOISTURE2, V_HUM);
            MyMessage msg3(CHILD_ID_MOISTURE3, V_HUM);
            MyMessage msg4(CHILD_ID_MOISTURE4, V_HUM);
            //MyMessage voltage_msg(CHILD_ID_BATTERY, V_VOLTAGE);
            int lastsoilValue1 = 0;
            int lastsoilValue2 = 0;
            int lastsoilValue3 = 0;
            int lastsoilValue4 = 0;
            
            
            //ds18b20 & DHT
            void before()
            {
              // Startup up the OneWire library
              sensors.begin();
            }  
            //
            void setup()
            {
              gw.begin();
              gw.sendSketchInfo("Bodenfeuchte_Temperatur_Hum", "1.0");
              //ds18b20 & DHT
              // requestTemperatures() will not block current thread
              sensors.setWaitForConversion(true);
              // Fetch the number of attached temperature sensors  
              numSensors = sensors.getDeviceCount();
            
              // Present all sensors to controller
              for (int i=0; i<numSensors && i<MAX_ATTACHED_DS18B20; i++)    
                 gw.present(i, S_TEMP);
              
              gw.present(CHILD_ID_DHT1TEMP,S_TEMP);
              gw.present(CHILD_ID_DHT1HUM,S_HUM);
            
              metric = gw.getConfig().isMetric;
              //
              pinMode(SENSOR_POWER_PIN, OUTPUT);
              
            
              
            
              gw.present(CHILD_ID_MOISTURE1, S_HUM);
              gw.present(CHILD_ID_MOISTURE2, S_HUM);
              gw.present(CHILD_ID_MOISTURE3, S_HUM);
              gw.present(CHILD_ID_MOISTURE4, S_HUM);
              delay(250);
              //gw.present(CHILD_ID_BATTERY, S_CUSTOM);
            }
            
            void loop()
            {
              //ds18b20 & DHT
              // 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)
              gw.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>((gw.getConfig().isMetric?sensors.getTempCByIndex(i):sensors.getTempFByIndex(i)) * 10.)) / 10.;
             
              // Send in the new temperature
              gw.send(msgDallas.setSensor(i).set(temperature,1));
                  //#ifdef MY_DEBUG
                  Serial.print("Dallas");
                  Serial.print(i);
                  Serial.print(" :");
                  Serial.println(temperature);
                  //#endif
                  gw.wait(200);
            
            //  sleep(SLEEP_TIME);
              }
               
              dht.setup(DHT1_DATA_PIN); // set data pin of DHT1 sensor
              if (UPDATE_INTERVAL <= dht.getMinimumSamplingPeriod()) {
                Serial.println("Warning: UPDATE_INTERVAL is smaller than supported by the sensor!");
              }
              // Sleep for the time of the minimum sampling period to give the sensor time to power up
              // (otherwise, timeout errors might occure for the first reading)
              gw.sleep(dht.getMinimumSamplingPeriod());
              
              // Force reading sensor, so it works also after sleep()
            //  dht.readSensor(false);
              
              // Get temperature from DHT library
              float dht1temperature = dht.getTemperature();
              if (isnan(dht1temperature)) {
                Serial.println("Failed reading temperature from DHT!");
              } else 
                if (!metric) {
                  dht1temperature = dht.toFahrenheit(dht1temperature);
                }
                
                dht1temperature += SENSOR_TEMP_OFFSET;
                gw.send(msg6DHT1Temp.set(dht1temperature, 1));
            
                //#ifdef MY_DEBUG
                Serial.print("DHT1TEMP: ");
                Serial.println(dht1temperature);
                //#endif
              gw.sleep(UPDATE_INTERVAL);
            
              // Get humidity from DHT library
              float dht1humidity = dht.getHumidity();
              if (isnan(dht1humidity)) {
                Serial.println("Failed reading humidity from DHT");
              } 
              else {
               gw.send(msg7DHT1Hum.set(dht1humidity, 1));
                
                //#ifdef MY_DEBUG
                Serial.print("DHT1HUM: ");
                Serial.println(dht1humidity);
                //#endif
              } 
            
              // Sleep for a while to save energy
              gw.sleep(UPDATE_INTERVAL); 
              //gw.wait(300);
            
              //DHT Ende
              
              digitalWrite(SENSOR_POWER_PIN, HIGH); // Power on the sensors
              //gw.wait(500);
              
              gw.sleep(STABILIZATION_TIME);     //stabilization before mesuring
              
              int moistureLevel = (1023 - analogRead(SENSOR_ANALOG_PIN)) / 10.23; // read moisture of the first sensor
              if (moistureLevel != lastsoilValue1) {                //test if moisture is different than before
                gw.send(msg1.set(moistureLevel));                  //send to controller moisture level of sensor 1
                lastsoilValue1 = moistureLevel;
                gw.wait(200);
              }
              
              int moistureLevel1 = (1023 - analogRead(SENSOR_ANALOG_PIN1)) / 10.23; // read moisture of the second sensor
              if (moistureLevel1 != lastsoilValue2) {                 //test if moisture is different than before
                gw.send(msg2.set(moistureLevel1));                  //send to controller moisture level of sensor 2
                lastsoilValue2 = moistureLevel1;
                gw.wait(200);
              }
              
              int moistureLevel2 = (1023 - analogRead(SENSOR_ANALOG_PIN2)) / 10.23; // read moisture of the third sensor
              if (moistureLevel2 != lastsoilValue3) {                 //test if moisture is different than before
                gw.send(msg3.set(moistureLevel2));                  //send to controller moisture level of sensor 3
                lastsoilValue3 = moistureLevel2;
                gw.wait(200);
              }
              
              int moistureLevel3 = (1023 - analogRead(SENSOR_ANALOG_PIN3)) / 10.23; // read moisture of fourth sensor
              if (moistureLevel3 != lastsoilValue4) {               //test if moisture is different than before
                gw.send(msg4.set(moistureLevel3));                  //send to controller moisture level of sensor 4
                lastsoilValue3 = moistureLevel3;
                gw.wait(200);
              }
              
              //debugging comment it when dont use
              Serial.print("first plant :");
              Serial.println(moistureLevel);
              Serial.print("second plant :");
              Serial.println(moistureLevel1);
              Serial.print("third plant :");
              Serial.println(moistureLevel2);
              Serial.print("fourth plant :");
              Serial.println(moistureLevel3);
              
              digitalWrite(SENSOR_POWER_PIN, LOW); //spower off sensors
              
              //long voltage = readVcc();
              //gw.send(voltage_msg.set(voltage / 1000.0, 3)); // redVcc returns millivolts and set wants volts and how many decimals (3 in our case)
              //gw.sendBatteryLevel(round((voltage - BATTERY_ZERO) * 100.0 / (BATTERY_FULL - BATTERY_ZERO)));
              gw.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.1*1023*1000
              return result; // Vcc in millivolts
            }*/```
            
            
            

            send: 6-6-1-0 s=255,c=3,t=15,pt=2,l=2,sg=0,st=ok:0
            send: 6-6-1-0 s=255,c=0,t=17,pt=0,l=5,sg=0,st=ok:1.5.4
            send: 6-6-1-0 s=255,c=3,t=6,pt=1,l=1,sg=0,st=ok:1
            read: 0-1-6 s=255,c=3,t=15,pt=6,l=2,sg=0:0100
            read: 0-1-6 s=255,c=3,t=6,pt=0,l=1,sg=0:M
            sensor started, id=6, parent=1, distance=2
            send: 6-6-1-0 s=255,c=3,t=11,pt=0,l=25,sg=0,st=ok:Bodenfeuchte_Temperatur_H
            send: 6-6-1-0 s=255,c=3,t=12,pt=0,l=3,sg=0,st=ok:1.0
            send: 6-6-1-0 s=7,c=0,t=6,pt=0,l=0,sg=0,st=ok:
            send: 6-6-1-0 s=6,c=0,t=7,pt=0,l=0,sg=0,st=ok:
            send: 6-6-1-0 s=0,c=0,t=7,pt=0,l=0,sg=0,st=ok:
            send: 6-6-1-0 s=1,c=0,t=7,pt=0,l=0,sg=0,st=ok:
            send: 6-6-1-0 s=2,c=0,t=7,pt=0,l=0,sg=0,st=fail:
            send: 6-6-1-0 s=3,c=0,t=7,pt=0,l=0,sg=0,st=ok:
            send: 6-6-1-0 s=7,c=1,t=0,pt=7,l=5,sg=0,st=ok:18.3
            DHT1TEMP: 18.30
            send: 6-6-1-0 s=6,c=1,t=1,pt=7,l=5,sg=0,st=ok:25.0
            DHT1HUM: 25.00
            first plant :0
            second plant :0
            third plant :0
            fourth plant :0

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


            24

            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