Bom dia pessoal, estou fazendo uma automação para indicar qual chave esta ligada de um painel. Tenho 4 chaves e um display de 7 segmentos, ao acionar chave 1 envia o sinal para o arduino e aparece 1 no display, e assim até a chave 4.

O problema que estou tendo é que no meio do caminho se desativo uma chave, não volta para o estado anterior. Se chego na chave 4 posso desativar tudo e permanece o display indicando 4. 

Alguém pode me ajudar?

//Declaração dos pinos digitais.
int displayA = 7;
int displayB = 8;
int displayC = 9;
int displayD = 10;
int displayE = 11;
int displayF = 12;
int displayG = 13;

int Nivel1 = 2;
int Nivel2 = 3;
int Nivel3 = 4;
int Nivel4 = 5;

int estadoNivel1 = 0;
int estadoNivel2 = 0;
int estadoNivel3 = 0;
int estadoNivel4 = 0;

//Declaração da variável que possuirá os estados das chaves.

//Método setup, executado uma vez assim que o Arduino é ligado.
void setup() {

pinMode(displayA, OUTPUT); //Definindo pino 7 como saída.
pinMode(displayB, OUTPUT); //Definindo pino 8 como saída.
pinMode(displayC, OUTPUT); //Definindo pino 9 como saída.
pinMode(displayD, OUTPUT); //Definindo pino 10 como saída.
pinMode(displayE, OUTPUT); //Definindo pino 11 como saída.
pinMode(displayF, OUTPUT); //Definindo pino 12 como saída.
pinMode(displayG, OUTPUT); //Definindo pino 13 como saída.

pinMode(Nivel1, INPUT); //Definindo pino 2 como entrada.
pinMode(Nivel2, INPUT); //Definindo pino 3 como entrada.
pinMode(Nivel3, INPUT); //Definindo pino 4 como entrada.
pinMode(Nivel4, INPUT); //Definindo pino 5 como entrada.
}

//Método loop, executado enquanto o Arduino estiver ligado.
void loop() {

estadoNivel1 = digitalRead(Nivel1);
estadoNivel2 = digitalRead(Nivel2);
estadoNivel3 = digitalRead(Nivel3);
estadoNivel4 = digitalRead(Nivel4);


if (estadoNivel1 == LOW && estadoNivel2 == LOW && estadoNivel3 == LOW && estadoNivel4 == LOW) { // Ativa número 0 no display

digitalWrite(displayA,HIGH);
digitalWrite(displayB,HIGH);
digitalWrite(displayC,HIGH);
digitalWrite(displayD,HIGH);
digitalWrite(displayE,HIGH);
digitalWrite(displayF,HIGH);
digitalWrite(displayG,LOW);
delay(10);

}
if (estadoNivel1 == HIGH && estadoNivel2 == LOW && estadoNivel3 == LOW && estadoNivel4 == LOW) { // Ativa número 1 no display

digitalWrite(displayA,LOW);
digitalWrite(displayB,HIGH);
digitalWrite(displayC,HIGH);
digitalWrite(displayD,LOW);
digitalWrite(displayE,LOW);
digitalWrite(displayF,LOW);
digitalWrite(displayG,LOW);
}
if (estadoNivel1 == HIGH && estadoNivel2 == HIGH && estadoNivel3 == LOW && estadoNivel4 == LOW) { // Ativa número 2 no display

digitalWrite(displayA,HIGH);
digitalWrite(displayB,HIGH);
digitalWrite(displayC,LOW);
digitalWrite(displayD,HIGH);
digitalWrite(displayE,HIGH);
digitalWrite(displayF,LOW);
digitalWrite(displayG,HIGH);

}
if (estadoNivel1 == HIGH && estadoNivel2 == HIGH && estadoNivel3 == HIGH && estadoNivel4 == LOW) { // Ativa número 3 no display

digitalWrite(displayA,HIGH);
digitalWrite(displayB,HIGH);
digitalWrite(displayC,LOW);
digitalWrite(displayD,HIGH);
digitalWrite(displayE,LOW);
digitalWrite(displayF,LOW);
digitalWrite(displayG,HIGH);

}
if (estadoNivel1 == HIGH && estadoNivel2 == HIGH && estadoNivel3 == HIGH && estadoNivel4 == HIGH) { // Ativa número 4 no display

digitalWrite(displayA,LOW);
digitalWrite(displayB,HIGH);
digitalWrite(displayC,HIGH);
digitalWrite(displayD,LOW);
digitalWrite(displayE,LOW);
digitalWrite(displayF,HIGH);
digitalWrite(displayG,HIGH);

}

}

Exibições: 353

Responder esta

Respostas a este tópico

Vc tem resistencias de 10 k entre as portas digitais ( pin 2,3,4 e 5) ligadas ao GND do Arduino? Isso é importante para manter o nivel da porta em LOW.  Aparentemente o codigo esta certo..

Abraço

sim, coloquei resistores e mesmo assim parece que ele não deixa em LOW ao fazer o loop.

Testei seu código e aparentemente está funcionando corretamente. Após ativar todas as chaves (4), ao desativa a ultima ele retorna para 3 normalmente

A unica coisa que observei foi que se estiver em 4 e você desativar a chave correspondente a 3, 2 ou 1, não irá acontecer nada, mas acredito que isso está dentro das suas especificações certo?

Bacana, isso não irá acontecer, elas irão ativar e desativar na sequencia, você testou em qual arduino? pode ser algum problema no meu arduino ou na minha protoboard.

Foi o que imaginei.
Testei em um arduino uno usando resistores de 10k como pull-down

Testei aqui de novo e deu certo, estava fazendo o pull-down ao contrario. obrigado.

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço