hey values are showing mixed and sometimes it shows 255 for all parameters, can you please help me with it?
and the code i used is :
type or paste code here
`````#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
/////
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
#define OLED_RESET -1 // Reset pin # (or -1 if sharing Arduino reset pin)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
#define RE 13
#define DE 12
const byte nitro[] = {0x01, 0x03, 0x00, 0x87, 0x0E, 0x0E, 0x34, 0x37};
const byte phos[] = {0x01, 0x03, 0x00, 0x8A, 0x0E, 0x0E, 0x34, 0x37};
const byte pota[] = {0x01, 0x03, 0x00, 0x8E, 0x0E, 0x0E, 0x34, 0x37};
const byte soil_ph[] = {0x01, 0x03, 0x02, 0xAE, 0x0E, 0x0E, 0x34, 0x37};
const byte soil_moist[] = {0x01, 0x03, 0x01, 0x64, 0x0E, 0x0E, 0x34, 0x37};
const byte temp[] = {0x01, 0x03, 0xFF, 0xDD, 0x0E, 0x0E, 0x34, 0x37};
const byte ec[] = {0x01, 0x03, 0x04, 0xD2, 0x0E, 0x0E, 0x34, 0x37};
byte values[11];
HardwareSerial mod(2); // Use Serial2 for RS485 communication
void setup() {
Serial.begin(9600);
mod.begin(9600, SERIAL_8N1, 16, 17); // Set the baud rate and pins for Serial2
pinMode(RE, OUTPUT);
pinMode(DE, OUTPUT);
display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // Initialize OLED display
delay(500);
display.clearDisplay();
display.setCursor(25, 25);
display.setTextSize(1);
display.setTextColor(WHITE);
display.println(" Soil Sensor");
display.setCursor(25, 40);
display.setTextSize(1);
display.print("Initializing");
display.display();
delay(1000);
}
void loop() {
byte val1, val2, val3, val4, val5, val6, val7;
val1 = nitrogen();
delay(250);
val2 = phosphorous();
delay(250);
val3 = potassium();
delay(250);
val4 = ph();
delay(250);
val5 = moist();
delay(250);
val6 = stemp();
delay(250);
val7 = econd();
delay(250);
Serial.print("Nitrogen: ");
Serial.print(val1);
Serial.println(" mg/kg");
Serial.print("Phosphorous: ");
Serial.print(val2);
Serial.println(" mg/kg");
Serial.print("Potassium: ");
Serial.print(val3);
Serial.println(" mg/kg");
Serial.print("Soil pH: ");
Serial.print(val4);
Serial.println(" pH");
Serial.print("Soil Moisture: ");
Serial.print(val5);
Serial.println(" %");
Serial.print("Temperature: ");
Serial.print(val6);
Serial.println(" C");
Serial.print("Electrical Conductivity: ");
Serial.print(val7);
Serial.println(" mS/m");
delay(5000);
display.clearDisplay();
display.setTextSize(1);
display.setCursor(0, 0);
display.print("N: ");
display.print(val1);
display.setTextSize(1);
display.print(" mg/kg");
display.setTextSize(1);
display.setCursor(0, 15);
display.print("P: ");
display.print(val2);
display.setTextSize(1);
display.print(" mg/kg");
display.setTextSize(1);
display.setCursor(0, 30);
display.print("K: ");
display.print(val3);
display.setTextSize(1);
display.print(" mg/kg");
display.setTextSize(1);
display.setCursor(0, 43);
display.print("PH: ");
display.print(val4);
display.setTextSize(1);
display.print(" ph");
display.setTextSize(1);
display.setCursor(0, 57);
display.print("SM: ");
display.print(val5);
display.print(" %");
display.display();
delay(2000);
}
byte nitrogen() {
digitalWrite(DE, HIGH);
digitalWrite(RE, HIGH);
delay(10);
if (mod.write(nitro, sizeof(nitro)) == 8) {
digitalWrite(DE, LOW);
digitalWrite(RE, LOW);
for (byte i = 0; i < 7; i++) {
values[i] = mod.read();
Serial.print(values[i], HEX);
}
Serial.println();
}
return values[4];
}
byte phosphorous() {
digitalWrite(DE, HIGH);
digitalWrite(RE, HIGH);
delay(10);
if (mod.write(phos, sizeof(phos)) == 8) {
digitalWrite(DE, LOW);
digitalWrite(RE, LOW);
for (byte i = 0; i < 7; i++) {
values[i] = mod.read();
Serial.print(values[i], HEX);
}
Serial.println();
}
return values[4];
}
byte potassium() {
digitalWrite(DE, HIGH);
digitalWrite(RE, HIGH);
delay(10);
if (mod.write(pota, sizeof(pota)) == 8) {
digitalWrite(DE, LOW);
digitalWrite(RE, LOW);
for (byte i = 0; i < 7; i++) {
values[i] = mod.read();
Serial.print(values[i], HEX);
}
Serial.println();
}
return values[4];
}
byte ph() {
digitalWrite(DE, HIGH);
digitalWrite(RE, HIGH);
delay(10);
if (mod.write(soil_ph, sizeof(soil_ph)) == 8) {
digitalWrite(DE, LOW);
digitalWrite(RE, LOW);
for (byte i = 0; i < 7; i++) {
values[i] = mod.read();
Serial.print(values[i], HEX);
}
Serial.println();
}
return values[4];
}
byte moist() {
digitalWrite(DE, HIGH);
digitalWrite(RE, HIGH);
delay(10);
if (mod.write(soil_moist, sizeof(soil_moist)) == 8) {
digitalWrite(DE, LOW);
digitalWrite(RE, LOW);
for (byte i = 0; i < 7; i++) {
values[i] = mod.read();
Serial.print(values[i], HEX);
}
Serial.println();
}
return values[4];
}
byte stemp() {
digitalWrite(DE, HIGH);
digitalWrite(RE, HIGH);
delay(10);
if (mod.write(temp, sizeof(temp)) == 8) {
digitalWrite(DE, LOW);
digitalWrite(RE, LOW);
for (byte i = 0; i < 7; i++) {
values[i] = mod.read();
Serial.print(values[i], HEX);
}
Serial.println();
}
return values[4];
}
byte econd() {
digitalWrite(DE, HIGH);
digitalWrite(RE, HIGH);
delay(10);
if (mod.write(ec, sizeof(ec)) == 8) {
digitalWrite(DE, LOW);
digitalWrite(RE, LOW);
for (byte i = 0; i < 7; i++) {
values[i] = mod.read();
Serial.print(values[i], HEX);
}
Serial.println();
}
return values[4];
}
and the circuit diagram is ( but here im not uisng OLED):