Troubleshooting

SEN0604 EC Value Is Always 0

userHead Mitsu.Yama 2026-08-03 14:50:39 9 Views0 Replies

I have a question.

I purchased the sensor introduced at:
https://wiki.dfrobot.com/sen0604/

and connected it to an Arduino UNO R3 via the RS485 Shield introduced at:
https://www.dfrobot.com/product-1024.html

I then ran the following sketch, which is provided here:
https://wiki.dfrobot.com/sen0604/docs/20298

 

uint8_t Com[8] = { 0x01, 0x03, 0x00, 0x00, 0x00, 0x04, 0x44, 0x09 };
float tem, hum, ph;
int ec;
void setup() {
 Serial.begin(9600); 
}
void loop() {
 readHumitureECPH();
 Serial.print("TEM = ");
 Serial.print(tem, 1);
 Serial.print(" °C  ");
 Serial.print("HUM = ");
 Serial.print(hum, 1);
 Serial.print(" %RH  ");
 Serial.print("EC = ");
 Serial.print(ec, 1);
 Serial.print(" us/cm ");
 Serial.print("PH = ");
 Serial.println(ph, 1);
 delay(1000);
}
void readHumitureECPH(void) {
 uint8_t Data[13] = { 0 };
 uint8_t ch = 0;
 bool flag = 1;
 while (flag) {
   delay(100);
   Serial.write(Com, 8);
   delay(10);
   if (readN(&ch, 1) == 1) {
     if (ch == 0x01) {
       Data[0] = ch;
       if (readN(&ch, 1) == 1) {
         if (ch == 0x03) {
           Data[1] = ch;
           if (readN(&ch, 1) == 1) {
             if (ch == 0x08) {
               Data[2] = ch;
               if (readN(&Data[3], 10) == 10) {
                 if (CRC16_2(Data, 11) == (Data[11] * 256 + Data[12])) {
                   hum = (Data[3] * 256 + Data[4]) / 10.00;
                   tem = (Data[5] * 256 + Data[6]) / 10.00;
                   ec = Data[7] * 256 + Data[8];
                   ph = (Data[9] * 256 + Data[10]) /10.00;
                   flag = 0;
                 }
               }
             }
           }
         }
       }
     }
   }
   Serial.flush();
 }
}

 

uint8_t readN(uint8_t *buf, size_t len) {
 size_t offset = 0, left = len;
 int16_t Tineout = 500;
 uint8_t *buffer = buf;
 long curr = millis();
 while (left) {
   if (Serial.available()) {
     buffer[offset] = Serial.read();
     offset++;
     left--;
   }
   if (millis() - curr > Tineout) {
     break;
   }
 }
 return offset;
}

 

unsigned int CRC16_2(unsigned char *buf, int len) {
 unsigned int crc = 0xFFFF;
 for (int pos = 0; pos < len; pos++) {
   crc ^= (unsigned int)buf[pos];
   for (int i = 8; i != 0; i--) {
     if ((crc & 0x0001) != 0) {
       crc >>= 1;
       crc ^= 0xA001;
     } else {
       crc >>= 1;
     }
   }
 }

 crc = ((crc & 0x00ff) << 8) | ((crc & 0xff00) >> 8);
 return crc;
}

 

When I inserted the sensor into the soil and ran this sketch, the values for TEM, HUM, and PH were displayed correctly, but the EC value was always 0.

I tested two different sensors, but the EC value was still always 0 with both of them.

Could you please let me know what might be causing this issue and how I can get the sensor to output the correct EC value?