Allora finalmente dopo milioni di correzioni ne sono venuto a capo.
Sono riuscito a fare funzionare il tutto a dovere e secondo quello che mi ero prefissato all'inizio
Sto diventando pazzo su l ultima cosa, vorrei aggiungere un trattino al di sotto della cifra che sto per modificare iniziando da sinistra quindi prima le 2 cifre delle ore e cosi via, oppure fare lampeggiare lo 0 che deve essere modificato.
Sto avendo problemi con la prima cifra di Ore ,Minuti e secondi, con la seconda cifra funziona alla perfezione
di seguito vi condivido tutto lo sketch del timer , in questo momento l ho impostato con lcd.blink() all'inizio del caso 0 e lcd.noBlink() alla fine del caso 5 ,ma come detto sopra mi accontento anche di lcd.cursor()
qualcuno mi può spiegare dove sto sbagliando?
#include <Keypad.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
const byte ROWS = 4;
const byte COLS = 4;
char keys[ROWS][COLS] = {
{'1', '2', '3', 'A'},
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'#', '0', '*', 'D'}
};
byte rowPins[ROWS] = {5, 4, 3, 2}; //pin delle righe
byte colPins[COLS] = {9, 8, 7, 6}; //in delle colonne
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
int conPos = 1; // Position Counter variable that controls the position of the cursor.
int conDig = 0; // Digital Counter variable the controls the case switching.
int ledPin = 9; // LED connected to digital pin 9. Is used in the alarm.
int h = 0; // This variables will store time values.
int m = 0;
int s = 0;
void setup()
{
lcd.init(); // Configures the number of columns and rows in the LCD.
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("Inserisci Tempo!"); // Prints a message in the LCD. "Introduce time".
lcd.setCursor(0, 1);
lcd.print("H00:M00:S00");
}
void loop()
{
char key = keypad.getKey();
if (key != NO_KEY)
{
switch (conDig)
{
case 0:
lcd.blink();
lcd.setCursor(conPos, 1); // conPos = 0. Horas. First Digit.
if (key <= '2')
{
lcd.print(key);
conPos = 2; // Moves the cursor at row 1 (the second one).
conDig++; // Moves on to the next case, with the cusor already in row 1.
h = (key - 48) * 10;
}
break;
case 1:
lcd.setCursor(conPos, 1); // conPos = 1. Horas. Second digit.
lcd.print(key);
//lcd.print(":M ");
conPos = 5;
conDig++;
h = h + (key - 48);
break;
case 2:
lcd.setCursor(conPos, 1); // conPos = 3. Minutos. Third digit.
if (key <= '5')
{
lcd.print(key);
conPos = 6; // Moves the cursor at row 4 (the fifth one).
conDig++; // Moves on to the next case.
m = (key - 48) * 10;
}
break;
case 3:
lcd.setCursor(conPos, 1); // conPos = 4. Minutos. Forth digit.
lcd.print(key);
//lcd.print(":S ");
conPos = 9;
conDig++;
m = m + (key - 48);
break;
case 4:
lcd.setCursor(conPos, 1); // conPos = 6. Segundos. Fifth digit.
if (key <= '5')
{
lcd.print(key);
conPos = 10;
conDig++;
s = (key - 48) * 10;
break;
case 5:
lcd.setCursor(conPos, 1); // conPos = 7. Segundos. Sixth digit.
lcd.print(key);
conDig++;
s = s + (key - 48);
lcd.noBlink();
delay(2000);
break;
}
}
while (conDig == 6)
{
Timer();
}
}
}