Una scheda Arduino sul balcone trasmette data, ora, temperatura,umidità, temperatura e umidità massima e minima del giorno in corso in 3 array char diversi che ricevo in casa con un altro Arduino, il modulo 433mhz e un lcd_i2c 20x4.
I 3 array char iniziano, rispettivamente con "a", "b", e "c" per distinguerli e posizionarli sempre sulla stessa riga del lcd.
Visto che arriva un array char alla volta mi aspetterei la risposta da uno solo degli ultimi tre salti condizionati del codice, mentre ottengo:
aaaaa
bbbbbb
cccccc
come se fossero vere tutte e tre le condizioni contemporaneamente.
E' evidente che c'è qualcosa che non ho capito.
Voi avete una spiegazione?
Grazie sin da ora.
Ecco il codice del ricevente:
#include <VirtualWire.h>
const int receive_pin = 7;
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
int riga=0;
float tempint=99.9; // in seguito aggiungerò un sensore della temperatura dentro casa
void setup() {
vw_set_rx_pin(receive_pin);
Serial.begin(9600);
vw_setup(2000); // Bits per sec
vw_rx_start(); // Start the receiver PLL running
lcd.begin(20,4);
lcd.backlight();
lcd.setCursor(0,0);//lcd.print("Versione 1.0");
} //fine setup
void loop() {
uint8_t buf[VW_MAX_MESSAGE_LEN];
uint8_t buflen = VW_MAX_MESSAGE_LEN;
if (vw_get_message(buf, &buflen)) { // Non-blocking
int i; // Message with a good checksum received, dump HEX
for (i = 1; i < buflen; i++) { // inizia da 1 per saltare il primo carattere
lcd.setCursor(i,riga);lcd.write(buf[i]);
} //fine for i
riga=riga+1;
if (riga>2) {riga=0;}
if (buf[0]='a') { Serial.println("aaaaa ");}
if (buf[0]='b') {Serial.println("bbbbbb ");}
if (buf[0]='c') {Serial.println("cccccc ");} ///tuttie tre sono veri: perchè
lcd.setCursor(0,3);lcd.print(tempint); // temperatura di casa alla 4° riga del lcd
}
} // fine void loop