Communication filaire entre deux cartes ARDUINO
Communication entre deux cartes ARDUINO
Introduction
Dans ce tutoriel, nous allons communiqué en reliant 2 carte ARDUINO en série. Le but sera de pouvoir effectué une commande d'allumage d'une led en bidirectionnel : Le bouton situé sur l'un des deux arduinos allumera la led de l'arduino opposé.
1/ Le matériel
- Deux cartes de type UNO
- Deux LED
- Deux plaques d'essai
- Des fils de connexions
- Deux résistances de 100Ω au minimum
- 4 boutons poussoir
2/ Le schéma
La liaison série s'effectue à l'aide de trois fils de connexion : Il faudra relier les deux cartes à la même masse (GND). Dans le programme suivant, nous allons déclaré les broches 11 et 10 pour la liaison série (RX, TX).
Attention il faudra bien penser à inverser les deux connections RX et TX sur chacune des cartes :
CARTE 1 : RX sur 10 et TX sur 11.
CARTE 2 : RX sur 11 et TX sur 10.
Ensuite, pour la connexion des boutons et des leds, si vous avez suivie les tutoriels d'IHM-3D "La led" et " Le bouton poussoir" cela ne devrez poser aucun problèmes :
Les premières broches des boutons seront à relier à la masse. Les seconds, pour le premier bouton la connexion se situe sur la PIN A0 de la carte et le deuxième bouton, sur la PIN A1.
Les résistances seront connectées en série des LEDS qui seront branchés sur la PIN 2 de la carte.
En image
3/ Le programme
#include <SoftwareSerial.h>
SoftwareSerial mySerial(10, 11); // RX, TX//on informe le microcontrôleur que l'on utilise ses broches pour une connexion série
String readString;
int led = 2;//variable led connectée sur la pin 2 de la carte
const byte bouton = A0;//variable du bouton connecté sur la pin A0 de la carte
const byte bouton1 = A1;//variable du bouton connecté sur la pin A1 de la carte
int etatOUV;// variable lecture de la position du bouton
int etatFER;// variable lecture de la position du bouton
void setup() {
mySerial.begin(9600);
Serial.begin (57600);
Serial.println ("Bienvenue sur les tutoriels d'IHM 3D");
delay (1000);
Serial.println("");
Serial.println ("Je dois recevoir la lettre a ou b pour que ma led puisse s'allumer ou s'eteindre");
pinMode(led , OUTPUT);
pinMode (bouton, INPUT_PULLUP);// ne pas oublier la résistance de PULLUP Attention!!!
pinMode (bouton1, INPUT_PULLUP);//les commandes sont inversés
}
void loop() {
etatOUV = digitalRead(bouton);//etatOUV lit la position du bouton
if (etatOUV == 0) {//si elle est égale à 0 (donc à 1)
mySerial.write("c");//on envoie la lettre c sur la connexion série 10,11
Serial.println("c");
} delay (50);
etatFER = digitalRead(bouton1);//etatFER lit la position du bouton
if (etatFER == 0) {//si elle est égale à 0 (donc à 1)
mySerial.write("d");//on envoie la la lettre d sur la connexion série 10,11
Serial.println("d");
} delay (50);
while (mySerial.available()) {
delay(10);
char c = mySerial.read();
readString += c;
}
if (readString.length() > 0) {//si je reçois des valeurs
Serial.println(readString);//j'imprime ses valeurs
if (readString.indexOf("a") != -1)//si je reçois a
{
digitalWrite(led , HIGH);//j'allume ma led
}
if (readString.indexOf("b") != -1)//si je reçois b
{
digitalWrite(led , LOW);//j'éteins ma led
}
readString = "";
}
}
#include <SoftwareSerial.h>
SoftwareSerial mySerial(10, 11); // RX, TX//on informe le microcontrôleur que l'on utilise ses broches pour une connexion série
String readString;
const byte bouton = A0;//variable du bouton connecté sur la pin A0 de la carte
const byte bouton1 = A1;//variable du bouton connecté sur la pin A1 de la carte
int led = 2;//variable led connectée sur la pin 2 de la carte
int etatOUV;// variable lecture de la position du bouton
int etatFER;// variable lecture de la position du bouton
void setup()
{
mySerial.begin(9600);
Serial.begin (57600);
Serial.println ("Bienvenue sur les tutoriels d'IHM 3D");
delay(1000);
Serial.println("");
Serial.println ("Je dois recevoir la lettre c ou d pour que ma led puisse s'allumer ou s'eteindre");
pinMode(led , OUTPUT);
pinMode (bouton, INPUT_PULLUP);// ne pas oublier la résistance de PULLUP Attention!!!
pinMode (bouton1, INPUT_PULLUP);//les commandes sont inversés
}
void loop()
{
etatOUV = digitalRead(bouton);//etatOUV lit la position du bouton
if (etatOUV == 0) {//si elle est égale à 0 (donc à 1)
mySerial.write("a");//on envoie la lettre a sur la connexion série 10,
Serial.println("a");
} delay (50);
etatFER = digitalRead(bouton1);//etatFER lit la position du bouton
if (etatFER == 0) {//si elle est égale à 0 (donc à 1)
mySerial.write("b");//on envoie la la lettre b sur la connexion série 10,11
Serial.println("b");
} delay (50);
while (mySerial.available()) {
delay(10);
char c = mySerial.read();
readString += c;
}
if (readString.length() > 0) {//si je reçois des valeurs
Serial.println(readString);//j'imprime ses valeurs
if (readString.indexOf("c") != -1)//si je reçois c
{
digitalWrite(led , HIGH);//j'allume ma led
}
if (readString.indexOf("d") != -1)//si je reçois d
{
digitalWrite(led , LOW);//j'éteins ma led
}
readString = "";
}
}
4/ Résutat
Commencez par ouvrir votre moniteur série. Paramétrez le sur la vitesse de 57600baud.
Appuyez sur les boutons de la carte connectée. La LED doit s'allumer et s'éteindre selon vos commandes. Vous devez recevoir les lettre a et b comme indiqué dans le programme.
5/ Conclusion
Ce document tutoriel est maintenant terminé. N'hésitez pas à parcourir le site d'IHM-3D et de découvrir ses activités et de poser vos questions à l'adresse située en pied de page.
Ensemble carte UNO R3 (CH340) + cable USB compatoble ARDUINO
7.64 €
La carte UNO R3 est basée sur un ATmega328 et est compatible ARDUINO. Avec le câble USB, vous pouvez directement vous connecter à cette carte en installant les pilotes CH340. Idéal pour débuter dans l'automatisme et l'électronique.