#include #include #include #include #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 8 #define DE 7 const byte nitro[] = { 0x01, 0x03, 0x00, 0x1e, 0x00, 0x01, 0xe4, 0x0c }; const byte phos[] = { 0x01, 0x03, 0x00, 0x1f, 0x00, 0x01, 0xb5, 0xcc }; const byte pota[] = { 0x01, 0x03, 0x00, 0x20, 0x00, 0x01, 0x85, 0xc0 }; byte values[11]; SoftwareSerial mod(2, 3); void setup() { Serial.begin(9600); mod.begin(9600); pinMode(RE, OUTPUT); pinMode(DE, OUTPUT); display.begin(SSD1306_SWITCHCAPVCC, 0x3C); //initialize with the I2C addr 0x3C (128x64) delay(500); display.clearDisplay(); display.setCursor(25, 15); display.setTextSize(1); display.setTextColor(WHITE); display.println(" NPK Sensor"); display.setCursor(25, 35); display.setTextSize(1); display.print("Initializing"); display.display(); delay(3000); } void loop() { byte val1, val2, val3; val1 = nitrogen(); delay(250); val2 = phosphorous(); delay(250); val3 = potassium(); 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"); delay(2000); display.clearDisplay(); display.setCursor(0, 0); display.print("N: "); display.print(val1); display.print(" mg/kg"); //edit display.setCursor(0, 8); display.print("P: "); display.print(val2); display.print(" mg/kg"); //edit display.setCursor(0, 16); display.print("K: "); display.print(val3); display.print(" mg/kg"); display.setCursor(0, 25); 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]; }