Ciao a tutti.
Mi sto imbattendo in un problema non da poco, almeno per me che sono alle prime armi.
Vorrei visualizzare su un display 4*20 una riga con lo stato di alcune variabili.
In realtà, lo stato è determinato da dei simboli che ho costruito; questo lo sketch:
#include <LiquidCrystal_I2C.h>
#include <Wire.h>
#include <RTClib.h>
RTC_DS1307 RTC;
LiquidCrystal_I2C lcd(0x27,20,4);
#define IN 50
byte OFF_char[8] = {
B00000,
B01110,
B10001,
B10001,
B10001,
B10001,
B01110,
B00000
};
byte ON_char[8] = {
B00000,
B01110,
B11111,
B11111,
B11111,
B11111,
B01110,
B00000
};
byte UP_char[8] = {
B00001,
B00010,
B00010,
B00100,
B00100,
B01000,
B11000,
B10000
};
byte DW_char[8] = {
B10000,
B01000,
B01000,
B00100,
B00100,
B00010,
B00010,
B00001
};
byte a=12;
char buffer[21];
unsigned long time_rate=0;
void setup() {
pinMode(IN,INPUT);
Wire.begin();
RTC.begin();
lcd.init();
lcd.backlight();
if (! RTC.isrunning()) {
Serial.println("RTC is NOT running!");
RTC.adjust(DateTime(__DATE__, __TIME__));
}
lcd.createChar(0, ON_char);
lcd.createChar(1, OFF_char);
lcd.createChar(2, UP_char);
lcd.createChar(3, DW_char);
lcd.setCursor(0,0);
lcd.write(byte(0));
/*
lcd.createChar(1, newChar2);
lcd.createChar(2, newChar3);
lcd.createChar(3, newCharup);
lcd.createChar(4, newChardw);
*/
}
void loop() {
if (time_rate<millis()){ //refresh ogni secondo
time_rate = millis() + 1000;
display();
}
}
void display(){
DateTime now = RTC.now();
lcd.setCursor(0,0);
lcd.print(" Central-fade Mao ");
sprintf (buffer, "%02d/%02d/%4d", now.day(), now.month(), now.year());
lcd.setCursor(0,1);
lcd.print( buffer );
char buffer[21] = "";
sprintf(buffer, "%02d:%02d:%02d", now.hour(), now.minute(), now.second());
lcd.setCursor(12,1);
lcd.print( buffer );
lcd.setCursor(0,2);
lcd.print("L1 L2 L3 out12345678");
//visualizza lo stato uscite pwm
lcd.setCursor(0,3);
lcd.write(byte(0));
lcd.write(byte(2));
lcd.setCursor(3,3);
lcd.write(byte(0));
lcd.write(byte(3));
lcd.setCursor(6,3);
lcd.write(byte(1));
lcd.write(byte(2));
// visulaizza lo stato relè
for(int i=0;i<8;i++){
lcd.setCursor(a,3);
lcd.write(byte(0));
a=a+1;
if(a==20){
a=12;
}
}
}
Questo è puramente dimostrativo, e scrive nella quarta riga caratteri fissi.
Nella quarta riga vorrei che i caratteri assumano i valori reali e non fissi come li ho scritti.
Come posso fare???
Grazie.