Blame view

Programme_arduino_robot 5.33 KB
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*/