Buongiorno a tutti.
Sto cercando di leggere un sensore NPK di cui allego scheda
NPK all in one soil sensor manual(V1.3).pdf (395,0 KB)
attraverso un arduino MKR 1010 e scheda MAXRS485.
I collegamenti sono stati realizzati come da schema di seguito riportato.
senza lo schermo OLED, utilizzando i PIN di arduino 14 e 13 per TX e RX collegati rispettivamente a DI e RO della RS485. I pin DE e RE sono collegati rispettivamente al PIN 7 e PIN8 dell'arduino MKR.
Allego anche il codice
#include <Arduino.h>
////1. indirizzo potassio TX:01 03 02 06 00 01 65 b3
const byte pota[] = {0x01, 0x03, 0x02, 0x06, 0x00, 0x01, 0x65, 0xb3};
////2. indirizzo fosforo TX:01 03 02 05 00 01 95 b3
const byte phos[] = {0x01, 0x03, 0x02, 0x05, 0x00, 0x01, 0x95, 0xb3};
////3. indirizzo azoto TX:01 03 02 04 00 01 c4 73
const byte nitro[] = {0x01, 0x03, 0x02, 0x04, 0x00, 0x01, 0xc4, 0x73};
#include <Arduino.h>
#define RE 8
#define DE 7
byte values[11];
void setup() {
Serial.begin(9600);
Serial1.begin(9600);
pinMode(RE, OUTPUT);
pinMode(DE, OUTPUT);
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);
}
byte nitrogen() {
digitalWrite(DE, HIGH);
digitalWrite(RE, HIGH);
delay(10);
if (Serial1.write(nitro, sizeof(nitro)) == 8) {
digitalWrite(DE, LOW);
digitalWrite(RE, LOW);
for (byte i = 0; i < 7; i++) {
values[i] = Serial1.read();
Serial.print(values[i], HEX);
}
Serial.println();
}
return values[4];
}
byte phosphorous() {
digitalWrite(DE, HIGH);
digitalWrite(RE, HIGH);
delay(10);
if (Serial1.write(phos, sizeof(phos)) == 8) {
digitalWrite(DE, LOW);
digitalWrite(RE, LOW);
for (byte i = 0; i < 7; i++) {
values[i] = Serial1.read();
Serial.print(values[i], HEX);
}
Serial.println();
}
return values[4];
}
byte potassium() {
digitalWrite(DE, HIGH);
digitalWrite(RE, HIGH);
delay(10);
if (Serial1.write(pota, sizeof(pota)) == 8) {
digitalWrite(DE, LOW);
digitalWrite(RE, LOW);
for (byte i = 0; i < 7; i++) {
values[i] = Serial1.read();
Serial.print(values[i], HEX);
}
Serial.println();
}
return values[4];
}
il problema è che non riesco a leggere nulla. Ho sempre FFFFFFFFFF per tutte le letture.
Vi ringrazio in anticipo.