Boa Noite galera.

a duvida é o seguinte:

quando eu aperto o botão acende a led e começa a piscar e quando eu aperto o mesmo botão o led apaga. Só  que quando eu aperto para apagar o led tem que ser no exato momento em que o programa passa do delay(); para a leitura do botão. tem lgum jeito de isso acontecer a qualquer momento do programa?

segue abaixo o sketch

int led=13; // led no pino 13
int botao=12; // botão no pino 12
int var; // valor instantaneo enviado pelo botão
int var2; // valor guardado
int estado=0; // guarda o valor 0 ou 1 (HIGH ou LOW)
void setup()
{
Serial.begin(9600);
pinMode(led,OUTPUT);
pinMode(botao,INPUT);
}
void loop()
{
var=digitalRead(botao); // ler o valor enviado pelo botão: "HIGH" ou "LOW"
if ((var == HIGH) && (var2 == LOW))
{
estado = 1 - estado;
delay(200); // de-bouncing
Serial.println(estado);

}
var2=var;
if (estado == 1) {
digitalWrite(led, HIGH);
delay(1000);
digitalWrite(led, LOW);
delay(1000);
digitalWrite(led, HIGH);
delay(1000);
digitalWrite(led, LOW);
delay(1000);

} else {
digitalWrite(led, LOW); // desliga o led
}

}

Muito Obrigado

Exibições: 2451

Responder esta

Respostas a este tópico

para solucionar o problema vc tem que retira os delay e utiliza por exemplo a função mills()

no site e na ide tem um exemplo http://arduino.cc/en/Tutorial/BlinkWithoutDelay

valeu, vou tentar e depois eu comento

Mais ninguem???
Valeu, não tive tempo pra testar ainda....
Mais a noite eu vejo.....
Valeu

Testa Assim 

int led=13; // led no pino 13
int botao=12; // botão no pino 12
int var; // valor instantaneo enviado pelo botão
int var2; // valor guardado
int estado=0; // guarda o valor 0 ou 1 (HIGH ou LOW)
int ledState = LOW;
unsigned long previousMillis = 0;
void setup()
{
Serial.begin(9600);
pinMode(led,OUTPUT);
pinMode(botao,INPUT_PULLUP);
}
void loop()
{
var=digitalRead(botao); // ler o valor enviado pelo botão: "HIGH" ou "LOW"
if ((var == HIGH) && (var2 == LOW))
{
estado = 1 - estado;
delay(100); // de-bouncing
Serial.println(estado);

}
var2=var;
if (estado == 1) {

unsigned long currentMillis = millis();
if(currentMillis - previousMillis > 1000) {
previousMillis = currentMillis;
if (ledState == LOW){ledState = HIGH;} else { ledState = LOW;}
digitalWrite(led, ledState);
}
} else {
digitalWrite(led, LOW); // desliga o led
}

}

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço