/******************************************************************************* * * Projeto 65: Contagem regressiva de tempo com display TM1637 e Arduino * Autor: Angelo Luis Ferreira * * http://squids.com.br/arduino * *******************************************************************************/ #include TM1637Display display(2,3); // define os pinos 2 com CLK e 3 com DIO byte pinBut =12; byte pinPot = A0; int tempo; byte ini = 0; uint32_t temporizador = 0; void setup(){ pinMode(pinBut, INPUT_PULLUP); Serial.begin(9600); display.setBrightness(7); Serial.print("Digite o tempo inicial em segundos: "); } void loop() { brilho(); // ajusta brilho dos leds do display // verifica se o botão (pushbutton) está pressionado e muda o controle if (!digitalRead(pinBut)) { ini = !ini; // inverte valor da variável ini while (!digitalRead(pinBut)) { } //esperera soltar o botão delay(50); } // Aguarda digitar tempo em segundos if(tempo == 0) { ini = 0; } if (ini==0) { // Digitando o valor inicial do cronômetro char s; String n; if(Serial.available()>0){ for( int i = 0; i<5; i++){ s = Serial.read(); n = n + s; } tempo = n.toInt(); Serial.println(tempo); Serial.print("Digite o tempo inicial em segundos: "); } } // Ativa o cronometro regressivo if (ini == 1) { if (millis() - temporizador >= 1000) { tempo = tempo - 1; temporizador = millis(); } } // 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((tempo / 60) / 10); // Dezena de minuto position[1] = display.encodeDigit((tempo / 60) % 10); // Unidade de minuto position[2] = display.encodeDigit((tempo % 60) / 10); // Dezena de segundo position[3] = display.encodeDigit((tempo % 60) % 10); // Unidade de segundo // Coloca o separador ":" position[1] = position[1] + 128; display.setSegments(position); //Mostra o valor inicial no display display.setSegments(position); } 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); }