C'est exactement ca 68tjs,
Pour l'instant je vais voir la méthode ide.
Comment doit on procéder pour creer ce genre de fichiers?
Je part d'un sketchs comme celui ci par exemple
#include <Servo.h> // On inclut les bibliothèques du servo-moteur, du capteur ultrason
#include <HCSR04.h>
// define fait une sorte de copier coller
// Attribuer les Pins du servo-moteur HCSR04.h
#define TRIG_PIN A0 // le Pin A0, sortie analogique
#define ECHO_PIN A1 // le Pin A1, sortie analogique
// Définissez toutes les cartes de connexion au L298N
#define enA 13
#define in1 12
#define in2 11
#define in3 7
#define in4 6
#define enB 5
#define servoPin 2
class Motor{
int enablePin;
int directionPin1;
int directionPin2;
public:
//définir les broches des moteurs
Motor(int ENPin,int dPin1,int dPin2){
enablePin = ENPin;
directionPin1 = dPin1;
directionPin2 = dPin2;
};
// Méthode pour faire avancer le moteur de 0 à 255. -1 ~ -255 pour reculer
void Drive(int speed){
if(speed>=0){
digitalWrite(directionPin1, LOW);
digitalWrite(directionPin2, HIGH);
}
else{
digitalWrite(directionPin1, HIGH);
digitalWrite(directionPin2, LOW);
speed = - speed;
}
analogWrite(enablePin, speed);
}
};
Motor leftMotor = Motor(enA, in1, in2);
Motor rightMotor = Motor(enB, in3, in4);
Servo myservo; // create servo object to control a servo
void motorInitiation(){
pinMode(enA, OUTPUT);
pinMode(in1, OUTPUT);
pinMode(in2, OUTPUT);
pinMode(enB, OUTPUT);
pinMode(in3, OUTPUT);
pinMode(in4, OUTPUT);
// Définir la direction et la vitesse initiale
digitalWrite(enA, LOW);
digitalWrite(enB, LOW);
digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);
digitalWrite(in3, LOW);
digitalWrite(in4, HIGH);
}
//Variables--------------------------------------------------------------------------
// Anything over 400 cm (23200 us pulse) is "out of range"
// Tout ce qui dépasse 400 cm (impulsion 23200 us) est "hors de portée
const unsigned int MAX_DIST = 23200;
bool ObsticalAhead = false;
int servoPos = 90;
enum Directions { Forward, TurnLeft, TurnRight, TurnAround,Brake};
Directions nextStep = Forward;
unsigned long t1;
unsigned long t2;
unsigned long pulse_width;
float cm;
float inches;
//SETUP--------------------------------------------------------------------------
void setup() {
// The Trigger pin will tell the sensor to range find
pinMode(TRIG_PIN, OUTPUT);
digitalWrite(TRIG_PIN, LOW);
// Nous utiliserons le moniteur série pour visualiser la sortie du capteur
Serial.begin(9600);
myservo.attach(servoPin);
motorInitiation();
Directions nextStep = Forward;
}
void loop() {
checkDistance();
checkDirection();
drive();
}
void checkDistance(){
// Hold the trigger pin high for at least 10 us
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
// Attendre l'impulsion sur le Pin d'écho
while ( digitalRead(ECHO_PIN) == 0 );
// Mesurer combien de temps le Pin d'écho a été maintenue haute (largeur d'impulsion)
// Remarque: le compteur micros () débordera après ~ 70 min
t1 = micros();
while ( digitalRead(ECHO_PIN) == 1);
t2 = micros();
pulse_width = t2 - t1;
// Calculate distance in centimeters and inches. The constants
// are found in the datasheet, and calculated from the assumed speed
//of sound in air at sea level (~340 m/s).
cm = pulse_width / 58.0;
inches = pulse_width / 148.0;
// Imprimer les résultats
if ( pulse_width > MAX_DIST ) {
//Serial.println("Out of range");
} else {
//Serial.print(cm);
//Serial.print(" cm \t");
//Serial.print(inches);
//Serial.println(" in");
}
// Attendez au moins 60 ms avant la prochaine mesure
delay(60);
if(cm<= 20){
ObsticalAhead = true;
Serial.println("Problem Ahead");
}
else{ ObsticalAhead = false;}
}
void checkDirection(){
Serial.println("checking direction");
if(ObsticalAhead ==true){
nextStep = Brake;
drive();
myservo.write(180); // dire au servo- moteur d'aller à la position dans la variable 'pos'
delay(400); // attend 15 ms pour que le servo –moteur atteigne la position
checkDistance();
if(ObsticalAhead ==false){ // si le côté gauche est ouvert
nextStep = TurnLeft;
Serial.println("Next step is TurnLeft");
myservo.write(90); // réinitialiser la position du servo
delay(400);
}
else{ // la gauche est bloquée, il faut maintenant regarder à droite
myservo.write(0); // dire au servo-moteur d'aller à la position dans la variable 'pos
delay(800); // attend 15 ms pour que le servo-moteur atteigne la position
checkDistance();
if(ObsticalAhead ==false){ // si le côté droit est ouvert
nextStep = TurnRight;
Serial.println("Next step is TurnRight");
myservo.write(90); // réinitialiser la position du servo-moteur
delay(400);
}
else{ // la droite est également bloquée, il faut faire demi-tour
nextStep = TurnAround;
myservo.write(90);//reset servo position
delay(300);
Serial.println("Next step is TurnAround");
}
}
}
else{nextStep = Forward;} // Pas d'obstacle à venir
}
void drive(){
switch (nextStep){
case Forward:
leftMotor.Drive(255);
rightMotor.Drive(255);
Serial.println("Forward");
break;
case TurnLeft:
leftMotor.Drive(-255);
rightMotor.Drive(255);
Serial.println(" TurnLeft");
delay(400);
break;
case TurnRight:
leftMotor.Drive(255);
rightMotor.Drive(-255);
Serial.println(" TurnRight");
delay(400);
break;
case TurnAround:
leftMotor.Drive(255);
rightMotor.Drive(-255);
Serial.println(" TurnAround");
delay(600);
break;
case Brake:
leftMotor.Drive(0);
rightMotor.Drive(0);
Serial.println(" stopped");
}
}
Comment je doit faire?
Merci