Ciao a tutti, sto realizzando un piccolo progetto che prevede l'utilizzo di 5 microservo e un sensore a ultrasuoni, ma sto riscontrando un problema nel codice, metto la prima condizione if (se la distanza è tra 40cm e 100cm) e fin qui tutto ok, alla seconda condizione if o if else, ho provato entrambe, i sevo non funzionano ma se provo un print è tutto ok. cosa sto sbagliando?
#include <Servo.h>
#define trigpin 5 //set trigpin
#define echopin 6 //set echopin
const int servo1 = 3;
const int servo2 = 8;
const int servo3 = 4;
const int servo4 = 9;
const int servo5 = 10;
const int trigPin = 5;
const int echoPin = 6;
int servoVal;
int duration, distance;
int pos = 0;
int val = 0; // variable for reading the pin status
Servo myservo1; //tira su occhio destro
Servo myservo2; //tira su il sinistro
Servo myservo3; //tira su le palpebre
Servo myservo4; // rotazione destra
Servo myservo5; // rotazione sinistra
////
void setup() {
myservo1.attach(servo1);
myservo2.attach(servo2); // attaches the servo
myservo3.attach(servo3); // attaches the servo
myservo4.attach(servo4); // attaches the servo
myservo5.attach(servo5); // attaches the servo
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
Serial.begin(9600);
}
void loop(){
/////// Allineamento ///////
myservo1.write(90);
myservo2.write(90);
myservo3.write(90);
myservo4.write(90);
myservo5.write(90);
delay(50);
////
//long duration, distance;
digitalWrite(trigpin,HIGH);
_delay_ms(500);
digitalWrite(trigpin, LOW);
duration=pulseIn(echopin,HIGH);
distance=(duration/2)/29.1;
////////////////////////////////////////////
if(distance >40 && distance <80 )
{
/////////////// FIRST MOVEMENT /////////
myservo3.write(200); // OPEN EYES
delay(1000);
myservo4.write(60);
myservo5.write(60);
delay(2000);
////////////// SECOND MOVEMENT //////////
myservo4.write(100);
myservo5.write(100);
myservo1.write(100);
myservo2.write(75); // RICORDA CHE è INVERSO
delay(1000);
/////////////// THIRD MOVEMENT /////////
myservo3.write(90);
delay(500);
myservo3.write(200);
myservo1.write(80);
myservo2.write(100);
delay(2000);
////////////// FOURTH MOVEMENT //////////
myservo4.write(70);
myservo5.write(70);
delay(1000);
////////////// FIFTH MOVEMENT //////////
myservo3.write(90);
delay(500);
myservo3.write(200);
delay(500);
myservo2.write(115);
myservo1.write(60);
myservo3.write(200);
delay(1000);
////////////// SIXTH MOVEMENT //////////
myservo1.write(90);
myservo2.write(70);
myservo3.write(200);
delay(1000);
}
if (distance <40)
{
delay(500);
myservo1.write(105);
myservo2.write(75);
myservo3.write(200);
}
Serial.print("cm");
Serial.println(distance);
}
// else {
// Serial.print("cm");
//Serial.println(distance);
// }
// }