# Código cronômetro + buzzer

**URL:** <https://forum.fazedores.com/t/codigo-cronometro-buzzer/7052>\
**Category:** Arduino\
**Created:** [Janeiro 22, 2020, 11:47pm UTC](https://forum.fazedores.com/t/codigo-cronometro-buzzer/7052 "2020-01-22T23:47:52Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![viniciusglit](https://avatars.discourse-cdn.com/v4/letter/v/53a042/32.png) [@viniciusglit](https://forum.fazedores.com/u/viniciusglit)\
**Post date:** [Janeiro 22, 2020, 11:47pm UTC](https://forum.fazedores.com/t/codigo-cronometro-buzzer/7052/1 "2020-01-22T23:47:52Z")

</div>

Boa noite pessoal, estou com o seguinte código de um cronômetro para controlar o tempo de um conjunto de led’s aceso e eu gostaria de adicionar um buzzer quando o tempo (sprintDuration) acabasse, mas não estou conseguindo inserir esse comando no código.

Alguém tem alguma dica de como fazer isso?

Obrigado!

#include \<TM1637Display.h\> // Tm1637 module

const int buttonPin = 1;  
const int clock = 2;  
const int data = 3;  
const uint8\_t ledPin = 12;  
uint8\_t digits = { 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f };

void setup()  
{  
pinMode(buttonPin, INPUT);  
pinMode(clock, OUTPUT);  
pinMode(data, OUTPUT);  
pinMode(ledPin, OUTPUT);  
setupInterrupt();  
start();  
writeValue(0x8f);  
stop();  
write(0x00, 0x00, 0x00, 0x00);  
}

byte tcnt2;  
unsigned long time = 0;

void setupInterrupt()  
{  
TIMSK2 &= ~(1\<\<TOIE2);  
TCCR2A &= ~((1\<\<WGM21) | (1\<\<WGM20));  
TCCR2B &= ~(1\<\<WGM22);  
ASSR &= ~(1\<\<AS2);  
TIMSK2 &= ~(1\<\<OCIE2A);  
TCCR2B |= (1\<\<CS22) | (1\<\<CS20);  
TCCR2B &= ~(1\<\<CS21);  
tcnt2 = 131;  
TCNT2 = tcnt2;  
TIMSK2 |= (1\<\<TOIE2);  
}  
ISR(TIMER2\_OVF\_vect) {  
TCNT2 = tcnt2;  
if(time \> 0)  
{  
time–;  
}  
}

void loop()  
{  
handleButton();  
displayTime();  
}  
void handleButton()  
{  
const unsigned long sprintDuration = 10000; // alterar o tempo (ms) aqui, adicionar 1 segundo para correção.  
static uint8\_t previousButtonState = LOW;

uint8\_t buttonState = digitalRead(buttonPin);  
if(buttonState == LOW && previousButtonState == HIGH)  
{  
time = sprintDuration;  
//delay(500);  
}  
previousButtonState = buttonState;

}  
void displayTime()  
{  
unsigned long t = (unsigned long)(time/1000);  
uint8\_t minutes = (byte)((t / 60) % 60);  
uint8\_t seconds = (byte)(t % 60);  
if(t \> 0)  
{  
digitalWrite(ledPin, HIGH);  
}  
else  
{  
digitalWrite(ledPin, LOW);  
}  
write(digits[minutes / 10], digits[minutes % 10] | ((seconds & 0x01) \<\< 7) , digits[seconds / 10], digits[seconds % 10]);  
}  
void write(uint8\_t first, uint8\_t second, uint8\_t third, uint8\_t fourth)  
{  
start();  
writeValue(0x40);  
stop();  
start();  
writeValue(0xc0);  
writeValue(first);  
writeValue(second);  
writeValue(third);  
writeValue(fourth);

stop();  
}  
void start(void)  
{  
digitalWrite(clock,HIGH);  
digitalWrite(data,HIGH);  
delayMicroseconds(5);

digitalWrite(data,LOW);  
digitalWrite(clock,LOW);  
delayMicroseconds(5);  
}  
void stop(void)  
{  
digitalWrite(clock,LOW);  
digitalWrite(data,LOW);  
delayMicroseconds(5);

digitalWrite(clock,HIGH);  
digitalWrite(data,HIGH);  
delayMicroseconds(5);

}  
bool writeValue(uint8\_t value)  
{  
for(uint8\_t i = 0; i \< 8; i++)  
{  
digitalWrite(clock, LOW);  
delayMicroseconds(5);  
digitalWrite(data, (value & (1 \<\< i)) \>\> i);  
delayMicroseconds(5);  
digitalWrite(clock, HIGH);  
delayMicroseconds(5);  
}  
digitalWrite(clock,LOW);  
delayMicroseconds(5);  
pinMode(data,INPUT);  
digitalWrite(clock,HIGH);  
delayMicroseconds(5);  
bool ack = digitalRead(data) == 0;  
pinMode(data,OUTPUT);  
return ack;  
}
