estou fazendo um código que funcionará da seguinte maneira, são tres botões de pressão os dois primeiros comando um led ao apertar ele acende um led, ao apertar de novo ele apaga o led, são dois assim, o terceiro botão seria um reset ao pressioná-lo ele apagaria todos os leds que estiverem acesos, escrevi o código abaixo, só que o reset não consigo fazer, onde está o erro? Alguém pode me ajudar:
int led = 11;
int led2 = 12;
int botao = 7;
int botao2 = 6;
int botaor = 5;
int var=0;
int var2=0;
int var3=0;
int var4=0;
int varr=0;
int varr2=0;
Ola colega.Olhando para o teu codigo fico todo baralhado e aposto que até tu para o entenderes deves ter de estar com muita atençao.
int var=0;
int var2=0;
int var3=0;
int var4=0;
int varr=0;
int varr2=0;
int estado=0;
int estado2=0;
int estador=0;
Porque nao dares nomes mais sugestivos as tuas variaveis?
Quanto tento decifrar o teu erro dame um nó no cerebro ...
Em todo o caso penso que para o que pretendes é super simples fazer algo mais simples pra esse programa
Estas a prever o debouncing dos botoes?
Como ligas-te os teus botoes ao micro?
#define LED1 11
#define LED2 12
#define BOTAO_LED_1 7
#define BOTAO_LED_2 6
#define BOTAO_RESET 5
bool estadoBotaoLed1=false;
bool estadoBotaoLed2=false;
bool estadoBotaoReset=false;
void setup()
{
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
pinMode(BOTAO_LED_1, INPUT);
pinMode(BOTAO_LED_2, INPUT);
pinMode(BOTAO_RESET, INPUT);
//Configurar os pull-ups internos nos pinos de entrada pra prever o pino "flutuar"
digitalWrite(BOTAO_LED_1,HIGH);
digitalWrite(BOTAO_LED_2,HIGH);
digitalWrite(BOTAO_RESET,HIGH);
}
void loop()
{
if (digitalRead(BOTAO_LED_1) == LOW)
{
//Alguem pressionou o botao do LED1 entao vamos vamos fazer o debouncing dele
delay(100);//Aguardamos 100 ms e voltamos a verificar o estado do botao.
if(digitalRead(BOTAO_LED_1) == LOW)//Se ainda estiver low entao quer dizer que um ser humano o primiu
{
estadoBotaoLed1 = true;//Setamos a flag que o botao esta true= pressionado
digitalWrite(LED1,HIGH);//Ligas o teu led
}
}
if (digitalRead(BOTAO_RESET) == LOW)
{
//Alguem pressionou o botao do reset entao vamos vamos fazer o debouncing dele
delay(100);//Aguardamos 100 ms e voltamos a verificar o estado do botao.
if(digitalRead(BOTAO_RESET) == LOW)//Se ainda estiver low entao quer dizer que um ser humano o primiu
{
estadoBotaoReset = true;//Setamos a flag que o reset esta true= pressionado
botaoResetPressionado();//Chamamos a funçao que reseta tudo
}
}
}
void botaoResetPressionado()
{
//Se o botao de reset foi pressionado entao vamos resetar todos os estados e apagar todos os leds
estadoBotaoLed1 = false;
estadoBotaoLed2 = false;
estadoBotaoReset =false;
digitalWrite(LED1,LOW);//Apagamos o LED1
digitalWrite(LED2,LOW);//Apagamos o LED2
}
Aqui tens um bocado de como podes ter o codigo mais facil de manter.
Nao faz tudo o que queres pois esse é o teu trabalho de casa
Tens no entanto o esqueleto para isso funcionar.
Nao testei o codigo por isso se encontrares falhas tenta resolver
Bom ano
O botoes têm de estar ligados assim
5V-----|///|----/ -----GND
|
|
Pino que le o botao
bool é um tipo de dados booleano ou seja representa verdade ou falso.Verdade é todo o valor diferente de zero e falso é o valor 0.
Eu uso os para representar estados, se está ligado ou não, se algo é verdade ou falso.
No código que te passei basicamente quero marcar o estado do botão, será verdadeiro quando o botão for pressionado e falso quando ninguém o pressionar.