/******************************************************************************* * * Projeto 64: Cronômetro com display TM1637 e Arduino * Referência: Usina info * Adaptado por: Angelo Luis Ferreira * * http://squids.com.br/arduino * *******************************************************************************/ #include // Inclui a biblioteca TM1637Display const byte CLK = 2; // Define pino 2 como CLK const byte DIO = 3; // Define pino 3 como DIO const byte pinBut = 8; // Define a porta digital 12 para o push button const byte pinPot = A0; // Define a porta analógica A0 para o potenciômetro byte ini = 0; uint32_t temporizador = 0; uint32_t timer = 0; uint32_t t = 0; // Para configurações personalizadas junto ao display de 7 segmentos // utiliza-se o seguinte esquema, no qual cada letra representa um segmento: // - A // | | F B // - G // | | E C // - D // Anagrama SASA (S -Squids e A - Arduino) - usando a biblioteca TM167 // tipo uint8_t - tipo de dado requisitado pela biblioteca const uint8_t SASA[] = { SEG_A | SEG_F | SEG_G | SEG_C | SEG_D, // S SEG_A | SEG_F | SEG_B | SEG_G | SEG_C | SEG_C | SEG_E | SEG_DP, // A: SEG_A | SEG_F | SEG_G | SEG_C | SEG_D, // S SEG_A | SEG_F | SEG_B | SEG_G | SEG_C | SEG_C | SEG_E, // A }; // Cria o objeto "display" da biblioteca TM1637 TM1637Display display(CLK, DIO); void setup() { pinMode(pinBut, INPUT_PULLUP); // Habilita o pull up interno do Arduino pinMode(pinPot, INPUT); // Define pin potenciômetro com entrada do Arduino } void loop() { brilho(); // Chama a função brilho() - ajuste brilho segmentos 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); } if (ini==0) { anagrama(); // Chama a função anagrama() se ini=0 } // Cria o array position[] para armazenar os valores do cronômetro uint8_t position[] = { 0, 0, 0, 0 }; // Armazena em segundos o tempo ligado do Arduino timer = (millis() - t) / 1000; // Calculo individual para posição no display position[0] = display.encodeDigit((timer / 60) / 10); // Dezena de minuto position[1] = display.encodeDigit((timer / 60) % 10); // Unidade de minuto position[2] = display.encodeDigit((timer % 60) / 10); // Dezena de segundo position[3] = display.encodeDigit((timer % 60) % 10); // Unidade de segundo //Mostra os valores no display display.setSegments(position); // atualiza a cada 0,25 segundos e coloca ":" if ((millis() - (temporizador)) >= 250) { // Variável para inclusão do sinal ":" entre min e seg position[1] = position[1] + 128; display.setSegments(position); temporizador = millis(); // Atualiza a referência } } void anagrama() { // Ajusta o brilho para o anagrama display.setBrightness(3); // Imprime o anagrama SASA no display display.setSegments(SASA); // Aguarda pressionar o botão while(digitalRead(pinBut)) { } // espera apertar o botão while (!digitalRead(pinBut)) { } //esperera soltar o botão delay(50); t = millis(); temporizador = millis(); ini = !ini; } 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); }