alexmv Posted May 17, 2014 at 07:53 PM Report #556089 Posted May 17, 2014 at 07:53 PM Boas. Estou a fazer um pequeno protejo, mas estou com um pequeno problema. O projecto consiste numa espécie de sensor de estacionamento/ medidor de distância com um buzzer e um display 12*4. Já consegui pôr a dar-me a distância mas pretendia que de acordo com a distância o buzzer apitasse. Queria que quando a distância fosse maior a 30cm o buzzer não desse sinal, quando fosse menor que 20cm apitasse 1 vez por segundo, quando a distância fosse menor que 10cm apitasse constantemente. O código é o seguinte: #include <Ultrasonic.h> //Carrega a biblioteca Ultrasonic #include <NewTone.h> //Carrega a biblioteca Newtone #include <LiquidCrystal.h> //Carrega a biblioteca LCD //Dados do buzzer #define tempo 500 int frequencia = 2000; int Pinofalante = 2; int atraso = 1000; //Define o pino do Arduino a ser utilizado com o pino Trigger do sensor #define PINO_TRIGGER 13 //Define o pino do Arduino a ser utilizado com o pino Echo do sensor #define PINO_ECHO 10 //Inicializa o sensor ultrasonico Ultrasonic ultrasonic(PINO_TRIGGER, PINO_ECHO); // Inicializa o display LiquidCrystal lcd(12, 11, 5, 4, 3, 2); //Define os pinos que serão ligados ao LCD void setup() { pinMode(Pinofalante,OUTPUT); //Pino do buzzer Serial.begin(9600); //Inicializa a serial lcd.begin(20,4); //Inicializa LCD lcd.clear(); //Limpa o LCD } void loop() { float cmMsec, inMsec; //Le os dados do sensor, com o tempo de retorno do sinal long microsec = ultrasonic.timing(); //Calcula a distancia em centimetros cmMsec = ultrasonic.convert(microsec, Ultrasonic::CM); //Ajusta o atraso de acordo com a distancia if (cmMsec > 80) { atraso = 2000; //Apresenta os dados, em centimetros, no LCD e na Serial lcd.setCursor(0,0); lcd.print("Cent.: "); lcd.print(" "); lcd.setCursor(7,0); lcd.print(cmMsec); Serial.print("Cent: "); Serial.print(cmMsec); } else if (cmMsec >50 && cmMsec<80) { atraso = 1500; //Apresenta os dados, em centimetros, no LCD e na Serial lcd.setCursor(0,0); lcd.print("Cent.: "); lcd.print(" "); lcd.setCursor(7,0); lcd.print(cmMsec); Serial.print("Cent: "); Serial.print(cmMsec); } else if (cmMsec >30 && cmMsec<50) { atraso = 1200; //Apresenta os dados, em centimetros, no LCD e na Serial lcd.setCursor(0,0); lcd.print("Cent.: "); lcd.print(" "); lcd.setCursor(7,0); lcd.print(cmMsec); Serial.print("Cent: "); Serial.print(cmMsec); } else if (cmMsec > 10 && cmMsec < 30) { atraso = 700; //Apresenta os dados, em centimetros, no LCD e na Serial lcd.setCursor(0,0); lcd.print("Cent.: "); lcd.print(" "); lcd.setCursor(7,0); lcd.print(cmMsec); Serial.print("Cent: "); Serial.print(cmMsec); } else if (cmMsec < 10) { atraso = 300; //Apresenta os dados, em centimetros, no LCD e na Serial lcd.setCursor(0,0); lcd.print("Cent.: "); lcd.print(" "); lcd.setCursor(7,0); lcd.print(cmMsec); Serial.print("Cent: "); Serial.print(cmMsec); } //NewTone(Pinofalante, frequencia, tempo); delay(atraso); } Obrigado desde já.
bubulindo Posted May 19, 2014 at 05:51 PM Report #556288 Posted May 19, 2014 at 05:51 PM Vê o exemplo blink without delay para tirares o delay do código. O teu problema estará certamente relacionado com isso já que não explicas ao certo o que naão funciona. include <ai se te avio> Mãe () { }
alexmv Posted May 20, 2014 at 02:03 PM Author Report #556380 Posted May 20, 2014 at 02:03 PM (edited) Boas. já só tem um pequeno problema que ainda não consegui perceber se onde vem. Quando a distância é menor que 10cm os valores no display andam a "saltar" no display. Se alguém me souber ajudar agradecia. Abraços #include <Ultrasonic.h> //Carrega a biblioteca Ultrasonic #include <NewTone.h> //Carrega a biblioteca Newtone #include <LiquidCrystal.h> //Carrega a biblioteca LCD //Dados do buzzer #define tempo 500 int frequencia = 2000; int Pinofalante = 2; int atraso = 1000; //Define o pino do Arduino a ser utilizado com o pino Trigger do sensor #define PINO_TRIGGER 13 //Define o pino do Arduino a ser utilizado com o pino Echo do sensor #define PINO_ECHO 10 Ultrasonic ultrasonic(PINO_TRIGGER, PINO_ECHO); //Inicializa o sensor ultrasonico LiquidCrystal lcd(12, 11, 5, 4, 3, 2); //Define os pinos que serão ligados ao LCD void setup() { pinMode(Pinofalante,OUTPUT); //Pino do buzzer Serial.begin(9600); //Inicializa a serial Serial.begin(9600); //Inicializa a serial lcd.begin(20,4); //Inicializa LCD lcd.clear(); //Limpa o LCD } void loop() { float cmMsec, inMsec; //Le os dados do sensor, com o tempo de retorno do sinal long microsec = ultrasonic.timing(); //Calcula a distancia em centimetros cmMsec = ultrasonic.convert(microsec, Ultrasonic::CM); //Ajusta o atraso de acordo com a distancia if (cmMsec > 80) { atraso = 2000; } else if (cmMsec >50 && cmMsec<80) { atraso = 1500; } else if (cmMsec >30 && cmMsec<50) { atraso = 1200; } else if (cmMsec > 10 && cmMsec < 30) { atraso = 700; } else if (cmMsec < 10) { atraso = 300; } lcd.setCursor(0,0); lcd.print("Cent.: "); lcd.print(" "); lcd.setCursor(7,0); lcd.print(cmMsec); Serial.print("Cent: "); Serial.print(cmMsec); //Emite o bip NewTone(Pinofalante, frequencia, tempo); delay(atraso); } Edited May 20, 2014 at 10:09 PM by thoga31 Tags code + GeSHi
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now