Ciao a tutti son tornato con nuovi e vecchi problemi, ho 2 schede arduino versione UNO e MEGA2560 collegati tra di loro con il sistema I2C, alla scheda arduino uno ho collegato il sensore di umidità del terreno simile a quella qui linkata, Irrigazione arduino sensore terreno - seconda parte - Mauro Alfieri i suoi valori vengono poi inviati alla scheda arduino MEGA che al momento mi deve mostrare i dati su un LCD 16x2. I dati li richiamo tramite un pulsante di un telecomando con il sistema IR mostro il codice del master:
#include <IRremote.h>
#include <IRremoteInt.h>
#include <LiquidCrystal.h>
#include <Wire.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
//unsigned long time;
byte umidita[8] = //icona per umidità
{
B00100,
B00100,
B01010,
B01010,
B10001,
B10001,
B10001,
B01110,
};
//variabili sistema IR
int RECV_PIN = 6; //IR receiver connected on pin 6
//Change these values to match data sent by your remote control
/*-----COMMANDS------*/
const long start = 0x83228877;
/*-----END COMMANDS------*/
IRrecv irrecv(RECV_PIN); //initialize IR library on RECV_PIN
decode_results results; //received data will be stored here
void setup() {
//controllo seriale valori sonda suolo
//Serial.begin(9600);
Wire.begin();
lcd.begin(16, 2);
lcd.createChar(5, umidita);
irrecv.enableIRIn(); // Start the receiver
}
void loop() {
if (irrecv.decode(&results)) {
switch(results.value){ //fetch received data
case start:
lcd.clear();
digitalWrite(7, HIGH);
lcd.print("Sonda terreno");
Sonda();
delay(500);
break;
}
irrecv.resume(); // Receive the next value
}
}
void Sonda() {
Wire.requestFrom(2, 3);
while (Wire.available()) {
lcd.setCursor(4, 1);
lcd.print((char) 5);
lcd.print(Wire.read());
lcd.print("%");
delay(500);
}
}
mentre per lo slave ho scritto questo:
#include <Wire.h>
int sondaPin = A0;
int sondaValue = 0;
void setup()
{
pinMode (sondaPin, INPUT);
Wire.begin(2); // join i2c bus with address #2
Wire.onRequest(requestEvent); // register event
}
void loop()
{
delay(100);
}
// function that executes whenever data is requested by master
// this function is registered as an event, see setup()
void requestEvent() {
int sondaValue = analogRead (sondaPin);
Wire.write(sondaValue);
delay(500);
}
sullo schermo del master dovrei leggere un valore che va da 0 a 1023 in base alla resistenza che metto ai capi del sensore dal momento che nn c'è niente dovrei leggere il massimo che è 1023, invece ho un valore di 255 e poi volevo sapere c'è un modo per poter vedere la variazione di resistenza senza dover ripremere il pulsante sul telecomando creare un ciclo continuo fuori dal void del loop oppure se scrivo il programma requestEvent all'interno del loop mi manda i dati aggiornati direttamente al master?
Ho provato a controllare i valori anche con la seriale ma compaiono 2 voci la prima viene scritto 255 e nella seconda riga -1