Olá amigos!

estou trabalhando no código abaixo, e o problema está no acionamento das chaves S3 e S4 quando acionado está causando interferência nas saídas correspondentes (E2 e E3) que nesse caso as vezes desliga uma e liga a outra com o acionamento de uma unica chave, o que deveria cada chave acionar sua respectiva saída como acontece na S1 e S2 que estão funcionando corretamente. outro comportamento que começou a ocorrer foi depois que adicionei a programação do Debounce delay para as chaves S3 e S4 fazendo as saídas E2 e E3 iniciarem já acionadas, Alguém já passou por isso e pode me dar uma dica! Abraço a todos !!!


//Saídas
int E0 = 2;
int E1 = 3;
int E2 = 4;
int E3 = 5;
int E4 = 6;
int E5 = 7;
int E6 = 8;
int E7 = 9;
int E8 = 10;
int E9 = 11;
int E10 = 12;
int E11 = 13;
int E12 = 14;
int E13 = 15;
int E14 = 16;
int E15 = 17;

//Entradas
const int S1 = 20;
const int S2 = 21;
const int S3 = 22;
const int S4 = 23;
const int S5 = 24;
const int S6 = 25;
const int S7 = 26;
const int S8 = 27;
const int S9 = 28;
const int S10 = 29;
const int S11 = 30;
const int S12 = 31;
const int S13 = 32;
const int S14 = 33;
const int S15 = 34;
const int S16 = 35;

int dado; //variável que receberá os dados da porta serial

//Ajuste de Debounce "S1"
const long DEBOUNCE_DELAY0 = 100;
int leitura_anterior0 = 1; 
int leitura_anterior_db0 = 1;
long time_ultimo_debounce0 = 0;
int debounce_0 = 1;

//Ajuste de Debounce "S2"
const long DEBOUNCE_DELAY1 = 100;
int leitura_anterior1 = 1; 
int leitura_anterior_db1 = 1;
long time_ultimo_debounce1 = 0;
int debounce_1 = 1;

//Ajuste de Debounce "S3"
const long DEBOUNCE_DELAY2 = 100;
int leitura_anterior2 = 1; 
int leitura_anterior_db2 = 1;
long time_ultimo_debounce2 = 0;
int debounce_2 = 1;

//Ajuste de Debounce "S4"
const long DEBOUNCE_DELAY3 = 100;
int leitura_anterior3 = 1; 
int leitura_anterior_db3 = 1;
long time_ultimo_debounce3 = 0;
int debounce_3 = 1;

void setup(){
Serial.begin(9600);//frequência da porta serial
//Saídas
pinMode(E0,OUTPUT);
pinMode(E1,OUTPUT);
pinMode(E2,OUTPUT);
pinMode(E3,OUTPUT);
pinMode(E4,OUTPUT);
pinMode(E5,OUTPUT);
pinMode(E6,OUTPUT);
pinMode(E7,OUTPUT);
pinMode(E8,OUTPUT);
pinMode(E9,OUTPUT);
pinMode(E10,OUTPUT);
pinMode(E11,OUTPUT);
pinMode(E12,OUTPUT);
pinMode(E13,OUTPUT);
pinMode(E14,OUTPUT);
pinMode(E15,OUTPUT);
//Entradas
pinMode(S1,INPUT);
pinMode(S2,INPUT);
pinMode(S3,INPUT);
pinMode(S4,INPUT);
pinMode(S5,INPUT);
pinMode(S6,INPUT);
pinMode(S7,INPUT);
pinMode(S8,INPUT);
pinMode(S9,INPUT);
pinMode(S10,INPUT);
pinMode(S11,INPUT);
pinMode(S12,INPUT);
pinMode(S13,INPUT);
pinMode(S14,INPUT);
pinMode(S15,INPUT);
pinMode(S16,INPUT);

}

void loop(){

botao_0();
}
void botao_0(){
int leitura_atual0 = digitalRead(S1);
if (leitura_atual0 != leitura_anterior0 ) { time_ultimo_debounce0 = millis(); debounce_0 = 0; }
if ( (millis() - time_ultimo_debounce0) > DEBOUNCE_DELAY0 ) { debounce_0 = 1; }

if (debounce_0 = 1){ 
if (leitura_atual0 == 0 && leitura_anterior_db0 == 1){ digitalWrite(E0, !digitalRead(E0)); } 


leitura_anterior_db0 = leitura_atual0; 
}
leitura_anterior0 = leitura_atual0;

botao_1();
}
void botao_1(){
int leitura_atual1 = digitalRead(S2);
if (leitura_atual1 != leitura_anterior1 ) { time_ultimo_debounce1 = millis(); debounce_1 = 0; }
if ( (millis() - time_ultimo_debounce1) > DEBOUNCE_DELAY1 ) { debounce_1 = 0; }

if (debounce_1 = 1){ 
if (leitura_atual1 == 0 && leitura_anterior_db1 == 1){ digitalWrite(E1, !digitalRead(E1)); } 


leitura_anterior_db1 = leitura_atual1; 
}
leitura_anterior1 = leitura_atual1;

botao_2();
}
void botao_2(){
int leitura_atual2 = digitalRead(S3);
if (leitura_atual2 != leitura_anterior2 ) { time_ultimo_debounce2 = millis(); debounce_2 = 0; }
if ( (millis() - time_ultimo_debounce2) > DEBOUNCE_DELAY2 ) { debounce_2 = 0; }

if (debounce_2 = 1){ 
if (leitura_atual2 == 0 && leitura_anterior_db2 == 1){ digitalWrite(E2, !digitalRead(E2)); } 


leitura_anterior_db2 = leitura_atual2; 
}
leitura_anterior2 = leitura_atual2;

botao_3();
}
void botao_3(){
int leitura_atual3 = digitalRead(S4);
if (leitura_atual3 != leitura_anterior3 ) { time_ultimo_debounce3 = millis(); debounce_3 = 0; }
if ( (millis() - time_ultimo_debounce3) > DEBOUNCE_DELAY3 ) { debounce_3 = 0; }

if (debounce_3 = 1){ 
if (leitura_atual3 == 0 && leitura_anterior_db3 == 1){ digitalWrite(E3, !digitalRead(E3)); } 


leitura_anterior_db3 = leitura_atual3; 
}
leitura_anterior3 = leitura_atual3;

delay(10);
if(Serial.available() > 0){ //verifica se existe comunicação com a porta serial
dado = Serial.read();//lê os dados da porta serial
switch(dado){
case 1:
digitalWrite(E0,HIGH); 
break;
case 2:
digitalWrite(E0,LOW); 
break;

case 3:
digitalWrite(E1,HIGH); 
break;
case 4:
digitalWrite(E1,LOW); 
break;

case 5:
digitalWrite(E2,HIGH); 
break;
case 6:
digitalWrite(E2,LOW); 
break;

case 7:
digitalWrite(E3,HIGH);
break;
case 8:
digitalWrite(E3,LOW); 
break;

case 9:
digitalWrite(E4,HIGH); 
break;
case 10:
digitalWrite(E4,LOW); 
break;

case 11:
digitalWrite(E5,HIGH);
break;
case 12:
digitalWrite(E5,LOW);
break;

case 13:
digitalWrite(E6,HIGH); 
break;
case 14:
digitalWrite(E6,LOW);
break;

case 15:
digitalWrite(E7,HIGH);
break;
case 16:
digitalWrite(E7,LOW);
break;

case 17:
digitalWrite(E8,HIGH);
break;
case 18:
digitalWrite(E8,LOW); 
break;

case 19:
digitalWrite(E9,HIGH);
break;
case 20:
digitalWrite(E9,LOW); 
break;

case 21:
digitalWrite(E10,HIGH);
break;
case 22:
digitalWrite(E10,LOW);
break;

case 23:
digitalWrite(E11,HIGH);
break;
case 24:
digitalWrite(E11,LOW); 
break;

case 25:
digitalWrite(E12,HIGH);
break;
case 26:
digitalWrite(E12,LOW); 
break;

case 27:
digitalWrite(E13,HIGH);
break;
case 28:
digitalWrite(E13,LOW); 
break;

case 29:
digitalWrite(E14,HIGH);
break;
case 30:
digitalWrite(E14,LOW); 
break;

case 31:
digitalWrite(E15,HIGH);
break;
case 32:
digitalWrite(E15,LOW); 
break;


case 33:
digitalWrite(E0,HIGH); 
digitalWrite(E1,HIGH);
digitalWrite(E2,HIGH); 
digitalWrite(E3,HIGH); 
digitalWrite(E4,HIGH); 
digitalWrite(E5,HIGH);
digitalWrite(E6,HIGH); 
digitalWrite(E7,HIGH); 
digitalWrite(E8,HIGH); 
digitalWrite(E9,HIGH); 
digitalWrite(E10,HIGH); 
digitalWrite(E11,HIGH);
digitalWrite(E12,HIGH);
digitalWrite(E13,HIGH);
digitalWrite(E14,HIGH);
digitalWrite(E15,HIGH);

break;
case 34:
digitalWrite(E0,LOW); 
digitalWrite(E1,LOW);
digitalWrite(E2,LOW); 
digitalWrite(E3,LOW); 
digitalWrite(E4,LOW); 
digitalWrite(E5,LOW);
digitalWrite(E6,LOW); 
digitalWrite(E7,LOW); 
digitalWrite(E8,LOW); 
digitalWrite(E9,LOW); 
digitalWrite(E10,LOW); 
digitalWrite(E11,LOW);
digitalWrite(E12,LOW); 
digitalWrite(E13,LOW); 
digitalWrite(E14,LOW); 
digitalWrite(E15,LOW); 
break;




}
}
}

