Bonjour
J'ai enfin eu mes petits jouets arduino.
J'ai tout câblé avec le code ci-dessous.
Pour raison pratique j'ai mis des leds à la place des moteurs.
le pb est que les leds s'allument en permanence alternativement et qu'il semble que ni les ultrasons ni les boutons ne fonctionnent ( ils sont bien alimentés électriquement).
Jen'ai même pas la première phqse sans aucune détection pour que les 2 moteurs ( ici les 2 leds) fonctionnent ensemble
if (!(BtnContact1) && !(BtnContact2) && !(cm)) { // bateau en pleine eau , il va tout droit
digitalWrite(moteur1, HIGH);
digitalWrite(moteur2, HIGH);
}
Code complet
/*
levinegabriella.com/teaching
It includes an parallax ultrasonic rangefinder : see data sheet
http://www.arduino.cc/en/Tutorial/Ping
created 2011 by gabriella levine
*/
// constants
// set pin numbers:
const int DetecteurPin1 = 2; // the number of the pushbutton pin le numero du pin du bouton commande automatique(presse-bouton)
const int DetecteurPin2 = 4;
const int moteur1 = 3; // the number of the motor pin le numero du pin du moteur
const int moteur2 = 11;
// les 2 pin ultrason
#define echoPin 7 // broche Echo
#define trigPin 8 // broche Trigger (declenchement)
// variables
int BtnContact1 = 0; // variable pour lire le statut des boutons poussoirs
int BtnContact2 = 0;
void setup() {
//begin serial
Serial.begin(9600);
// Activer les broches ultrason
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
// initialize the motors as output:
pinMode(moteur1, OUTPUT);
pinMode(moteur2, OUTPUT);
// initialize the pushbutton pins as input:
pinMode(DetecteurPin1, INPUT_PULLUP); // remplace INPUT permet de mettre un simple poussoir sans résistance
pinMode(DetecteurPin2, INPUT_PULLUP); // remplace INPUT permet de mettre un simple poussoir sans résistance
}
void loop() {
// establish variables for duration of the ping,
// and the distance result in centimeters:
long distance, duration, cm; // Durée utilisée pour calculer la distance
// Envoi une impulsion de 10 micro secondes sur la broche "trigger"
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
// Attend que la broche Echo passe au niveau HAUT et retourne la durée
duration = pulseIn(echoPin, HIGH);
//Calculer la distance (en cm, basé sur la vitesse du son).
distance = duration / 58.2;
cm = distance;
// read the state of the pushbutton value:
BtnContact1 = digitalRead(DetecteurPin1);
BtnContact2 = digitalRead(DetecteurPin2);
// mouvement en pleine eau qui evite les bords si contact
if (!(BtnContact1) && !(BtnContact2) && !(cm)) { // bateau en pleine eau , il va tout droit
digitalWrite(moteur1, HIGH);
digitalWrite(moteur2, HIGH);
}
else if (cm <= 15) { // si 1er contact ultrason, on tourne à droite
digitalWrite(moteur1, LOW);
digitalWrite(moteur2, HIGH);
}
if (BtnContact1 == HIGH) {
digitalWrite(moteur1, LOW);
digitalWrite(moteur2, HIGH);
delay (5000); // tourne encore pendant 5ec pour s'axer vers le miieu de la piscine
digitalWrite(moteur1, HIGH);// va tout droit
digitalWrite(moteur2, HIGH);
}
if (cm <= 15) { // si 2er contact ultrason, on tourne à gauche
digitalWrite(moteur1, HIGH);
digitalWrite(moteur2, LOW);
}
if (BtnContact2 == HIGH) {
digitalWrite(moteur1, HIGH);
digitalWrite(moteur2, LOW);
delay (5000); // tourne encore pendant 5ec pour s'axer vers le miieu de la piscine
digitalWrite(moteur1, HIGH);
digitalWrite(moteur2, HIGH);
}
/*Partie originale
if (cm <= 15) {
//digitalWrite(motor, LOW);
digitalWrite(motor2, LOW);
}
else {
//digitalWrite(motor, HIGH);
digitalWrite(motor2, HIGH);
button();
}
*/
delay(100);
}
void button() {
// check if the pushbutton is pressed.
// if it is, the buttonState is HIGH:
if (BtnContact1 == HIGH) {
digitalWrite(moteur1, LOW);
}
else {
digitalWrite(moteur1, HIGH);
}
if (BtnContact2 == HIGH) {
digitalWrite(moteur2, LOW);
}
else {
digitalWrite(moteur2, HIGH);
}
}
long microsecondsToCentimeters(long microseconds)
{
return microseconds / 29 / 2;
}