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;
}
}
}
Tags:
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
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por