Código
código Arduino
// Programa:Display LCD 128x64 e RTC DS3231 // Autor:Arduino e Cia # include #include #include #include #include // A linha abaixo define como conexões para exibição e deve ser // ajustada conforme o modelo usadoU8GLIB_ST7920_128X64_1X u8g (6, 5, 4, 7); // Habilitar, RW, RS, RESETint X2 =0; int Y2 =0; int X3 =0; int Y3 =0; float angulo =0; int posicao =0; int posicaoh =0; int temperatura =0; int min_temp =500; int max_temp =-500; int ScreenWith =128; int ScreenWithC =96; int ScreenHeight =64; int ScreenHeightC =32; #define botao 3int estado_botao =0; char * dia_da_semana [] ={"Dom", "Seg "," Ter "," Quarta "," Qui "," Sex "," Sáb "}; void tela_1 () {u8g.drawRFrame (0, 0, 128, 64, 3); // Mostra temperatura u8g.setPrintPos (20, 30); u8g.print (temperatura); u8g.drawStr (42, 30, "C"); u8g.drawCircle (37, 34, 2); mostra_relogio_digital (); // Mostra relogio analogico fundo_relogio (); // Atualiza Ponteiro de horas desenha_ponteiro (hora () - 1, 12.0, 10); // Atualiza Ponteiro de minutos desenha_ponteiro (minuto () - 5, 60,0, 19); // Atualiza Ponteiro de segundos desenha_ponteiro (second () - 5, 60, 21);} void tela_2 () {u8g.drawRFrame (0, 0, 128, 64, 3); u8g.drawRFrame (68, 4, 55, 56, 2); mostra_relogio_digital (); u8g.setFont (u8g_font_5x8); u8g.drawStr (78, 35, "MIN"); u8g.drawStr (78, 53, "MAX"); u8g.setFont (u8g_font_6x13); u8g.setPrintPos (25, 41); u8g.print (dia_da_semana [(dia da semana () - 1)]); // Mostra temperatura atual u8g.setPrintPos (83, 19); u8g.print (temperatura); u8g.drawStr (105, 19, "C"); u8g.drawCircle (100, 12, 2); // Mostra temperatura mínima u8g.setPrintPos (98, 36); u8g.print (min_temp); u8g.drawCircle (113, 29, 2); // Mostra temperatura maxima u8g.setPrintPos (98, 54); u8g.print (max_temp); u8g.drawCircle (113, 47, 2);} void desenha_ponteiro (float valor, float rotacao, int Radius) {angulo =valor * 2,0 * 3,1415 / rotacao - 1,5707; X2 =Tela com C + Raio * cos (angulo); Y2 =Altura da tela C + Raio * sen (angulo); u8g.drawLine (ScreenWithC, ScreenHeightC, X2, Y2);} void fundo_relogio () {u8g.drawCircle (ScreenWithC, ScreenHeightC, 27); u8g.drawCircle (ScreenWithC, ScreenHeightC, 1); u8g.setFont (u8g_font_6x13); u8g.setFontPosTop (); u8g.drawStr (90, 9, "12"); u8g.drawStr (114, 25, "3"); u8g.drawStr (94, 44, "6"); u8g.drawStr (74, 25, "9"); for (int traco_minuto =0; traco_minuto <12; traco_minuto ++) {// Desenha linhas relogio analogico angulo =traco_minuto / 12.0 * 2 * 3.1415; X2 =Tela com C + 25 * cos (angulo); Y2 =ScreenHeightC + 25 * sin (angulo); X3 =Tela com C + 25 * cos (angulo); Y3 =ScreenHeightC + 25 * sin (angulo); u8g.drawLine (X2, Y2, X3, Y3); }} void mostra_relogio_digital () {// Mostra os dados u8g.setFont (u8g_font_5x8); u8g.setPrintPos (8, 55); u8g.print (dia ()); u8g.drawStr (19, 55, "/"); u8g.setPrintPos (24, 55); u8g.print (mês ()); u8g.drawStr (35, 55, "/"); u8g.setPrintPos (41, 55); u8g.print (ano ()); // Mostra hora e minutos u8g.drawRBox (3, 4, 62, 21,2); u8g.setColorIndex (0); u8g.setFont (u8g_font_fub17); u8g.drawStr (29,21, ":"); // Acerta a posicao do digito caso a hora // seja menor do que 10 if (hour () <10) {u8g.drawStr (3,23, "0"); posicaoh =16; } else posicaoh =3; u8g.setPrintPos (posicaoh, 23); u8g.print (hora ()); // Acerta a posicao do digito caso o minuto // seja menor do que 10 if (minute () <10) {u8g.drawStr (38,23, "0"); posicao =51; } else posicao =38; u8g.setPrintPos (posição, 23); u8g.print (minuto ()); u8g.setColorIndex (1);} void setup () {pinMode (3, INPUT_PULLUP); Serial.begin (9600); if (u8g.getMode () ==U8G_MODE_R3G3B2) u8g.setColorIndex (255); // branco else if (u8g.getMode () ==U8G_MODE_GRAY2BIT) u8g.setColorIndex (3); // intensidade máxima else if (u8g.getMode () ==U8G_MODE_BW) u8g.setColorIndex (1); // pixel em setSyncProvider (RTC.get); Serial < =max_temp) {max_temp =temperatura; } se (temperatura <=min_temp) {min_temp =temperatura; } static time_t tLast; time_t t; tmElements_t tm; // Verifica se foi definido um novo horario // Formato:ano, mes, dia, hora, minuto, segundo if (Serial.available ()> =12) {int y =Serial.parseInt (); if (y> =100 &&y <1000) Serial < =1000) tm.Year =CalendarYrToTm (y); else // (y <100) tm.Year =y2kYearToTm (y); tm.Month =Serial.parseInt (); tm.Day =Serial.parseInt (); tm.Hour =Serial.parseInt (); tm.Minute =Serial.parseInt (); tm.Segundo =Serial.parseInt (); t =makeTime (tm); RTC.set (t); setTime (t); Serial < 0) Serial.read (); }} t =agora (); if (t! =tLast) {tLast =t; printDateTime (t); Serial < 0) Serial < bibliotecas Arduino
Sem visualização (somente download).