Hi all, I have a problem with my draft exam ... first it involves the construction of a machine controlled by an android app, created by me with App Inventor. The machine was working fine until I added the part program for parking sensor that will mount .... now performs slowly, so retarded and confusing ... can anyone tell me why? Thank you.
this is the skech:
#include <LiquidCrystal.h>
LiquidCrystal lcd(28,30,32,34,36,38);
//Connessioni L293
const int motorP1 = 5;
const int motorP2 = 6;
const int motorA1 = 10;
const int motorA2 = 9;
const int lucipost = 12;
const int luciant = 13;
const int buzzer = 3 ;
int trigger=24,echo=26,led=22;
long tempo=0,velocita,distanza=0;
int state;
int vSpeed=200;
void setup()
{
pinMode(motorP1, OUTPUT);
pinMode(motorP2, OUTPUT);
pinMode(motorA1, OUTPUT);
pinMode(motorA2, OUTPUT);
pinMode(lucipost, OUTPUT);
pinMode(luciant, OUTPUT);
pinMode(echo,INPUT);
pinMode(trigger,OUTPUT);
digitalWrite(trigger,LOW);
pinMode(buzzer,OUTPUT);
pinMode(led,OUTPUT);
lcd.begin(16,2);
Serial.begin(9600);
lcd.setCursor(0,0);
lcd.print("Distanza");
lcd.setCursor(0,1);
lcd.print("Misurata: ");
}
void loop() {
// istruzioni sensore di parcheggio
if(distanza<10000)
{
lcd.setCursor(12,1);
lcd.print(" ");
lcd.setCursor(14,1);
lcd.print("cm");
}
else if(distanza<1000)
{
lcd.setCursor(12,1);
lcd.print(" ");
lcd.setCursor(14,1);
lcd.print("cm");
}
else if(distanza<100)
{
lcd.setCursor(12,1); // posizionati colonna,riga
lcd.print(" "); // visualizza sul display " "
lcd.setCursor(13,1); // posizionati colonna,riga
lcd.print("cm"); // visualizza sul display "cm"
}
else if(distanza<10) //altrimenti se la distanza è minore di 10
{
lcd.setCursor(12,1); // posizionati colonna,riga
lcd.print(" "); // visualizza sul display " "
lcd.setCursor(12,1); // posizionati colonna,riga
lcd.print("cm"); // visualizza sul display "cm"
}
if(tempo<38000) // se il tempo è minore di 38000
{
lcd.setCursor(0,1); // posizionati colonna,riga
lcd.print("Misurata:"); // visualizza sul display "Misurata:"
lcd.setCursor(11,1); // posizionati colonna,riga
lcd.print(distanza); // visualizza sul display la distanza misurata(durata del impulso equivale ad una distanza)
}
else
{
lcd.setCursor(0,1); // posizionati colonna,riga
lcd.print(" "); // visualizza sul display " "
lcd.setCursor(1,1); // posizionati colonna,riga
lcd.print("Fuori Portata "); // visualizza sul display "Fuori Portata "
delay(1000); // ritardo di 1000 millisecondi = 1 secondo
}
digitalWrite(trigger,HIGH); // porta il trigger allo stato alto(invio un impulso)
delayMicroseconds(10); // durata impulso 10uS microsecondi
digitalWrite(trigger,LOW); // porta il trigger allo stato basso
tempo=pulseIn(echo,HIGH); // ricevi l'impulso del trigger
velocita=(tempo*0.034)/2; // la velocita è uguale al tempo(il tempo del impulso a tornare indietro)*la temperatura/2(diviso 2 è l'impulso che fa 2 volte lo stesso traggito cioe una volta viene inviato e una volta viene ricevuto)
distanza=tempo/58; // la distanza è il tempo/58
if(velocita>3&&velocita<=25) // se la velocità è > di 3 e valocità <= 200
{
digitalWrite(led,HIGH); // porta il led verde allo stato alto (led verde acceso)
delay(velocita*10); // ritardo è uguale alla velocita del impulso * 10
digitalWrite(buzzer,HIGH); // porta il buzzer allo stato alto (buzzer acceso)
delay(velocita*10); // ritardo è uguale alla velocita del impulso * 10
}
if(velocita<=3)
{
digitalWrite(led,HIGH); // porta il led allo stato alto
digitalWrite(buzzer,HIGH); // porta il buzzer allo stato alto (buzzer suona)
delay(1000); // ritardo di 1000 millisecondi = 1 secondo
}
digitalWrite(led,LOW); // porta il led allo stato basso
digitalWrite(buzzer,LOW); // porta il buzzer allo stato basso (buzzer spento)
delay(10); // ritardo di 10 millisecondi = 0.1 secondi
// se ricevi dei dati salvali inella variabile state
if(Serial.available() > 0){
state = Serial.read();
}
// cambia velocità se la variabile state ha un valore compreso tra 0 e 4. Il valore della velocità potrà essere da 0 a 255 (PWM)
if (state == '0'){
vSpeed=0;
}
else if (state == '1'){
vSpeed=100;
}
else if (state == '2'){
vSpeed=180;
}
else if (state == '3'){
vSpeed=200;
}
else if (state == '4'){
vSpeed=255;
}
// istruzioni avanti
// se la variabile state conterrà la lettera 'F', la macchina andrà avanti
if (state == 'F') {
analogWrite(motorP1, vSpeed); analogWrite(motorP2, 0);
analogWrite(motorA1, 0); analogWrite(motorA2, 0);
}
// istruzioni avanti-sinistra
// se la variabile state conterrà la lettera 'G', la macchina andrà avanti-sinistra
else if (state == 'G') {
analogWrite(motorP1, vSpeed); analogWrite(motorP2, 0);
analogWrite(motorA1, 200); analogWrite(motorA2, 0);
}
// istruzioni avanti-destra
// se la variabile state conterrà la lettera 'I', la macchina andrà avanti-destra
else if (state == 'I') {
analogWrite(motorP1, vSpeed); analogWrite(motorP2, 0);
analogWrite(motorA1, 0); analogWrite(motorA2, 200);
}
// istruzioni indietro
// se la variabile state conterrà la lettera 'B', la macchina andrà indietro
else if (state == 'B') {
analogWrite(motorP1, 0); analogWrite(motorP2, vSpeed);
analogWrite(motorA1, 0); analogWrite(motorA2, 0);
}
// istruzioni indietro-sinistra
// se la variabile state conterrà la lettera 'H', la macchina andrà indietro-sinistra
else if (state == 'H') {
analogWrite(motorP1, 0); analogWrite(motorP2, vSpeed);
analogWrite(motorA1, 200); analogWrite(motorA2, 0);
}
// istruzioni indietro-destra
// se la variabile state conterrà la lettera 'J', la macchina andrà indietro-destra
else if (state == 'J') {
analogWrite(motorP1, 0); analogWrite(motorP2, vSpeed);
analogWrite(motorA1, 0); analogWrite(motorA2, 200);
}
// istruzioni sinistra
// se la variabile state conterrà la lettera 'L', le ruote anteriori gireranno a sinistra
else if (state == 'L') {
analogWrite(motorP1, 0); analogWrite(motorP2, 0);
analogWrite(motorA1, 200); analogWrite(motorA2, 0);
}
// istruzioni destra
// se la variabile state conterrà la lettera 'R', le ruote anteriori gireranno a destra
else if (state == 'R') {
analogWrite(motorP1, 0); analogWrite(motorP2, 0);
analogWrite(motorA1, 0); analogWrite(motorA2, 200);
}
// istruzioni luci anteriori
// se la variabile conterrà la lettera 'W'/ 'w', si accenderranno/spegneranno le luci anteriori
else if (state == 'W') {
digitalWrite(luciant, HIGH);
}
else if (state== 'w'){
digitalWrite(luciant, LOW);
}
// istruzioni luci posteriori
// se la variabile conterrà la lettera 'U'/ 'u', si accenderranno/spegneranno le luci posteriori
else if (state == 'U') {
digitalWrite(lucipost, HIGH);
}
else if (state== 'u'){
digitalWrite(lucipost, LOW);
}
// istruzioni buzzer
// se la variabile state conterrà la lettera 'V'/ 'v' il buzzer emetterà/non emetterà un suono
else if (state == 'V'){
tone(buzzer, 1000);
}
else if (state == 'v'){
noTone(buzzer);
}
// istruzioni stop
// se la variabile state conterrà la lettera 'S', la macchina si stopperà
else if (state == 'S'){
analogWrite(motorP1, 0); analogWrite(motorP2, 0);
analogWrite(motorA1, 0); analogWrite(motorA2, 0);
}
}