Buongiorno a tutti stavo lavorando a questo progetto dove volevo gestire con un display oled e un sensore di temperatura una sorta di termostato dove posso impostare la temperatura per mezzo di un keypad, in caso ci fosse il riscaldamento attaccato mostro una fiammella animata in caso di aria condizionata un ghiacciolino. Il mio problema è che se metto le istruzioni semplicemente nel loop funziona perfettamente ma se metto un if per capire quale delle immagini mostrare stampa solo le variabili che contengono la temperatura e non il testo.Non allego tutta la parte delle bitmap perchè risulterebbe troppo lungo il codice, sto utilizzando la libreria u8glib non la 2.
byte rowPins[ROWS] = { 22, 23, 24, 25 }; // Pin per le righe
byte colPins[COLS] = { 26, 27, 28, 29 }; // Pin per le colonne
bool errore = 0, conditioner = 1, firstTime = 0;
char string[4];
char key, oldKey;
int Timp, num, progress;
float Teff;
unsigned long lastAgg;
U8GLIB_SH1106_128X64 u8g(U8G_I2C_OPT_NO_ACK);
Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);
void setup() {
Serial.begin(9600);
u8g.begin();
u8g.setFont(u8g_font_9x15B);
u8g.setColorIndex(1);
setTemperature();
setTeff();
}
void loop() {
if(!firstTime){
u8g.firstPage();
do{
progress = 0;
delay(50);
firstTime = 1;
}while(u8g.nextPage());
}
u8g.firstPage();
do{
if(Teff > Timp + 3){
u8g.drawBitmapP(0, 0, 128 / 8, 64, iceallArray[progress]);
}
if(Teff < Timp - 3){
u8g.drawBitmapP(0, 0, 128 / 8, 64, fireallArray[progress]);
}
if(Teff >= Timp - 3 && Teff <= Timp + 3){
u8g.drawBitmapP(0, 0, 128 / 8, 64, done_a_frm0_40);
}
u8g.setFont(u8g_font_6x10);
u8g.drawStr(1, 15, "T. Impostata");
u8g.drawStr(1, 45, "T. Rilevata");
u8g.setFont(u8g_font_9x15B);
if(Timp > 0){
u8g.setPrintPos(15, 30);
}else{
u8g.setPrintPos(6, 30);
}
u8g.print(Timp);
u8g.drawStr(30, 30, " C");
if(Teff > 0){
u8g.setPrintPos(15, 60);
}else{
u8g.setPrintPos(6, 60);
}
u8g.print(Teff);
u8g.drawStr(60, 60, " C");
if(millis() - lastAgg >= 200){
progress = (progress + 1) % 28;
lastAgg = millis();
}
}while(u8g.nextPage());
}
int stringToInt() {
int somma = 0;
switch (string[0]) {
case '+':
break;
case '-':
break;
default:
errore = 1;
break;
}
for (int i = 1; i < 3; i++) {
switch (string[i]) {
case '0':
num = 0;
break;
case '1':
num = 1;
break;
case '2':
num = 2;
break;
case '3':
num = 3;
break;
case '4':
num = 4;
break;
case '5':
num = 5;
break;
case '6':
num = 6;
break;
case '7':
num = 7;
break;
case '8':
num = 8;
break;
case '9':
num = 9;
break;
default:
errore = 1;
break;
}
if (!errore) {
somma = somma + (num * pow(10, 2 - i));
}
}
switch (string[0]) {
case '+':
somma = somma;
break;
case '-':
somma = somma * -1;
break;
default:
errore = 1;
break;
}
return somma;
}
void drawKeypad(int progress) {
if (errore) {
u8g.firstPage();
do {
u8g.drawBitmapP(0, 0, 128 / 8, 64, bitmap_schermata_errore);
} while (u8g.nextPage());
delay(2000);
} else {
switch (progress) {
case 0:
if (string[0] == '-') {
u8g.drawBitmapP(0, 0, 128 / 8, 64, bitmap_Prima_schermata_sistemi_con_il_meno);
} else if (string[0] == '+') {
u8g.drawBitmapP(0, 0, 128 / 8, 64, bitmap_Prima_schermata_sistemi_);
}
break;
case 1:
if (string[0] == '-') {
u8g.drawBitmapP(0, 0, 128 / 8, 64, bitmap_Prima_schermata_sistemi_con_il_meno);
} else if (string[0] == '+') {
u8g.drawBitmapP(0, 0, 128 / 8, 64, bitmap_Prima_schermata_sistemi_);
}
u8g.setPrintPos(Position[0], 48);
u8g.print(string[1]);
break;
case 2:
if (string[0] == '-') {
u8g.drawBitmapP(0, 0, 128 / 8, 64, bitmap_Prima_schermata_sistemi_con_il_meno);
} else if (string[0] == '+') {
u8g.drawBitmapP(0, 0, 128 / 8, 64, bitmap_Prima_schermata_sistemi_);
}
u8g.setPrintPos(Position[0], 48);
u8g.print(string[1]);
u8g.setPrintPos(Position[1], 48);
u8g.print(string[2]);
break;
}
}
}
void verificaCorrettezza(int progress, char tasto) {
switch (progress) {
case 0:
if (tasto != '+' && tasto != '-') {
errore = 1;
}
break;
case 1:
if (tasto == '+' || tasto == '-' || tasto == 'A' || tasto == 'B' || tasto == 'C' || tasto == 'D') {
errore = 1;
}
break;
case 2:
if (tasto == '+' || tasto == '-' || tasto == 'A' || tasto == 'B' || tasto == 'C' || tasto == 'D') {
errore = 1;
}
break;
}
}
void setTemperature() {
do {
errore = 0;
u8g.firstPage();
do {
u8g.drawBitmapP(0, 0, 128 / 8, 64, bitmap_Insert_screen);
} while (u8g.nextPage());
for (int i = 0; i < 3 && !errore; i++) {
key = keypad.waitForKey();
verificaCorrettezza(i, key);
if (!errore) {
string[i] = key;
oldKey = key;
delay(50);
}
u8g.firstPage();
do {
drawKeypad(i);
} while (u8g.nextPage());
}
Timp = stringToInt();
} while (errore);
delay(1500);
}
void setTeff(){
do {
errore = 0;
u8g.firstPage();
do {
u8g.drawBitmapP(0, 0, 128 / 8, 64, bitmap_Insert_screen);
} while (u8g.nextPage());
for (int i = 0; i < 3 && !errore; i++) {
key = keypad.waitForKey();
verificaCorrettezza(i, key);
if (!errore) {
string[i] = key;
oldKey = key;
delay(50);
}
u8g.firstPage();
do {
drawKeypad(i);
} while (u8g.nextPage());
}
Teff = stringToInt();
} while (errore);
delay(1500);
}