Arduino > Exemple de communication à un octet pour plusieurs fonctions
Contents (hide)
Il est souvent plus simple (et surtout plus rapide) de créer son propre protocole de communication que d'essayer d'implémenter des systèmes complexes. Dans l'exemple suivant, on établit une communication entre l'Arduino et Max. Le protocole de communication est très simple: il n'est constitué que d'un seul octet. Chaque octet permet d'encoder une commande (un petit rappel, un octet peut avoir les valeur 0 à 255).
Voici les correspondances entre les octets et leur commande:
Code | Commande | Expéditeur |
0 à 180 | Contrôle de la position d'un servomoteur | Message envoyé par Max |
181 | digitalWrite(13,LOW) | Message envoyé par Max |
182 | digitalWrite(13,HIGH) | Message envoyé par Max |
183 | digitalRead(4) == LOW | Message envoyé par Arduino |
184 | digitalRead(4) == HIGH | Message envoyé par Arduino |
#include <Servo.h> // Un objet Servo // pour un servomoteur qui sera branché // a la broche 9 Servo servo; // Une variable pour l'état de // la broche 4 int state; void setup() { // Démarrer la communication série Serial.begin(57600); // Initialiser les broches pinMode(13,OUTPUT); pinMode(4,INPUT); // Lier l'objet Servo a la // broche 9 servo.attach(9); } void loop() { // On execute la boucle suivante seulement si des // donnees series sont disponibles while (Serial.available() > 0 ) { int code = Serial.read(); // On verifie le code et on execute la commande correspondate if ( code <= 180 ) { servo.write(code); } else if ( code == 181 ) { digitalWrite(13,LOW); } else if ( code == 182 ) { digitalWrite(13,HIGH); } } // On verifie un changement d'etat de la broche 4 if ( digitalRead(4) != state) { state = digitalRead(4); // Si l'etat a change, envoyer le code correspondant if ( state == LOW) { Serial.write(183); } else { Serial.write(184); } } }