Eai galera 

 Galera estou com um projeto em andamento , já está quase todo desenvolvido na teoria , mais a unica coisa que está me empatando nesse projeto e um Intertravamento na programação , não estou conseguindo deixar este Intertravamento 100% operante , espero que possam me ajudar ! 

  Quando clico o botão o led se acende e quando clico em outro botão mantendo o primeiro botão prescionado, ao envez do led continuar ligado ele se apaga , ai quando solto o segundo botão mantendo o primeiro prescionado ele volta a se acender. Quero que o led continua acesso mesmo clicando em outros botões .

Programação 

//Declaração das constantes
const int led8 = 8;//constante led refere-se ao pino digital 8.
const int led9 = 9;
const int led10 = 10;
const int led11 = 11;

const int botao2 = 4; //constante botão refere-se ao pino digital 4.
const int botao3 = 5;
const int botao4 = 3;
const int botao5 = 2;
//Declaração da variável que conterá os estados do botão (0 LOW, 1 HIGH).
int estadoBotao2 = 0;
int estadoBotao3 = 0;
int estadoBotao4 = 0;
int estadoBotao5 = 0;

//Método setup, executado uma vez ao ligar o Arduino.
void setup() {
pinMode(led8,OUTPUT); //Definindo o pino digital 8 como de saída.
pinMode(led9,OUTPUT);
pinMode(led10,OUTPUT);
pinMode(led11,OUTPUT);

pinMode(botao2,INPUT); //Definindo o pino digital 2 como pino de entrada.
pinMode(botao3,INPUT);
pinMode(botao4,INPUT);
pinMode(botao5,INPUT);
}

//Método loop, executado enquanto o Arduino estiver ligado.
void loop()
{
//Lendo o estado do pino 2, constante botao, e atribuindo
//o resultado a variável estadoBotao.
estadoBotao2 = digitalRead(botao2);
estadoBotao3 = digitalRead(botao3);
estadoBotao4 = digitalRead(botao4);
estadoBotao5 = digitalRead(botao5);
//Verificando o estado do botão para definir se acenderá ou
//apagará o led.

if (estadoBotao2 == LOW && estadoBotao3 == HIGH && estadoBotao4==HIGH && estadoBotao5== HIGH)
{
digitalWrite(led8,HIGH); //Botão pressionado, acende o led.
digitalWrite(led9,LOW);
digitalWrite(led10,LOW);
digitalWrite(led11,LOW);
}
else
{
digitalWrite(led8,LOW); //Botão não pressionado, apaga o led.
}

if (estadoBotao2 == HIGH && estadoBotao3 == LOW && estadoBotao4==HIGH && estadoBotao5== HIGH)
{
digitalWrite(led8,LOW); //Botão pressionado, acende o led.
digitalWrite(led9,HIGH);
digitalWrite(led10,LOW);
digitalWrite(led11,LOW);
}
else
{
digitalWrite(led9,LOW); //Botão não pressionado, apaga o led.
}

if (estadoBotao2 == HIGH && estadoBotao3 == HIGH && estadoBotao4==LOW && estadoBotao5== HIGH)
{
digitalWrite(led8,LOW); //Botão pressionado, acende o led.
digitalWrite(led9,LOW);
digitalWrite(led10,HIGH);
digitalWrite(led11,LOW);
}
else
{
digitalWrite(led10,LOW); //Botão não pressionado, apaga o led.
}


if (estadoBotao2 == HIGH && estadoBotao3 == HIGH && estadoBotao4==HIGH && estadoBotao5== LOW)
{
digitalWrite(led8,LOW); //Botão pressionado, acende o led.
digitalWrite(led9,LOW);
digitalWrite(led10,LOW);
digitalWrite(led11,HIGH);
}
else
{
digitalWrite(led11,LOW); //Botão não pressionado, apaga o led.
}
}

Exibições: 1938

Responder esta

Respostas a este tópico

Esta apagando porque em nenhum momento vc definiu uma condição prevendo pressionamento de 2 botões. Portanto ele está sendo apagado por um dos Esses ali do sketch

