/******************************************************************************* * * Projeto 67: Relógio Digital com Display TM1637 e módulo RTC - Arduino * Author: Angelo Luis Ferreira * Date: 09/16/2019 (mm/dd/AA) * * http://squids.com.br/arduino * *******************************************************************************/ #include #include DS3231 rtc(SDA, SCL); // define modulo rtc TM1637Display display(2,3); // define os pinos 2 com CLK e 3 com DIO uint32_t timer = 0; byte buttonStatus = 0; const byte pinBut = 12; const byte pinPot = A0; // define o símbolo de Grau Celsius (ºC) // - A // | | F B // - G // | | E C // - D const uint8_t DEGREEC[] = { 0x0, 0x0, SEG_A | SEG_B | SEG_G | SEG_F, // Degree Symbol (º) SEG_A | SEG_F | SEG_E | SEG_D, // C }; Time t; int Hor; int Min; int Sec; int temperature; void setup() { Serial.begin(9600); pinMode(pinBut, INPUT_PULLUP); display.setBrightness(7); rtc.begin(); //rtc.setDOW(TUESDAY); // Altere o dia da semana SUNDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY e SATURDAY //rtc.setTime(18, 23, 0); // Altere o tempo (formato de 24horas) //rtc.setDate(24, 1, 2019); // Dia, mês, Ano } void loop() { brilho(); // ajusta brilho dos leds do display // pega valores individuais de hora, nin e sec t = rtc.getTime(); Hor = t.hour; Min = t.min; Sec = t.sec; temperature = round(rtc.getTemp()); // verifica se o botão (pushbutton) está pressionado e muda o status if (!digitalRead(pinBut)) { buttonStatus = !buttonStatus; while (!digitalRead(pinBut)) {} // espera soltar o botão delay(50); } temporizador(buttonStatus); } void temporizador(byte x) { if (millis() - timer >=1000) { Serial.print(Hor); Serial.print(":"); Serial.print(Min); Serial.print(":"); Serial.print(Sec); Serial.print(" | "); Serial.print("Temperatura = "); Serial.println(rtc.getTemp()); if (x == 0) { // Mostra o valor tempo no display (minutos e segundos) // Zera e cria o array position[] para armazenar os valores do cronômetro uint8_t position[] = { 0, 0, 0, 0 }; // Calculo individual para posição no display position[0] = display.encodeDigit(Hor / 10); // Dezena de hora position[1] = display.encodeDigit(Hor % 10); // Unidade de hora position[2] = display.encodeDigit((Min % 60) / 10); // Dezena de minuto position[3] = display.encodeDigit((Min % 60) % 10); // Unidade de hora // Coloca o separador ":" position[1] = position[1] + 128; display.setSegments(position); //Mostra o valor inicial no display display.setSegments(position); } else if (x == 1) { display.setSegments(DEGREEC); //Exibe o valor da variável display.showNumberDec(temperature,false,2,0); // exibe o valor da variável } timer = millis(); // Atualiza a referência } } void brilho() { // Lê valor do potenciômetro (0 a 1023) int valor = analogRead(pinPot); // Converte valor do potenciêmtro para valor de 0 a 7 int potVal = map(valor, 0, 1023, 0, 7); // Ajusta o brilho dos leds (segmentos) entre 0 e 7 display.setBrightness(potVal); }