Fórum ARDUINO -Problemas com Código #610737
19/05/2020
0
No Software Arduino, não se contra erros, porém, no Tinkercad, o LED n acende...
const int echoPin = 5; //DEFININDO PINO ECHO
const int trigPin = 4; //DEFININDO PINO TRIGGER
const int Buzzer = 3; //DEFININDO PINO BUZZER
const int Leda = 7; //DEFININDO PINO LED LARANJA
const int Ledb = 6; //DEFININDO PINO LED VERMELHO
float distancia; //VARIÁVEL DO TIPO INTEIRO PARA GUARDAR A DISTANCIA
String result; //VARIÁVEL DO TIPO STRING PARA GUARDAR RESULTADO DO CALCULO
float tempo;
void setup(){
pinMode(echoPin, INPUT); //DEFINE O PINO COMO ENTRADA (RECEBE)
pinMode(trigPin, OUTPUT); //DEFINE O PINO COMO SAIDA (ENVIA)
Serial.begin(9600); //INICIALIZA A PORTA SERIAL
pinMode(Buzzer, OUTPUT);//DEFINE O BUZZER COMO SAIDA(ENVIA)
pinMode (Leda, OUTPUT); //DEFINE LED1 COMO SAIDA
pinMode (Ledb, OUTPUT); //DEFINE LED2 COMO SAIDA
}
void loop(){
CalcDist(); // FAZ A CHAMADA DO MÉTODO PARA CALCULAR A DISTANCIA
Serial.print("Distancia "); //IMPRIME O TEXTO NO MONITOR SERIAL
Serial.print(result); ////IMPRIME NO MONITOR SERIAL A DISTÂNCIA MEDIDA
Serial.println("cm"); //IMPRIME O TEXTO NO MONITOR SERIAL
if(distancia >25){
// Aciona o buzzer na frequencia relativa ao Dó em Hz
tone(Buzzer,261);
// Espera um tempo para Desativar
delay(200);
//Desativa o buzzer
noTone(Buzzer);
// Aciona o buzzer na frequencia relativa ao Ré em Hz
tone(Buzzer,293);
delay(200);
noTone(Buzzer);
// Aciona o buzzer na frequencia relativa ao Mi em Hz
tone(Buzzer,329);
delay(200);
noTone(Buzzer);
// Aciona o buzzer na frequencia relativa ao Fá em Hz
tone(Buzzer,349);
delay(200);
noTone(Buzzer);
// Aciona o buzzer na frequencia relativa ao Sol em Hz
tone(Buzzer,392);
delay(200);
noTone(Buzzer);
digitalWrite(Leda, LOW);
delay(100);
digitalWrite(Ledb,HIGH);
}else{
digitalWrite(Leda, HIGH);
delay(100);
digitalWrite(Ledb,LOW);
}
}
//MÉTODO RESPONSÁVEL POR CALCULAR A DISTÂNCIA
void CalcDist(){
digitalWrite(trigPin, HIGH);
delay(2);
digitalWrite(trigPin, LOW);
delay(10);
tempo = pulseIn(echoPin, HIGH);
digitalWrite(echoPin, LOW);
//CONTA PARA DESCOBRIR A DISTANCIA EM CM
distancia = tempo / 29.4 / 2; //VARIÁVEL GLOBAL RECEBE O VALOR DA DISTÂNCIA MEDIDA
result = String(distancia); //VARIÁVEL GLOBAL DO TIPO STRING RECEBE A DISTÂNCIA(CONVERTIDO DE INTEIRO PARA STRING)
delay(100); //INTERVALO DE 500 MILISSEGUNDOS
}
Guilherme Dias
Curtir tópico
+ 0
Responder
Posts
22/05/2020
Emerson Nascimento
qual led não acende?
nos testes que eu fiz, só acende o Leda.
porque?
porque o valor retornardo por pulseIn(echoPin, HIGH) é muitíssimo baixo.
daí você pega esse retorno e divide por 29.4 e depois divide por 2. sempre será um numero igual a zero ou muito próximo de zero.
desta forma, sempre vai entrar no else.
faça um teste utilizando números aleatórios e você verá que o código funciona. por exemplo:
note que a tua rotina está praticamente intacta.
somente fiz o tratamento do número aleatório e alterei o cálculo da distância, de modo a usar o conteúdo de randNumber.
OBS: isso tudo supondo que as conexões estejam corretas no ThinkerCad.
nos testes que eu fiz, só acende o Leda.
porque?
porque o valor retornardo por pulseIn(echoPin, HIGH) é muitíssimo baixo.
daí você pega esse retorno e divide por 29.4 e depois divide por 2. sempre será um numero igual a zero ou muito próximo de zero.
desta forma, sempre vai entrar no else.
// esta condição nunca será atendida, ao menos na simulação do ThinkerCad
// para entrar no if o retorno de pulseIn() precisa ser ao menos 1535 (1535/29.4/2=26)
if (distancia >25) {
[....]
}
} else { // sempre vai entrar aqui, porque o valor retornado por pulseIn() é muito baixo
digitalWrite(Leda, HIGH);
delay(100);
digitalWrite(Ledb,LOW);
}faça um teste utilizando números aleatórios e você verá que o código funciona. por exemplo:
const int echoPin = 5; //DEFININDO PINO ECHO
const int trigPin = 4; //DEFININDO PINO TRIGGER
const int Buzzer = 3; //DEFININDO PINO BUZZER
const int Leda = 7; //DEFININDO PINO LED LARANJA
const int Ledb = 6; //DEFININDO PINO LED VERMELHO
float distancia; //VARIÁVEL DO TIPO INTEIRO PARA GUARDAR A DISTANCIA
String result; //VARIÁVEL DO TIPO STRING PARA GUARDAR RESULTADO DO CALCULO
float tempo;
long randNumber; // VARIÁVEL QUE VAI RECEBER UM NÚMERO ALEATÓRIO
void setup(){
pinMode(echoPin, INPUT); //DEFINE O PINO COMO ENTRADA (RECEBE)
pinMode(trigPin, OUTPUT); //DEFINE O PINO COMO SAIDA (ENVIA)
Serial.begin(9600); //INICIALIZA A PORTA SERIAL
pinMode(Buzzer, OUTPUT);//DEFINE O BUZZER COMO SAIDA(ENVIA)
pinMode (Leda, OUTPUT); //DEFINE LED1 COMO SAIDA
pinMode (Ledb, OUTPUT); //DEFINE LED2 COMO SAIDA
randomSeed(analogRead(0)); // INICIALIZA O GERADOR DE NÚMEROS PSEUDO-ALEATÓRIOS
}
void loop(){
CalcDist(); // FAZ A CHAMADA DO MÉTODO PARA CALCULAR A DISTANCIA
Serial.print("Distancia "); //IMPRIME O TEXTO NO MONITOR SERIAL
Serial.print(result); ////IMPRIME NO MONITOR SERIAL A DISTÂNCIA MEDIDA
Serial.println("cm"); //IMPRIME O TEXTO NO MONITOR SERIAL
if (distancia > 25) {
// Aciona o buzzer na frequencia relativa ao Dó em Hz
tone(Buzzer,261);
// Espera um tempo para Desativar
delay(200);
//Desativa o buzzer
noTone(Buzzer);
// Aciona o buzzer na frequencia relativa ao Ré em Hz
tone(Buzzer,293);
delay(200);
noTone(Buzzer);
// Aciona o buzzer na frequencia relativa ao Mi em Hz
tone(Buzzer,329);
delay(200);
noTone(Buzzer);
// Aciona o buzzer na frequencia relativa ao Fá em Hz
tone(Buzzer,349);
delay(200);
noTone(Buzzer);
// Aciona o buzzer na frequencia relativa ao Sol em Hz
tone(Buzzer,392);
delay(200);
noTone(Buzzer);
digitalWrite(Leda, LOW);
delay(100);
digitalWrite(Ledb,HIGH);
} else {
digitalWrite(Leda, HIGH);
delay(100);
digitalWrite(Ledb,LOW);
}
}
//MÉTODO RESPONSÁVEL POR CALCULAR A DISTÂNCIA
void CalcDist(){
digitalWrite(trigPin, HIGH);
delay(2);
digitalWrite(trigPin, LOW);
delay(10);
tempo = pulseIn(echoPin, HIGH);
randNumber = random(2000); // OBTÉM UM NÚMERO ALEATÓRIO DE 0 A 2000.
digitalWrite(echoPin, LOW);
//CONTA PARA DESCOBRIR A DISTANCIA EM CM
distancia = randNumber / 29.4 / 2; //VARIÁVEL GLOBAL RECEBE O VALOR DA DISTÂNCIA MEDIDA - UTILIZA randNumber NO LUGAR DE tempo
result = String(distancia); //VARIÁVEL GLOBAL DO TIPO STRING RECEBE A DISTÂNCIA(CONVERTIDO DE INTEIRO PARA STRING)
delay(100); //INTERVALO DE 100 MILISSEGUNDOS
}note que a tua rotina está praticamente intacta.
somente fiz o tratamento do número aleatório e alterei o cálculo da distância, de modo a usar o conteúdo de randNumber.
OBS: isso tudo supondo que as conexões estejam corretas no ThinkerCad.
Responder
Gostei + 0
22/05/2020
Emerson Nascimento
pequena correção:
não reparei que distancia é float.
// para entrar no if o retorno de pulseIn() precisa ser ao menos 1471 (1471/29.4/2=25.017)
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)