1
resposta

Ligar led com botão

Olá, com o conteúdo referente à aula 6, eu tentei escrever um programa em que, apertando o botão, o led azul liga. Mas, independente do estado do botão, o led fica sempre ligado ou sempre desligado. Alguém pode me ajudar?? Aqui está o código:

// ESCREVER UM POGRAMA EM QUE O PRESSIONAMENTO 
// DE UM BOTAO FAZ COM QUE O SEU RESPECTIVO LED 
// LIGUE. NAO ESQUECER INPUT PULLUP!!!!!!!!!!
#define LED_AZUL 2
#define BOTAO_AZUL 8

void setup(){
  Serial.begin(9600);
  pinMode(LED_AZUL, OUTPUT);
  pinMode(BOTAO_AZUL, INPUT_PULLUP);
}
void loop(){
  int estado_BOTAO_AZUL = digitalRead(BOTAO_AZUL);
  Serial.println(estado_BOTAO_AZUL);
  if (estado_BOTAO_AZUL = LOW){
    digitalWrite(LED_AZUL, HIGH);
    delay(1000);
    digitalWrite(LED_AZUL, LOW);
  }
  if (estado_BOTAO_AZUL = HIGH){
    digitalWrite(LED_AZUL, LOW);
    delay(1000);
    digitalWrite(LED_AZUL, HIGH);
  }


}
1 resposta

Oi Matheus, tudo bem?

Perdão pela demora em lhe retornar. Seu código possui um problema de sintaxe e outro de lógica. Vamos ao de sintaxe primeiro. Quando você faz a comparação para saber qual o estado do botão; se é HIGH ou LOW:

 if (estado_BOTAO_AZUL = HIGH)
 if (estado_BOTAO_AZUL = LOW)

Você acaba usando apenas um sinal de igual, mas, para comparar valores, usamos dois sinais de igual. Quando usamos apenas um, é para atribuir um valor a variável. Sendo assim, o correto seria:

if (estado_BOTAO_AZUL == HIGH)
if (estado_BOTAO_AZUL == LOW)

Quanto ao problema de lógica; não há necessidade de deixar o led piscando, pois, como o botão é responsável por fechar o circuito e iremos capturar quando isso ocorrer, basta então deixarmos o led desligado ou ligado a depender de quando pressionarmos o botão.

#define LED_AZUL 2
#define BOTAO_AZUL 8

void setup(){
  Serial.begin(9600);
  pinMode(LED_AZUL, OUTPUT);
  pinMode(BOTAO_AZUL, INPUT_PULLUP);
}
void loop(){
  int estado_BOTAO_AZUL = digitalRead(BOTAO_AZUL);
  Serial.println(estado_BOTAO_AZUL);
  if (estado_BOTAO_AZUL == LOW){
    digitalWrite(LED_AZUL, HIGH);
  }
  if (estado_BOTAO_AZUL == HIGH){
    digitalWrite(LED_AZUL, LOW);
  }

}

Confira também se suas ligações físicas estão corretas:

alura_exemplo

Qualquer dúvida, estou a disposição. Espero ter ajudado. Abraços e bons estudos!