Arduino > Exemple de communication à un octet pour plusieurs fonctions

Contents (hide)

  1. 1. Code Arduino
  2. 2. Code Max

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:

CodeCommandeExpéditeur
0 à 180Contrôle de la position d'un servomoteurMessage envoyé par Max
181digitalWrite(13,LOW)Message envoyé par Max
182digitalWrite(13,HIGH)Message envoyé par Max
183digitalRead(4) == LOWMessage envoyé par Arduino
184digitalRead(4) == HIGHMessage envoyé par Arduino

1.  Code 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);
                }

        }

}

2.  Code Max


max_com_numerique.maxpat