Vc precisaria explicar melhor sobre aquilo que vc deseja.  Vc no texto falou sobre 2 botões apenas,  mas no sketch tem 4 botões. 

Então diga o que vc gostaria que ocorresse nos vários cenários possíveis de pressionamentos 

Estou fazendo uma Placa Eletrônica para algumas Camas Hospitalares , para o Hospital que Trabalho . O controle de acionamento da cama possue 6 comandos, Minha meta do Intertravamento e que seja a Seguinte quando um dos botões estiver prescionado  e por eventualidade o paciente aperte outro botão ou mesmo aperte todos botões mantendo o primeiro acionado ele continue executando o primeiro comando que foi dado , pois ainda o primeiro botão está acionado , que nenhum outro comando influencie no primeiro que esteja acionado . Isso sendo para todos Botões .

Estou fazendo uma Placa Eletrônica para algumas Camas Hospitalares , para o Hospital que Trabalho . O controle de acionamento da cama possue 6 comandos, Minha meta do Intertravamento e que seja a Seguinte quando um dos botões estiver prescionado  e por eventualidade o paciente aperte outro botão ou mesmo aperte todos botões mantendo o primeiro acionado ele continue executando o primeiro comando que foi dado , pois ainda o primeiro botão está acionado , que nenhum outro comando influencie no primeiro que esteja acionado . Isso sendo para todos Botões .

entendi o que precisa. Tente assim:

defina duas variáveis, uma chamada variável chamada "acionado" que recebe valores true ou false

a outra variável vc chamará de "AcionadoPrimeiro" que receberá o número do botão que foi acionado primeiro

dentro do loop, coloque um IF pra checar se acionado está em false. Caso esteja em false, apaga todos os leds

coloque outro IF pra checar se acionado está em false && botãoX está em LOW (=pressionado)

(obviamente vc terá que repetir esse trecho quantas vezes forem necessárias de acordo com a quantidade de botões que vc terá)

dentre desse IF, se o resultado da checagem for verdadeira, defina:

 "AcionadoPrimeiro" = número do botão X; // INFORMA QUAL BOTÃO FOI ACIONADO PRIMEIRO

 "acionado" = true; // INFORMA QUE HÁ ALGUM BOTÃO PRESSIONADO

digitalWrite(ledX,HIGH); // ACENDE O LED X

feche o IF logo em seguida

aí coloque outro IF, agora checando se "acionado" == true &&  digitalRead(botaoX) == HIGH (botão despressionado)

dentro desse IF, caso a condição seja verdadeira, defina

"acionado" = false; // INFORMA QUE NÃO HÁ NENHUM BOTÃO PRESSIONADO

 "AcionadoPrimeiro" = ""; // APAGA A INFORMAÇÃO DE QUAL BOTÃO FOI ACIONADO PRIMEIRO

digitalWrite(ledX,LOW); //DESLIGA O LED X

tentei te passar a idéia, com a lógica a ser seguida... a programação é contigo

teste aí e veja se funciona

Perdão pelo o encomodo novamente !

Mais ainda estou com duvida , em relação a essa questão não consegui por em pratica o que vc me passou , poderia exemplificar ! 

Grato !

coloque pra gente ver o seu novo sketch com a aplicação desse conceito que eu te sugeri. Assim daria pra percebermos onde foi que vc errou

Minha meta e a seguinte e fazer um intertravamento dos botões . Quando um dos botões estiver acionado ele aciona um led , se por acaso eu aperta outro botão mantendo este primeiro botão acionado ele continue com o msm led acionado , e se por acaso eu apertar todos botões mantendo este primeiro botão acionado ele continue com o mesmo led acesso , que nenhum botão influencie na função de outro quando estiver acionado .  

 Com esse programa abaixo , quando aciono um botão ele aciona o led , mais se por acaso eu acionar outro botão mantendo o primeiro acionado ele apaga o LED , quando solto o segundo botão mantendo o primeiro botão acionado ele volta a acender o led .

//Declaração das constantes
const int led8 = 8;//constante led refere-se ao pino digital 8.
const int led9 = 9;
const int led10 = 10;
const int led11 = 11;

