pessoal eu tenho um botão
é simples o que quero fazer é
o led piscar quando o botão for apertado e apagar quando for apertado novamente
estou usando o debounce
e tb este comando:
int switchPin = 2;
int ledPin = 13;
boolean lastButton = LOW;//variável representando o último estado do botão
boolean ledOn = false;//variável representando o estado do LED
void setup() { pinMode(switchPin, INPUT);
pinMode(ledPin, OUTPUT);
Serial.begin(9600); }
void setup()
{
pinMode(switchPin, INPUT);
pinMode(ledPin, OUTPUT);
Serial.begin(9600);
}
void loop()
{
Serial.println(digitalRead(switchPin));
if (digitalRead(switchPin) == HIGH && lastButton == LOW)
{ //se último estado do botão éra "baixo" e a leitura atual do botão indica "alto"
ledOn = !ledOn; //inverte estado do LED
lastButton = HIGH; //coloca último estado do botão como "alto"
}
else //caso contrário:
{
//lastButton = LOW; //coloca último estado do botão como "baixo"
lastButton = digitalRead(switchPin); //coloca o valor atual do botão na variável de último estado do botão
}
digitalWrite(ledPin, ledOn); //escreve o valor de estado do LED no pino referente
mas em nenhum dos dois, depois de que se lê que o botão esta em "HIGH", eu consigo executar um comando edepois desativa-lo quando o botão for apertado novamente
somente consigo apertar o botão e fazer o led piscar
p sempre
se eu aperto denovo não para
Tags:
## o primeiro erro que verifiquei de cara foi na linha
boolean lastButton = LOW;//variável representando o último estado do botão
muda o LOW para false
###
Bom, eu faria da seguinte forma
####
/* Botão de ativação
(C) João Carlos Pandolfi Santana
2013 - Laboratório de Garagem */
int switchPin = 2;
int ledPin = 13;
boolean lastButton = false;//variável de controle
boolean ledOn = false;//variável representando o estado do LED
void setup() { pinMode(switchPin, INPUT);
pinMode(ledPin, OUTPUT);
Serial.begin(9600); }
void setup()
{
pinMode(switchPin, INPUT);
pinMode(ledPin, OUTPUT);
Serial.begin(9600);
}
void loop()
{
Serial.println(digitalRead(switchPin));
//verifico se o botao foi apertado
if (digitalRead(switchPin) == HIGH)
{
//verifico o estado anterior do botao e seto novo estado para o led
if(!lastButton)
ledOn = true;
else
ledOn = false;
}
//quando o botão for solto
else{
//verifico o ultimo estado setado para o botão e o led e seto estado anterior do botão
if(!lastButton && ledOn)
lastButton = true;
else if(lastButton && !ledOn)
lastButton = false;
}
digitalWrite(ledPin, ledOn);
}
Certo, então quanto ao debounce funcionar, eu consegui, a minha dúvida é, eu não quero só inverter o estado do led, eu quero indicar um loop, que por exeplo é o led piscar.
usa um while com o parametro ledOn
e esse codigo dentro
if (digitalRead(switchPin) == HIGH)
{
//verifico o estado anterior do botao e seto novo estado para o led
if(!lastButton)
ledOn = true;
else
ledOn = false;
}
//quando o botão for solto
else{
//verifico o ultimo estado setado para o botão e o led e seto estado anterior do botão
if(!lastButton && ledOn)
lastButton = true;
else if(lastButton && !ledOn)
lastButton = false;
}
fica
while(ledOn){
if (digitalRead(switchPin) == HIGH)
{
//verifico o estado anterior do botao e seto novo estado para o led
if(!lastButton)
ledOn = true;
else
ledOn = false;
}
//quando o botão for solto
else{
//verifico o ultimo estado setado para o botão e o led e seto estado anterior do botão
if(!lastButton && ledOn)
lastButton = true;
else if(lastButton && !ledOn)
lastButton = false;
}
// comando que vai se repetir
}
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por