Intertravamento entre dois botões

Procuro informação de como ligar dois botões, sendo que quando o botão 1 acionado e ligando o led o botão 2 não pode ligar o led 2.

botao 1 ==> acionado = liga o led 1;
botão 2 ==> se precionado não pode ligar o led 2 enquanto o led 1 estiver aceso.

Eu já tentei varios comandos, mas não funcionou.

muito grato.

Que tipo de botões são esses? Imaginemos que são botões que ficam no mesmo sítio.

//isto é um código que parece mais complexo do que é, mas é feito assim para veres todos os passos. 
void loop(){
   unsigned char botao1 = digitalRead(PINO1); 
   unsigned char botao2 = digitalRead(PINO2);
   unsigned char led1 = botao1; 
   digitalWrite(PINO_LED1, led1); 
   unsigned char led2 = botao2 && !(botao1); 
   digitalWrite(PINO_LED2, led2); 
   

Agora imaginemos que tens um botão de pulso. Sempre que carregas o LED muda de estado. Aqui vais precisar de algo que guarde o estado do LED para ver se está ligado ou não.

unsigned char led1=0; //guarda o estado do LED. Tem de ser fora da loop porque tem de guardar o valor entre ciclos. 
unsigned char led2=0; //guarda o estado do LED
unsigned char botao1anterior=0; 
unsigned char botao2anterior=0;
void loop() {
   unsigned char botao1 = digitalRead(PINO1); //lê o botão
   unsigned char botao2 = digitalRead(PINO2);
//compara o estado do botão. 
if (botao1 != botao1anterior && botao1 == 0) {
   led1 ^= 1UL << 1; //esta é uma maneira de fazer isto mais... chique. em baixo mostro outra maneira. 
}
//este caso é diferente... aqui queres saber se o led1 está ligado. Para isso podes colocar um if antes. 
if (led1 == 0) { //estou a assumir que 1 = ligado. 
   if (botao2 != botao2anterior && botao2 == 0) {
       (led2 == 0) ? led2 = 1 : led2 = 0; //também funciona. 
   }
}
 digitalWrite(PINO_LED1, led1); 
 digitalWrite(PINO_LED2, led2); 

A maneira mais directa sem saber imenso de C para inverter o bit seria algo como:

if (led2 == 0) led2=1; 
else led2 = 0; 

Mas apeteceu-me pensar um bocado nisto.

Não compilei, mas é bastante provável que o código funcione. Deve haver uns parêntesis mal colocados e tal, mas de certeza que sabes como corrigir.

De qualquer forma, a maneira de fazer isto é colocar o que tentaste fazer e porque não funciona e ajudamos-te dessa forma. Mas eu hoje estou aborrecido e decidi colocar isto aqui.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.