const int botao2 = 4; //constante botão refere-se ao pino digital 2.
const int botao3 = 5;
const int botao4 = 6;
const int botao5 = 7;
//Declaração da variável que conterá os estados do botão (0 LOW, 1 HIGH).
int estadoBotao2 = 0;
int estadoBotao3 = 0;
int estadoBotao4 = 0;
int estadoBotao5 = 0;

//Método setup, executado uma vez ao ligar o Arduino.
void setup()
{
pinMode(led8,OUTPUT); //Definindo o pino digital 8 como de saída.
pinMode(led9,OUTPUT);
pinMode(led10,OUTPUT);
pinMode(led11,OUTPUT);

pinMode(botao2,INPUT); //Definindo o pino digital 2 como pino de entrada.
pinMode(botao3,INPUT);
pinMode(botao4,INPUT);
pinMode(botao5,INPUT);
}

//Método loop, executado enquanto o Arduino estiver ligado.
void loop()
{
//Lendo o estado do pino 2, constante botao, e atribuindo
//o resultado a variável estadoBotao.
estadoBotao2 = digitalRead(botao2);
estadoBotao3 = digitalRead(botao3);
estadoBotao4 = digitalRead(botao4);
estadoBotao5 = digitalRead(botao5);
//Verificando o estado do botão para definir se acenderá ou
//apagará o led.

// QUANDO ACIONAR O BOTÃO2 ELE LIGA O LED8
if (estadoBotao2 == LOW && estadoBotao3 == HIGH && estadoBotao4 == HIGH && estadoBotao5 == HIGH)
{
digitalWrite(led8,HIGH); //Botão pressionado, acende o led.
digitalWrite(led9,LOW);
digitalWrite(led10,LOW);
digitalWrite(led11,LOW);
}
else
{
digitalWrite(led8,LOW); //Botão não pressionado, apaga o led.
}

if (estadoBotao2 == HIGH && estadoBotao3 == LOW && estadoBotao4 == HIGH && estadoBotao5 == HIGH)
{
digitalWrite(led8,LOW);
digitalWrite(led9,HIGH);//Botão pressionado, acende o led.
digitalWrite(led10,LOW);
digitalWrite(led11,LOW);
}
else
{
digitalWrite(led9,LOW); //Botão não pressionado, apaga o led.
}

if (estadoBotao2 == HIGH && estadoBotao3 == HIGH && estadoBotao4 == LOW && estadoBotao5 == HIGH)
{
digitalWrite(led8,LOW);
digitalWrite(led9,LOW);
digitalWrite(led10,HIGH);//Botão pressionado, acende o led.
digitalWrite(led11,LOW);
}
else
{
digitalWrite(led10,LOW); //Botão não pressionado, apaga o led.
}


if (estadoBotao2 == HIGH && estadoBotao3 == HIGH && estadoBotao4 == HIGH && estadoBotao5 == LOW)
{
digitalWrite(led8,LOW);
digitalWrite(led9,LOW);
digitalWrite(led10,LOW);
digitalWrite(led11,HIGH);//Botão pressionado, acende o led.
}
else
{
digitalWrite(led11,LOW); //Botão não pressionado, apaga o led.
}

}

esse sketch é praticamente idêntico ao origialmente postado por vc na abertura desse tópico

imaginei que vc ao menos tentou aplicar o conceito que te expliquei

abandone a idéia de checar diversos botões dentro de um mesmo IF... não é por esse caminho que vc deve ir

é necessário vc informar o sketch quando algum botão for pressionado. Dessa forma, estando algum botão pressionado, quaisquer outros pressionamentos serão ignorados. 

Poise Campeão , para mim o maior problema está sendo aplicar este sketch nos botões !  Quando fazia Mecatrônica lembro que fizemos algo parecido fazendo um intertravamento de 4 botões , tentei achar o projeto em meus arquivos mais não consegui, to que meio desesperado para concluir este projeto e vê-lo funcionar perfeitamente !

 Espero que possa me explica de uma forma melhor de como fazer o intertravamento dos botoes!

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço