1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226
|
// La LED est câblée sur la patte 2.
// Le bouton est câblé sur la patte 3
// give it a name:
/*#define VITESSE 340
#include <Wire.h>
const int USTrig = 5; // Déclencheur sur la broche 8
const int USEcho = 4; // Réception sur la broche 9
const int PinLed = 8; // Branchement de la Led
const int PinBuzzer = 3; // Branchement du buzzer
const double distanceMax = 0.3; //Distance maximum avant alerte (en m)*/
float distance; //Variable distance utilisée plus bas
int DirMotA = 12;
int FreinMotA = 9;
int PWMMotA = 3;
int DirMotB = 13;
int FreinMotB = 8;
int PWMMotB = 11;
int BoutonBP7 = 7;
int BoutonBP2 = 2;
int BoutonBP6 = 6;
boolean Ancien_Appui7 = true;
boolean Nouvel_Appui7 = false;
boolean Etat_mot = false;
boolean Ancien_Appui2 = true;
boolean Nouvel_Appui2 = false;
boolean Tournedroite = false;
boolean Ancien_Appui6 = true;
boolean Nouvel_Appui6 = false;
boolean Tournegauche = false;
// Le sous programme setup s'éxécute à la mise sous tension ou après un Reset:
void setup() {
// initialise les entrées digitales en entrées et sorties.
pinMode(BoutonBP7, INPUT);
pinMode(BoutonBP2, INPUT);
pinMode(BoutonBP6, INPUT);
pinMode(DirMotA, OUTPUT);
pinMode(FreinMotA, OUTPUT);
pinMode(PWMMotA , OUTPUT);
pinMode(DirMotB , OUTPUT);
pinMode(FreinMotB , OUTPUT);
pinMode(PWMMotB , OUTPUT);
/* pinMode(USTrig, OUTPUT); //On définit le type de sortie de chaque cable
pinMode(USEcho, INPUT);
pinMode(PinLed, OUTPUT);
pinMode(PinBuzzer, OUTPUT);
digitalWrite(USTrig, LOW);
Serial.begin(9600);
digitalWrite(13,LOW);
digitalWrite(8,LOW);
analogWrite(11,55);
digitalWrite(12,LOW);
digitalWrite(9,LOW);
analogWrite(3,55); */
}
// Le sous programme loop tourne en boucle:
void loop()/* {
// put your main code here, to run repeatedly:
float distanceMesuree = mesureDistance();
// 6. On affiche la distance
if (distanceMesuree>0)
{
Serial.print("Distance = ");
Serial.print(distanceMesuree); //affiche la distance mesurée (en mètres) sur le moniteur
Serial.println("m");
}
else
{
Serial.println("Mesure echouee");
}
if (distanceMesuree < distanceMax) //si la distance est inférieure à la distance définie
{
digitalWrite(PinLed,HIGH); //On allume la led
digitalWrite(PinBuzzer,HIGH); //Le buzzer sonne
delay(10);
digitalWrite(PinBuzzer,LOW);
digitalWrite(13,LOW);
digitalWrite(8,LOW);
analogWrite(11,0);// On éteint le moteur
delay(200);
digitalWrite(12,LOW);
digitalWrite(9,LOW);
analogWrite(3,0);// On éteint le moteur
delay(200);
}
else
{
digitalWrite(PinLed, LOW);
digitalWrite(13,HIGH);
digitalWrite(8,LOW);
analogWrite(11, 55);//On allume le moteur
digitalWrite(12,LOW);
digitalWrite(9,LOW);
analogWrite(3 , 55);//On allume le moteur
delay(200);
}
// petite pause
delay(90);
}
float mesureDistance(){
// 1. Un état haut de 10 microsecondes est mis sur la broche "Trig"
digitalWrite(USTrig, HIGH);
delayMicroseconds(10); //on attend 10 µs
// 2. On remet à létat bas la broche Trig
digitalWrite(USTrig, LOW);
// 3. On lit la durée détat haut sur la broche "Echo"
unsigned long duree = pulseIn(USEcho, HIGH);
if(duree > 30000)
{
// si la durée est supérieure à 30ms, l'onde est perdue
Serial.println("Onde perdue, mesure échouée !");
return 0;
}
else
{
// 4. On divise cette durée par deux pour n'avoir qu'un trajet
duree = duree/2;
// 5. On calcule la distance avec la formule d=v*t
float temps = duree/1000000.0; //on met en secondes
distance = temps*VITESSE; //on multiplie par la vitesse, d=t*v
return distance;
}
} */
{
Nouvel_Appui7 = digitalRead(BoutonBP7); // teste l'état du bouton BP7
if (Nouvel_Appui7==true && Ancien_Appui7==false)
{
if (Etat_mot==false) // si la variable Etat_mot est faux
{
Etat_mot = true; // alors on l'a met à vrai
digitalWrite( DirMotA , HIGH );
digitalWrite( FreinMotA , LOW );
analogWrite( PWMMotA , 55);
digitalWrite( DirMotB , LOW );
digitalWrite( FreinMotB , LOW );
analogWrite( PWMMotB , 55); // on allume le mot
}
else // sinon on fait l'opposé
{
Etat_mot = false;
digitalWrite( DirMotA , HIGH );
digitalWrite( FreinMotA , LOW );
analogWrite( PWMMotA , 0);
digitalWrite( DirMotB , LOW );
digitalWrite( FreinMotB , LOW );
analogWrite( PWMMotB , 0);
}
}
Nouvel_Appui2 = digitalRead(BoutonBP2); // teste l'état du bouton BP2
if (Nouvel_Appui2==true && Ancien_Appui2==false)
{
if (Tournedroite==false)
{
Tournedroite == true;
digitalWrite( DirMotA , HIGH );
digitalWrite( FreinMotA , LOW );
analogWrite( PWMMotA , 55);
digitalWrite( DirMotB , LOW );
digitalWrite( FreinMotB , LOW );
analogWrite( PWMMotB , 0);
}
else
{
Etat_mot = true; // alors on la met à vrai
digitalWrite( DirMotA , HIGH );
digitalWrite( FreinMotA , LOW );
analogWrite( PWMMotA , 55);
digitalWrite( DirMotB , LOW );
digitalWrite( FreinMotB , LOW );
analogWrite( PWMMotB , 55);
}
}
Nouvel_Appui6 = digitalRead(BoutonBP6); // teste l'état du bouton BP6
if (Nouvel_Appui6==true && Ancien_Appui6==false)
{
if (Tournegauche==false)
{
Tournegauche == true;
digitalWrite( DirMotA , HIGH );
digitalWrite( FreinMotA , LOW );
analogWrite( PWMMotA , 0);
digitalWrite( DirMotB , LOW );
digitalWrite( FreinMotB , LOW );
analogWrite( PWMMotB , 55);
}
else
{
Etat_mot = true; // alors on la met à vrai
digitalWrite( DirMotA , HIGH );
digitalWrite( FreinMotA , LOW );
analogWrite( PWMMotA , 55);
digitalWrite( DirMotB , LOW );
digitalWrite( FreinMotB , LOW );
analogWrite( PWMMotB , 55);
}
delay(200); // tempo qui permet de se prémunir des rebonds
}
Ancien_Appui7 = Nouvel_Appui7;
Ancien_Appui2 = Nouvel_Appui2;
Ancien_Appui6 = Nouvel_Appui6; // sert à déterminer les nouveaux états des boutons BP7, BP2, BP6
} |
Partager