Gestion d'un au terminal Série

Dans le projet Aerocat le module Bluetooth est commandé via une liaison série. L'application Android du smartphone envoie des informations reçues par la carte grâce une liaison série, constituée de deux câbles Rx pour la réception et Tx pour la transmission. 

Defi 1 : contrôler un servo via le terminal série

Sous tinkerCAD il n'y a pas de Module BT. Cependant nous allons simuler l'envoie de donnée gràce au terminal série

En s'aidant du programme suivant qui permet d'afficher au terminal série le nombre saisie.

1
2
3
 int octetReception=0; // variable de stockage des valeurs recues sur le port Serie
4
 long nombreReception=0; // variable pour nombre recu sur port Serie
5
6
7
8
9
void setup()   { // debut de la fonction setup()
10
11
12
Serial.begin(9600); 
13
14
15
16
} 
17
void loop(){ // debut de la fonction loop()
18
19
20
21
nombreReception=recevoirNombre(); // appel de la fonction recevoirNombre
22
23
24
if (nombreReception!=0) { // si un nombre a ete recu
25
26
  //--- affiche le nombre recu sur le port serie 
27
  Serial.print("Nombre recu ="); 
28
  Serial.println(nombreReception);
29
30
  nombreReception=0; // RAZ nombre recu
31
32
}
33
}
34
35
36
37
38
39
long recevoirNombre() { // fonction de reception d'un nombre sur le port serie
40
41
  int octetRecu=0; // variable pour octet recu
42
  int compt=0; // variable locale comptage caracteres recus
43
  boolean signe=true; // variable locale signe nombre recu
44
  long nombreRecu=0; // variable locale nombre recu
45
46
 while (Serial.available()>0) { // tant qu'un octet en reception 
47
48
	octetRecu=Serial.read(); // Lit le 1er octet recu et le met dans la variable
49
50
51
	if ((octetRecu=='-') && (compt==0))signe=false; // si Octet recu est le - et si c'est le 1er caractere recu - signe negatif
52
        compt=compt+1; // incremente compt
53
54
55
	octetRecu=octetRecu-48; // transfo valeur ASCII en valeur decimale
56
57
        // calcul du nombre a partir des valeurs recues  
58
	if ((octetRecu>=0)&&(octetRecu<=9)) nombreRecu = (nombreRecu*10)+octetRecu; 
59
60
        delay(1); // pause pour laisser le temps a la fonction available de recevoir octet suivant
61
62
} // fin tant que octet reception 
63
64
  if (signe==false) nombreRecu=nombreRecu*(-1); // prise en compte signe negatif
65
66
  return(nombreRecu); // renvoie le nombre calcul
67
68
} // fin fonction recevoirNombre
69
70
// ////////////////////////// Fin du programme //////////////////// 
71
72

On souhaite actionner le servo à l'angle saisie par l'utilisateur dans le terminal série.

Défi 2 : Contrôler 2 servo

L'utilisateur devra spécifier un code : « 200 » pour le 1er servo et 201 pour le second, suivi de l'angle correspondant.

Attention : Problème en réel

La fonction recevoirNombre() fonctionne sur TinkerCAD mais pas en réel. vous devez utiliser à la place cette fonction :

1
int recevoirNombre() { // fonction de reception d'un nombre sur le port serie
2
  int n = 0; 
3
  // if there's any serial available, read it:
4
  while (Serial.available() > 0) 
5
  {
6
    // look for the next valid integer in the incoming serial stream:
7
    int n = Serial.parseInt();
8
    // do it again:
9
    if (Serial.read() == '\n') {
10
11
     // Serial.print("Received number : ");
12
     // Serial.println(n);
13
      return n;
14
    }
15
    else
16
    {
17
      return 0;
18
    }
19
  }
20
} // fin fonction recevoirNombre