Arduino et Serial
Premier article de la série sur Arduino.
Au programme : communication avec l’ordinateur via Serial.
Résultat attendu
Vous connaissez le sketch blink par cœur ? Je vous propose de le modifier, pour changer la vitesse de clignotement à la volée en la rentrant directement dans la console série.
Matériel et logiciels utilisés
Le matériel est très raisonnable : il suffit d’un arduino et d’un câble pour le relier à l’ordinateur.
Si vous utilisez un matériel compatible qui ne possède pas de DEL intégrée sur une sortie digitale, il vous faudra également une DEL ainsi qu’une résistance et de quoi les relier entre eux (des fils et une plaque prototype par exemple).
Niveau logiciel, on utilisera l’IDE officielle.
Ressources utiles
La table ASCII
L’utilisation de la console série de l’IDE arduino implique que les caractères soient envoyés à l’arduino sous leur représentation ASCII, il est donc utile d’avoir une table de correspondance.
Pour la suite de l’article, seulement quelques caractères devraient vous être utiles, regroupés dans le tableau ci-dessous.
Caractère | retour à la ligne | . | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
---|---|---|---|---|---|---|---|---|---|---|---|---|
Code | 10 | 46 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 |
Utilisation de Serial
Et bien sûr, il faut avoir un minimum de connaissance de l’interface Serial.
Pour réaliser ce projet, il suffit de comprendre un exemple donné sur le site officiel1, que je recopie ci-dessous2.
// for incoming serial data
int incomingByte = 0;
void setup() {
Serial.begin(9600); // opens serial port, sets data rate to 9600 bps
}
void loop() {
// send data only when you receive data:
if(Serial.available() > 0) {
// read the incoming byte:
incomingByte = Serial.read();
// say what you got:
Serial.print("I received: ");
Serial.println(incomingByte, DEC);
}
}
À vous !
Vous avez tous les éléments en main pour réussir ce premier projet. Et si vous bloquez, l’astuce ci-dessous peut vous aider à repartir.
Amusez-vous bien !
Astuce
L’arduino va recevoir les caractères que vous entrez les un après les autres. Comment savoir lorsque lorsque la série de caractères est terminée ?
Par exemple, si je rentre « 100 » au clavier, l’arduino va recevoir successivement :
- un 1 ; est-ce que cela veut dire que le délai vaut 1 ?
- un 0 ; est-ce que cela veut dire que le délai vaut 10 ?
- un 0 ; est-ce que cela veut dire que le délai vaut 100 ?
Il faut donc un caractère qui donne la fin de la séquence. Vous avez le choix :
- vous pouvez choisir un caractère, par exemple le point (« . ») ;
- vous pouvez considerer que tout caractère qui n’est pas un chiffre donne la fin d’une séquence ;
- vous pouvez choisir un caractère non imprimable comme le retour à la ligne (code ASCII 10)
- …
Inclure le retour à la ligne dans les caractères qui donnent la fin d’une séquence est intéressant : il suffira alors de choisir dans la console série de rajouter ce caractère la fin du message envoyé. Si vous faites ainsi, Il suffira de rentrer « 100 » dans la console série pour que les caractères de codes ASCII 49, 48, 48 et 10 soient envoyés à l’arduino.
Conclusion
Vous savez maintenant faire communiquer l’arduino et l’ordinateur dans le sens le plus difficile.
Si vous voulez aller dans l’autre sens, pourquoi ne pas afficher un message donnant les instructions d’utilisation dans la console série lorsque vous la lancez ?
Pour ce faire, regardez du côté des fonctions print() et println().
Dans le prochain épisode, promis, plus de DEL. D’ici là, amusez-vous bien !
- ↑ L’exemple est entre autre sur la page http://arduino.cc/en/Serial/Available.
- ↑ L’exemple est dans le domaine public : “Code samples in the reference are released into the public domain” cf http://arduino.cc/en/Reference/StyleGuide.