Olá amigos!

Estou trabalhando em um projeto didático e não estou conseguindo resolver um problema:

1- A programação está funcionando, posso ligar a Lampada pelo Pushbutton, ou enviando dados pela serial, e também saber se está passando corrente ou não no circuito, caso esteja envia para serial se L1 está ou não Ligado, até aqui tudo bem!

2- Problema, quando vou ligar a Lampada acionando S1 por exemplo, preciso persistir várias vezes pressionando o Pushbutton para conseguir ligar ou desligar, acredito que esse problema está relacionado ao comando de delay ou DEBOUNCE_DELAY que está na programação, estive verificando também que é melhor utilizar o Millis ou uma biblioteca TimerOne, porem já quebrei a cabeça tentando implementar uma das duas funções e não estou conseguindo, seria ótimo se tiverem uma dica para eu conseguir acertar esse problema, Agradeço desde-já!

segue o Código:


//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;

//Sensores
int pinoSensor = A0;

//Variaveis que recebe os dados
int sensorValue_aux = 0;//receberá os dados do sensor
float valorSensor = 0;
float valorCorrente = 0;
float voltsporUnidade = 0.004887586; //5 dividido por 1023
float sensibilidade = 0.066;
int tensao = 127;
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;


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);
//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);
//Sensores
pinMode(pinoSensor, 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 = 0; }

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


leitura_anterior_db0 = leitura_atual0;
}
leitura_anterior0 = leitura_atual0;

for(int i=10000; i>0; i--){
sensorValue_aux=(analogRead(pinoSensor) -511);
valorSensor += pow(sensorValue_aux,2);
}
valorSensor = (sqrt(valorSensor/ 10000)) * voltsporUnidade;
valorCorrente = (valorSensor/sensibilidade);

if(valorCorrente <= 0.095){
valorCorrente = 0;
}
valorSensor = 0;
//Serial.println(valorCorrente);
if(valorCorrente > 0.00){
Serial.println("L1: Ligado");
}else {
Serial.println("L1: Desligado");
}

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(E2, !digitalRead(E2)); }


leitura_anterior_db1 = leitura_atual1;
}
leitura_anterior1 = leitura_atual1;

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(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);
break;
case 26:
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);
break;




}
}
}

 

Exibições: 192

Responder esta

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço