Ciao a tutti ! vi spiego il mio problema:
Ho un servo motore, un sensore ultrasuoni (SRF05) e due led; In pratica il sensore è posizionato su un servo motore, il mio programma deve comparare la distanza che rileva a destra e quella che rileva a sinistra e a secondo di quale sia maggiore o minore accendere uno dei due led, il mio progetto è quello di un robot, quindi dopo sostituirò il programma per accendere il led con quello per far avviare le ruote.
il problema è che lampeggia solo un led in continuazione
questo è il codice:
#include <Servo.h> //libreria servo motore
Servo servo; //crea l’oggetto di tipo Servo,servo sarà l’oggetto su cui opero;
int durata; //durata dell'impulso
int distanza; // distanza oggetto
int pin_segnale = 8; // pin sensore collegato ad arduino
int leftDistance, rightDistance;
int led1 = 13;
int led2 = 12;
void setup()
{
Serial.begin(9600);
servo.attach(2); //piedino di comando del servo collegato al piedino 2 di arduino
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
}
void loop()
{
servo.write(0);
delay(500);
rightDistance = Srf();
delay(500);
servo.write(180);
delay(700);
leftDistance = Srf();
delay(500);
servo.write(90);
delay(100);
if (leftDistance>rightDistance)
{
sinistra();
}
else
{
destra(); //turn 180 degrees
}
}
long Srf()
{
pinMode(pin_segnale, OUTPUT);
digitalWrite(pin_segnale, LOW); // viene posto a LOW pin, per 2 microsecondi
// prima di inviare un breve impulso di trigger
delayMicroseconds(2);
digitalWrite(pin_segnale, HIGH); // invia un impulso di trigger
delayMicroseconds(10); // di 10 microsecondi
digitalWrite(pin_segnale, LOW); // pone il pin al LOW in attesa che l'impulso torni indietro
pinMode(pin_segnale, INPUT);
durata = pulseIn(pin_segnale, HIGH); // legge l'eco dell'impulso emesso in microsecondi
distanza = durata/130; // divide la durata per 58 per ottenere la distanza in cm
Serial.println(distanza); // stampa sul Serial Monitor il valore della distanza
}
void sinistra()
{
digitalWrite(led1, HIGH);
delay(1000);
digitalWrite(led1, LOW);
}
void destra()
{
digitalWrite(led2, HIGH);
delay(1000);
digitalWrite(led2, LOW);
}
..Allego anche il file .ino
e un video di quello che succede... - YouTube
Attendo risposte grazie
nnmn.ino (1.83 KB)