Exibições: 380

Responder esta

Respostas a este tópico

Oi IMA, bom dia.

Leia o tópico, http://labdegaragem.com/forum/topics/sugest-o-de-como-postar,

sugiro retirar o seu code da área de texto e anexa-lo como arquivo.

Sugiro também comentar as linhas do seu code.

Rui

Boa tarde Rui!

Obrigado pela ajuda e pelas dicas de postagem, são muito boas, estou já comentando meu código, vou também postar um vídeo do problema que ocorre !

Logo postarei novamente no Forum!

Abraço!

Att: Isaac Moreno

Qual Arduino esta usando?

Caro José Boa tarde!

Obrigado pelo retorno!!, estou utilizando somente o arduino mega 2560 !

Abraço!

Att: Isaac Moreno

Bom dia Pessoal!

Gostaria primeiramente de agradecer pelo apoio de todos, está sendo fundamental para meu desenvolvimento!

Bom estive quebrando o coco e ainda não consegui atingir o objetivo desejado, está quase lá!!!

Objetivo do Projeto:

Realizar acionamentos manuais de dispositivos (Lâmpadas, Motores, etc) utilizando os Push Buttons e a interface criada no Java, de modo que permita ligar ou desligar por qualquer um dos métodos !

Ex: Se eu ligar uma lâmpada pelo push button posso desligar pelo push button ou pelo Java e vice-versa.

Condição atual:

Os acionamentos pelo Java estão todos funcionando, e também os acionamentos do S1 e S2 pelo PushButton.

O problema está nos acionamentos realizados pelo Push Buttons que apresenta problema quando acionado as entradas S3 e S4 de modo que as Saídas E2 e E3 apresentam comportamento inadequado, as vezes liga uma e desliga a outra, liga as duas juntas e está uma bagunça nessas duas saídas somente no acionamento pelo Push Button.

Acredito ser um problema relacionado a programação do Void Loop que deve estar prejudicada por algum fator de tempo do loop, eu estou precisando encontrar um exemplo de projeto que mostrasse como funciona o código de acionamento de vários push buttons cada um acionando sua respectiva saída, se alguém tiver um exemplo vai ajudar muito l!!

Segue em anexo o código do meu projeto comentado para melhor entendimento e estou utilizando o Arduino Mega 2560 para esse projeto!

Abraço a todos e muito obrigado pelo apoio!

Att. Isaac Moreno

 

Anexos

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço