Envoyer un message à la carte Aruino⚓
Champ de saisie du terminal série
Une fois que la carte Arduino est programmée, elle envoie à intervalle régulier des messages vers le PC. Concrètement, vous ne voyez rien se passer à ce stade : pour voir les messages envoyés par la carte Arduino au PC, vous allez devoir utiliser un logiciel de visualisation. Heureusement pour nous, le logiciel Arduino dispose d'un tel outil de visualisation : c'est le Terminal Série. Pour le lancer :
Une fois la fenêtre du Terminal Série ouverte :
vérifier que la vitesse de communication est la même que celle que vous
avez fixé dans le programme Arduino une fois bien paramétré vous devriez voir les messages s'afficher dans la fenêtre.
Le Terminal Série dispose d'un champ de saisie pour envoyer des caractères vers Arduino : c'est lui que nous utilisons dans cette activité.
Le Terminal série fonctionne en « réception» et en « émission».
Manipuler une chaîne de caractére
Lire la doc sur la classe String d'arduino.
A ce stade, on va pouvoir stocker tous les caractères reçus sur le port série dans une chaîne de caractères de taille variable : un objet String.
Entête déclarative :
On va déclarer à ce niveau :
une variable int pour stocker l'octet en réception (code ASCII du caractère).
une variable char pour stocker le caractère correspondant.
un objet String vide pour stocker la chaine de caractère
Fonction setup()
on initialise la communication série avec l'instruction Serial.begin(vitesse).
On utilisera 115200 bauds.
Fonction loop()
on « écoute » le port Série en testant l'arrivée d'un caractère à l'aide d'une simple condition if pour tester la présence d'un octet dans la file d'attente du port série avec la fonction
Serial.available()
Si un octet est reçu :
on récupère le caractère correspondant à l'aide de la fonction de conversion char()
on ajoute la caractère à l'objet String puis on l'affiche.
Tester le programme suivant Régler également les paramètres de transmission de la chaine de caractère à l'aide de la 2ème liste défilante. Mettre sur « No Line Ending » pour aucun ajout après la chaîne saisie.
//--- entete déclarative = variables et constantes globales
int octetReception=0; // variable de réception octet
char caractereReception=0; // variable de réception caractère
String chaineReception=""; // déclare un objet String vide
//--- la fonction setup() : exécutée au début et 1 seule fois
void setup() {
Serial.begin(115200); // initialise la vitesse de la connexion série
//-- utilise la meme vitesse dans le Terminal Série
} // fin de la fonction setup()
//--- la fonction loop() : exécutée en boucle sans fin
void loop() {
if (Serial.available()>0) { // si un caractère en réception
octetReception=Serial.read(); // lit le 1er octet de la file d'attente
caractereReception=char(octetReception); // récupere le caractere à partir du code Ascii
chaineReception=chaineReception+caractereReception; // ajoute la caractère au String
Serial.print("Liste des caracteres recus :");
Serial.println(chaineReception);
} // fin if
} // fin de la fonction loop()
Rappels de cous C++
Lire les rappels sur l'utilisation des boucles ici
le programme précédent recevait les caractères 1 à la fois, à chaque passage dans loop(). Il serait plus pratique de pouvoir recevoir une chaîne de caractère d'un seul coup, « tant
que des caractères sont disponibles »... et on va donc utiliser pour cela une
boucle while !
Entête déclarative
• on déclare une variable int pour stocker l'octet en réception (code ASCII du caractère).
• on déclare une variable char pour stocker le caractère correspondant.
• on déclare un objet String vide pour stocker la chaîne de caractère
Fonction setup()
• initialise la communication série avec l'instruction Serial.begin(vitesse). On utilisera 115200 bauds.
Fonction loop()
A ce niveau, on va « écouter » le port Série en testant l'arrivée d'un caractère à l'aide cette fois d'une boucle while pour tester la présence d'un octet dans la file d'attente du port série avec la fonction Serial.available()
Tant qu'un octet est présent : on récupère le caractère correspondant à l'aide de la fonction de conversion char(), puis on ajoute la caractère à l'objet String. On réalise une petite pause entre 2 réceptions.
Une fois toute la chaîne reçue,on l'affiche.
Tester le programme suivant Régler également les paramètres de transmission de la chaine de caractère à l'aide de la 2ème liste défilante. Mettre sur « No Line Ending » pour aucun ajout après la chaîne saisie.
// -- - entete déclarative = variables et constantes globales
int octetReception = 0; // variable de réception octet
char caractereReception = 0; // variable de réception caractère
String chaineReception = ""; // déclare un objet String vide
//--- la fonction setup() : exécutée au début et 1 seule fois
void setup() {
Serial.begin(115200); // initialise la vitesse de la connexion série
//-- utilise la meme vitesse dans le Terminal Série
}
//--- la fonction loop() : exécutée en boucle sans fin
void loop() {
while (Serial.available() > 0) { // si un caractère en réception
octetReception = Serial.read(); // lit le 1er octet de la file d'attente
caractereReception=char(octetReception); // récupere le caractere à partir du code Ascii
chaineReception=chaineReception+caractereReception; // ajoute la caractère au String
delay(1); // laisse le temps au caractères d'arriver
} // fin while - fin de réception de la chaine
//----- une fois la chaine reçue
if (chaineReception != "") { // la chaine n'est pas vide
Serial.print("Chaine recue : ");
Serial.println(chaineReception);
chaineReception = ""; // Vide la chaine
} // fin if
}
LED contrôlées par le terminal série
L'objectif ici est de contrôler l'état de 3 LEDs de couleurs différentes par l'entrée du terminal série :
En saisissant "B ON" la led bleu doit s'allumer, 'B OFF' elle s'éteint, idem pour les LEDs rouge et verte.
Partir du dernier programme existant, et développer progressivement, une solution à une LED, et compléter progressivement jusqu'à 3 LED.