cf4b546b
sblas
Ajout du programm...
|
1
2
|
#include <SoftwareSerial.h>
|
c78b2b72
sblas
Mise à jour des c...
|
3
|
//Liaison série pour le module bluetooth
|
cf4b546b
sblas
Ajout du programm...
|
4
5
|
SoftwareSerial soft2(8,9);
|
c78b2b72
sblas
Mise à jour des c...
|
6
|
//Tous les pins nécessaires à l'utilisation du contrôleur moteur
|
cf4b546b
sblas
Ajout du programm...
|
7
8
9
10
11
12
13
|
int pwma = 10;
int pwmb = 11;
int ain1 = 7;
int ain2 = 6;
int bin1 = 5;
int bin2 = 4;
int stby = 3;
|
c78b2b72
sblas
Mise à jour des c...
|
14
15
|
//Pins pour le détecteur ultrasons de l'arduino
|
cf4b546b
sblas
Ajout du programm...
|
16
17
|
int TRIG = A1;
int ECHO = A0;
|
c78b2b72
sblas
Mise à jour des c...
|
18
19
|
//Distance mesurée par le robot
|
cf4b546b
sblas
Ajout du programm...
|
20
|
long cm;
|
c78b2b72
sblas
Mise à jour des c...
|
21
|
//Valeur renvoyée par le capteur ultrasons
|
cf4b546b
sblas
Ajout du programm...
|
22
|
long lect_echo;
|
c78b2b72
sblas
Mise à jour des c...
|
23
24
25
|
//Variable indiquant si le chemin à déjà été reçu ou non
int envoi=0;
//Variable pour stocker chaque octet reçu
|
58056f07
sblas
Mise à jour du pr...
|
26
|
char inByte='a';
|
cf4b546b
sblas
Ajout du programm...
|
27
28
|
void setup() {
|
c78b2b72
sblas
Mise à jour des c...
|
29
|
//Initialiser les liaisons série, 9600 hard pour le debug, 38400 soft2 pour le module bluetooth
|
cf4b546b
sblas
Ajout du programm...
|
30
31
|
Serial.begin(9600);
soft2.begin(38400);
|
c78b2b72
sblas
Mise à jour des c...
|
32
33
34
35
36
|
//Setup par défaut des pins du capteur ultrasons
pinMode(TRIG,OUTPUT);
digitalWrite(TRIG, LOW);
pinMode(ECHO,INPUT);
|
cf4b546b
sblas
Ajout du programm...
|
37
38
39
|
}
void loop() {
|
c78b2b72
sblas
Mise à jour des c...
|
40
|
//Stocker le message reçu via bluetooth
|
cf4b546b
sblas
Ajout du programm...
|
41
|
String msg;
|
c78b2b72
sblas
Mise à jour des c...
|
42
43
|
//Variables diverses utilisées par la suite
|
cf4b546b
sblas
Ajout du programm...
|
44
45
46
47
48
49
50
51
|
int i = 0;
int nb_if = 0;
char id_sauv;
int test_if;
int nb_boucles[6];
char id_boucles[6];
int boucle_rec = 0;
int capteur;
|
c78b2b72
sblas
Mise à jour des c...
|
52
|
|
cf4b546b
sblas
Ajout du programm...
|
53
54
|
//boucle dans une boucle gérée
|
c78b2b72
sblas
Mise à jour des c...
|
55
|
//écouter sur le port série du module bluetooth, jusqu'à recevoir un chemin
|
58056f07
sblas
Mise à jour du pr...
|
56
|
soft2.listen();
|
cf4b546b
sblas
Ajout du programm...
|
57
58
|
while(soft2.available()>0 && inByte !='\n'){
inByte=soft2.read();
|
c78b2b72
sblas
Mise à jour des c...
|
59
60
61
62
|
msg+=inByte;
delay(10);
i++;
envoi=1;
|
cf4b546b
sblas
Ajout du programm...
|
63
|
}
|
c78b2b72
sblas
Mise à jour des c...
|
64
|
|
cf4b546b
sblas
Ajout du programm...
|
65
66
67
68
|
//++a01z++a++z test if
//++B 1Q+z test while (executé 32 fois)
//++B 1B +Q1Q+z test while dans un while
if(envoi==1){
|
c78b2b72
sblas
Mise à jour des c...
|
69
70
|
//Aller tout droit
|
cf4b546b
sblas
Ajout du programm...
|
71
72
73
74
75
76
77
78
79
80
81
82
83
|
for(int k=0;k<i;k++){
if((msg.charAt(k) & 0xF0) ==0x10){
Serial.print("tout droit\n\r");
digitalWrite(stby,HIGH);
analogWrite(pwma,100);
analogWrite(pwmb,100);
digitalWrite(ain1,HIGH);
digitalWrite(bin1,HIGH);
digitalWrite(ain2,LOW);
digitalWrite(bin2,LOW);
delay(1000);
}
|
c78b2b72
sblas
Mise à jour des c...
|
84
|
//Tourner à gauche
|
cf4b546b
sblas
Ajout du programm...
|
85
86
87
88
89
90
91
92
93
94
95
96
|
else if((msg.charAt(k) & 0xF0) ==0x20){
Serial.print("à gauche\n\r");
digitalWrite(stby,HIGH);
analogWrite(pwma,100);
analogWrite(pwmb,100);
digitalWrite(ain1,HIGH);
digitalWrite(bin1,LOW);
digitalWrite(ain2,LOW);
digitalWrite(bin2,HIGH);
delay(900);
}
|
c78b2b72
sblas
Mise à jour des c...
|
97
|
//Tourner à droite
|
cf4b546b
sblas
Ajout du programm...
|
98
99
100
101
102
103
104
105
106
107
108
109
|
else if((msg.charAt(k) & 0xF0) ==0x30){
Serial.print("à droite\n\r");
digitalWrite(stby,HIGH);
analogWrite(pwma,100);
analogWrite(pwmb,100);
digitalWrite(ain1,LOW);
digitalWrite(bin1,HIGH);
digitalWrite(ain2,HIGH);
digitalWrite(bin2,LOW);
delay(900);
}
|
c78b2b72
sblas
Mise à jour des c...
|
110
|
//Début boucle while
|
cf4b546b
sblas
Ajout du programm...
|
111
112
113
114
115
116
117
118
|
else if((msg.charAt(k) & 0xF0) ==0x40){
Serial.print("début while\n\r");
k++;
nb_boucles[boucle_rec] = (int)msg.charAt(k);
id_boucles[boucle_rec] = msg.charAt(k-1);
boucle_rec++;
}
|
c78b2b72
sblas
Mise à jour des c...
|
119
|
//Fin boucle while
|
cf4b546b
sblas
Ajout du programm...
|
120
|
else if((msg.charAt(k) & 0xF0) ==0x50){
|
c78b2b72
sblas
Mise à jour des c...
|
121
|
//LEs deux tableaux suivants stockent les différentes id des instructions while, et permettent donc de gérer le cas d'un while dans un while
|
cf4b546b
sblas
Ajout du programm...
|
122
123
124
125
126
127
128
129
130
131
132
133
134
135
|
nb_boucles[boucle_rec-1]--;
if(nb_boucles[boucle_rec-1]!=0){
k--;
while(msg.charAt(k)!= id_boucles[boucle_rec-1]){
k--;
}
k++;
}
else{
boucle_rec--;
Serial.print("fin while\n\r");
}
}
|
c78b2b72
sblas
Mise à jour des c...
|
136
|
//IF
|
cf4b546b
sblas
Ajout du programm...
|
137
|
else if((msg.charAt(k) & 0xF0) ==0x60){
|
c78b2b72
sblas
Mise à jour des c...
|
138
|
//Pour le if, on compare la valeur du deuxième octet à la valeur lue par la capteur, puis soit on continue le chemin actuel, soit on saute jusqu'au prochain if ayant la même id que le if actuel.
|
cf4b546b
sblas
Ajout du programm...
|
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
|
Serial.print("if\n\r");
digitalWrite(TRIG, HIGH);
delayMicroseconds(50);
digitalWrite(TRIG, LOW);
lect_echo = pulseIn(ECHO, HIGH);
cm = lect_echo / 58;
Serial.println(cm);
delay(10);
if((msg.charAt(k) & 0x01) == 0x01){
if(msg.charAt(++k) > cm){
nb_if++;
test_if=nb_if;
id_sauv = msg.charAt(k+1);
while(((msg.charAt(k)) & 0xF0) != 0x70 && k<i){
k++;
}
while(test_if!=0){
if(((msg.charAt(k) & 0xF0) == 0x60)){
k++;
test_if--;
}
else k++;
}
}
}
else if((msg.charAt(k) & 0x01) == 0x00){
if(msg.charAt(++k) < cm){
nb_if++;
test_if=nb_if;
id_sauv = msg.charAt(k+1);
while(((msg.charAt(k)) & 0xF0) != 0x70 && k<i){
k++;
}
while(test_if!=0){
if(((msg.charAt(k) & 0xF0) == 0x60)){
k++;
test_if--;
}
else k++;
}
}
}
}
|
c78b2b72
sblas
Mise à jour des c...
|
183
|
//Fin de parcours
|
cf4b546b
sblas
Ajout du programm...
|
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
|
else if((msg.charAt(k) & 0xF0) ==0x70){
Serial.print("fin parcours\n\r");
envoi=2;
digitalWrite(stby,LOW);
analogWrite(pwma,0);
analogWrite(pwmb,0);
digitalWrite(ain1,LOW);
digitalWrite(bin1,LOW);
digitalWrite(ain2,LOW);
digitalWrite(bin2,LOW);
k=i;
}
}
}
}
/*- Tout droit: 0001
- Virage à gauche: 0010
- Virage à droite: 0011
- Début while: 0100
- Fin while: 0101
- If: 0110
- Fin parcours: 0111*/
|