Bonjour tout le monde!
Donc j'ai un problème avec ma voiture. Elle avance bien et s'arrete bien. Cependant, quand un vehicule en avant tourne, ma voiture donc sarreter. Cependant, quand ca arrive,rien ne se passe.
J'ai des capteurs, un Ping et un MaxSonar Ez2.Ils sont placés sur les deux cotés de la voiture. Un à chaque. Donc dans mon programme, jai dit que si par exemple le MaxSonar détecte quelque chose entre 0 et 50 cm et que le Ping ne détecte rien, ma voiture doit tourner à droite. Cependant,rien ne se passe.
J'ai posé un objet à cette position mais rien ne se passe.
Sonar: http://imgur.com/SIUsiFW
Ping: Imgur: The magic of the Internet
et mon code:
if(cm<50 and valeurPing>50)
{
myservo.write(0);
delay(500);
myservo.write(70);
delay(500);
digitalWrite(motor,HIGH);
delay(150);
digitalWrite(motor,LOW);
delay(300);
}
cm= Sonar et ValeurPing = Ping
si les deux capteurs ne captent rien avant 50 cm, elle roule et si ils captent, alors il n'y a pas de probleme ici. Aussi,le servo marche bien car j'ai testé l'exemple sweep et ca marche.
Qu'esce-qui ne marche pas? Merci.
Le code complet:
const int pingPin = 7;
int moteur= 3;
#include <Servo.h>
int rouge = 6;
int vert = 5;
int bleu= 4;
Servo myservo;
int pos = 0;
float Inch=0.00;
float cm=0.00;
int SonarPin=A1;
int sensorValue;
void setup() {
Serial.begin(9600);
pinMode(moteur, OUTPUT);
pinMode(rouge, OUTPUT);
pinMode(vert,OUTPUT);
pinMode(bleu,OUTPUT);
myservo.attach(9);
}
long int acquisitionPing(void){
long int duration;
pinMode(pingPin, OUTPUT);
digitalWrite(pingPin, LOW);
delayMicroseconds(2);
digitalWrite(pingPin, HIGH);
delayMicroseconds(5);
digitalWrite(pingPin, LOW);
pinMode(pingPin, INPUT);
duration = pulseIn(pingPin, HIGH);
return duration / 29 / 2;
}
long int acquisitionMaxSonar(void){
sensorValue=analogRead(SonarPin);
delay(50);
Inch= (sensorValue*0.497);
cm=Inch*2.54;
}
void loop()
{
long int valeurPing;
long int valeurSonar;
// on fait l'acquisition des senseurs
valeurPing = acquisitionPing();
valeurSonar = acquisitionMaxSonar();
// on traite les informations recueillies
// par exemple
Serial.print(cm);
Serial.println('cm');
delay(500);
if (valeurPing>50 and cm > 50)
{
digitalWrite(rouge,HIGH);
delay(500);
digitalWrite(rouge,LOW);
delay(500);
digitalWrite(vert,HIGH);
delay(500);
digitalWrite(vert,LOW);
delay(500);
digitalWrite(bleu,HIGH);
delay(500);
digitalWrite(bleu,LOW);
delay(500);
myservo.write(70);
digitalWrite(moteur,HIGH);
delay(150);
digitalWrite(moteur,LOW);
delay(300);
}
if (valeurPing < 50 and cm <50 )
{
myservo.write(70);
analogWrite(moteur,0);
delay(500);
digitalWrite(rouge,HIGH);
delay(500);
}
if(cm>50 and valeurPing<50)
{
myservo.write(179);
delay(500);
myservo.write(70);
delay(500);
digitalWrite(moteur,HIGH);
delay(150);
digitalWrite(moteur,LOW);
delay(300);
digitalWrite(vert,HIGH);
delay(500);
digitalWrite(vert,LOW);
delay(500); }
if(cm<50 and valeurPing>50)
{
myservo.write(0);
delay(500);
myservo.write(70);
delay(500);
digitalWrite(moteur,HIGH);
delay(150);
digitalWrite(moteur,LOW);
delay(300);
digitalWrite(bleu,HIGH);
delay(500);
digitalWrite(bleu,LOW);
delay(500);
}
}