Olá Srs,
Tenho uma questão que não consigo resolver e desejo a ajuda de vocês.
No código abaixo, tenho um botão. Ele funciona bem, porém, quero que a função só seja ativada, somente após o botão ter sido pressionado por 3 segundos ou mais. Caso seja pressionado por menos do que 3 segundos, nada deve acontecer.
Obrigado!!!!
PS: O código não esta lá aquelas coisas, mas quero implementar mais itens.
int Led_red = 5;
int Led_green = 3;
int botao = 4;
void setup()
{
pinMode(Led_red, OUTPUT);
pinMode(Led_green, OUTPUT);
pinMode(botao, INPUT_PULLUP);
digitalWrite(Led_green, HIGH);
}
void loop()
{
int start=digitalRead(botao);
if(start == LOW)
alarma();
if(start == HIGH)
{
digitalWrite(Led_red, LOW);
}
else {
digitalWrite(Led_red, LOW);
}
}
void alarma() {
for (int x=0; x<5; x++)
{
digitalWrite(Led_red, HIGH);
delay(500);
digitalWrite(Led_red, LOW);
delay(500);
}
delay(100);
digitalWrite(Led_red, HIGH);
delay(100);
digitalWrite(Led_red, LOW);
}
Olá!
Veja se este serve.
const byte botao = 4;
unsigned long millis_antes = 0;
void setup()
{
Serial.begin(38400);
pinMode(botao, INPUT_PULLUP);
}
void loop()
{
Serial.println(digitalRead(botao));
if(digitalRead(botao) == false)
{
millis_antes = millis();
}
while(digitalRead(botao) == false)
{
if((millis() - millis_antes) > 3000)
{
Serial.println("Hello!");
}
}
}
Abraço.
Olá Fernando,
Consegui utilizar parte do seu código. Funfou!
Obrigado!
Segue código para quem precise de algo parecido.
int Led_red = 5;
int Led_green = 3;
int botao = 4;
unsigned long millis_antes = 0;
void setup()
{
pinMode(Led_red, OUTPUT);
pinMode(Led_green, OUTPUT);
pinMode(botao, INPUT_PULLUP);
digitalWrite(Led_green, HIGH);
}
void loop()
{
int start=digitalRead(botao);
if(digitalRead(botao) == false)
{
millis_antes = millis();
}
while(digitalRead(botao) == false)
{
if((millis() - millis_antes) > 3000){
alarma();
}
}
}
void alarma() {
for (int x=0; x<5; x++)
{
digitalWrite(Led_red, HIGH);
delay(500);
digitalWrite(Led_red, LOW);
delay(500);
}
delay(100);
digitalWrite(Led_red, HIGH);
delay(100);
digitalWrite(Led_red, LOW);
}
Legal!
Essa linha é inútil.
int start=digitalRead(botao);
Se quiser zerar o "timer" após executar uma vez a função alarma(), adicione um "break" no "while".
if((millis() - millis_antes) > 3000){
alarma();
break;
}
}
Se o número for menor que 256 é melhor usar "const byte" neste caso:
int Led_red = 5;
int Led_green = 3;
int botao = 4;
Abraço.
Acabo de implementar! Pois a coisa acabava funcionando sem contar o tempo 
Obrigado!