#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,20,4); // Endereço do display LCD 20x4 i2c
int colunaX;
int posicao=0;
int unidade=0;
int dezena=0;
// Segmentos personalizados
byte d1[8] =
{
B00000,
B00000,
B00000,
B00000,
B00000,
B11111,
B11111,
B11111
};
byte d2[8] =
{
B11111,
B11111,
B11111,
B11111,
B11111,
B11111,
B11111,
B11111,
};
byte d3[8] =
{
B11111,
B11111,
B11111,
B00000,
B00000,
B00000,
B00000,
B00000,
};
byte ponto[8] =
{
B00000,
B00000,
B00100,
B01110,
B11111,
B01110,
B00100,
B00000
};
void num_0(){
lcd.setCursor(colunaX, 0); //Coluna, Linha
lcd.write(byte(1));
lcd.write(byte(1));
lcd.write(byte(1));
lcd.setCursor(colunaX, 1); //Coluna, Linha
lcd.write(byte(2));
lcd.print(" ");
lcd.write(byte(2));
lcd.setCursor(colunaX, 2); //Coluna, Linha
lcd.write(byte(2));
lcd.print(" ");
lcd.write(byte(2));
lcd.setCursor(colunaX, 3); //Coluna, Linha
lcd.write(byte(3));
lcd.write(byte(3));
lcd.write(byte(3));
}
void num_1(){
lcd.setCursor(colunaX, 0); //Coluna, Linha
lcd.print(" ");
lcd.write(byte(1));
lcd.write(byte(1));
lcd.setCursor(colunaX, 1); //Coluna, Linha
lcd.print(" ");
lcd.write(byte(2));
lcd.setCursor(colunaX, 2); //Coluna, Linha
lcd.print(" ");
lcd.write(byte(2));
lcd.setCursor(colunaX, 3); //Coluna, Linha
lcd.print(" ");
lcd.write(byte(3));
}
void num_2(){
lcd.setCursor(colunaX, 0); //Coluna, Linha
lcd.write(byte(1));
lcd.write(byte(1));
lcd.write(byte(1));
lcd.setCursor(colunaX, 1); //Coluna, Linha
lcd.write(byte(1));
lcd.write(byte(1));
lcd.write(byte(2));
lcd.setCursor(colunaX, 2); //Coluna, Linha
lcd.write(byte(2));
lcd.print(" ");
lcd.setCursor(colunaX, 3); //Coluna, Linha
lcd.write(byte(3));
lcd.write(byte(3));
lcd.write(byte(3));
}
void num_3(){
lcd.setCursor(colunaX, 0); //Coluna, Linha
lcd.write(byte(1));
lcd.write(byte(1));
lcd.write(byte(1));
lcd.setCursor(colunaX, 1); //Coluna, Linha
lcd.write(byte(1));
lcd.write(byte(1));
lcd.write(byte(2));
lcd.setCursor(colunaX, 2); //Coluna, Linha
lcd.print(" ");
lcd.write(byte(2));
lcd.setCursor(colunaX, 3); //Coluna, Linha
lcd.write(byte(3));
lcd.write(byte(3));
lcd.write(byte(3));
}
void num_4(){
lcd.setCursor(colunaX, 0); //Coluna, Linha
lcd.write(byte(1));
lcd.print(" ");
lcd.write(byte(1));
lcd.setCursor(colunaX, 1); //Coluna, Linha
lcd.write(byte(2));
lcd.write(byte(1));
lcd.write(byte(2));
lcd.setCursor(colunaX, 2); //Coluna, Linha
lcd.print(" ");
lcd.write(byte(2));
lcd.setCursor(colunaX, 3); //Coluna, Linha
lcd.print(" ");
lcd.write(byte(3));
}
void num_5(){
lcd.setCursor(colunaX, 0); //Coluna, Linha
lcd.write(byte(1));
lcd.write(byte(1));
lcd.write(byte(1));
lcd.setCursor(colunaX, 1); //Coluna, Linha
lcd.write(byte(2));
lcd.write(byte(1));
lcd.write(byte(1));
lcd.setCursor(colunaX, 2); //Coluna, Linha
lcd.print(" ");
lcd.write(byte(2));
lcd.setCursor(colunaX, 3); //Coluna, Linha
lcd.write(byte(3));
lcd.write(byte(3));
lcd.write(byte(3));
}
void num_6(){
lcd.setCursor(colunaX, 0); //Coluna, Linha
lcd.write(byte(1));
lcd.write(byte(1));
lcd.write(byte(1));
lcd.setCursor(colunaX, 1); //Coluna, Linha
lcd.write(byte(2));
lcd.write(byte(1));
lcd.write(byte(1));
lcd.setCursor(colunaX, 2); //Coluna, Linha
lcd.write(byte(2));
lcd.print(" ");
lcd.write(byte(2));
lcd.setCursor(colunaX, 3); //Coluna, Linha
lcd.write(byte(3));
lcd.write(byte(3));
lcd.write(byte(3));
}
void num_7(){
lcd.setCursor(colunaX, 0); //Coluna, Linha
lcd.write(byte(1));
lcd.write(byte(1));
lcd.write(byte(1));
lcd.setCursor(colunaX, 1); //Coluna, Linha
lcd.write(byte(3));
lcd.print(" ");
lcd.write(byte(2));
lcd.setCursor(colunaX, 2); //Coluna, Linha
lcd.print(" ");
lcd.write(byte(2));
lcd.setCursor(colunaX, 3); //Coluna, Linha
lcd.print(" ");
lcd.write(byte(3));
}
void num_8(){
lcd.setCursor(colunaX, 0); //Coluna, Linha
lcd.write(byte(1));
lcd.write(byte(1));
lcd.write(byte(1));
lcd.setCursor(colunaX, 1); //Coluna, Linha
lcd.write(byte(2));
lcd.write(byte(1));
lcd.write(byte(2));
lcd.setCursor(colunaX, 2); //Coluna, Linha
lcd.write(byte(2));
lcd.print(" ");
lcd.write(byte(2));
lcd.setCursor(colunaX, 3); //Coluna, Linha
lcd.write(byte(3));
lcd.write(byte(3));
lcd.write(byte(3));
}
void num_9(){
lcd.setCursor(colunaX, 0); //Coluna, Linha
lcd.write(byte(1));
lcd.write(byte(1));
lcd.write(byte(1));
lcd.setCursor(colunaX, 1); //Coluna, Linha
lcd.write(byte(2));
lcd.write(byte(1));
lcd.write(byte(2));
lcd.setCursor(colunaX, 2); //Coluna, Linha
lcd.print(" ");
lcd.write(byte(2));
lcd.setCursor(colunaX, 3); //Coluna, Linha
lcd.print(" ");
lcd.write(byte(3));
}
void pontilhado(){
//Pontos de separação entre Minutos e Segundos
lcd.setCursor(8, 1); //Coluna, Linha
lcd.write(byte(4));
lcd.setCursor(8, 2); //Coluna, Linha
lcd.write(byte(4));
}
void setup() {
lcd.begin(20, 4);
lcd.createChar(1,d1);
lcd.createChar(2,d2);
lcd.createChar(3,d3);
lcd.createChar(4,ponto);
}
void loop() {
colunaX = 0; //Informa a Posição da Coluna onde sera exibido o Numeral
posicao = unidade; //Informa a posição da Case de arcordo com a contagem da unidade
numeral();
colunaX = 4; //Informa a Posição da Coluna onde sera exibido o Numeral
posicao = dezena; //Informa a posição da Case de arcordo com a contagem da dezena
numeral();
//Pontos de separação entre Minutos e Segundos
pontilhado();
delay(1000); // Pausa de 1 Minuto
dezena++;
if(dezena == 10){
unidade++;
}
if(unidade > 9){
unidade = 0;
}
if(dezena > 9){
dezena = 0;
}
/*
colunaX = 0;
num_8();
colunaX = 4;
num_9();
lcd.setCursor(8, 1);
lcd.print(char(3));
lcd.setCursor(8, 2);
lcd.print(char(3));
colunaX = 10;
num_7();
colunaX = 14;
num_6();
*/
} // *** FIM DO LOOP ***
void numeral() {
switch(posicao)
{
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;
} //end switch
}