Cours:ProcessingArduino
Communication Arduino -- Processing
Sommaire
Exercice 1
Vous allez à l'aide des différentes étapes proposées, commander des sorties de la carte Arduino (des leds), à partir d'une interface graphique écrite en langage Processing.
Programme Processing Un bouton ...
Commençons par créer une interaction avec l'utilisateur. Pour ce faire, on détermine une zone cliquable qui sera représentée par un cercle à l'écran.
Créer une fenêtre de taille 700x400
Dessiner un disque de diamètre 300, au centre de l'écran :
on pourra utiliser width et height
Afficher un message à chaque clic :
on utilisera println et vous vous servirez bien évidemment de la fonction mousePressed() qui est appelée chaque fois que l'on appuie sur un bouton de la souris.
Modifier pour que ce message ne s'affiche que si la souris est dans le disque
Dans la fonction mousePressed() de la question précédente, il faudra:
- calculer une valeur dx, différence entre la coordonnée x de la souris et le centre du cercle.
- idem en y
- calculer la distance entre le point désigné par la souris et le centre du cercle.
- en déduire si le clic souris est dans le disque (qui modélise le bouton) ou pas.
- si oui, on affiche un message par println.
Modifier l'état d'un drapeau à chaque clic :
le drapeau sera réalisé grâce à une variable de nom isAllume et de type boolean.
Changer la couleur du disque en fonction de l'état du drapeau (rouge ou noir)
Initialiser la liaison série à 9600 bauds/s
// On importe la librairie qui permet de communiquer en série
import processing.serial.*;
Serial myPort; // On crée une instance de la classe Serial
void setup()
{
...
// A vous de trouver quel port série est utilisé à l'aide de print(Serial.list())
String portName = Serial.list()[0];
// On initialise la communication série, à la même vitesse qu'Arduino
myPort = new Serial(this, portName, 9600);
...
}
Envoyer les caractères A ou E (allumer / éteindre), suivant l'état du flag, au clic
Pour envoyer par exemple le caractère A, il suffit d'utiliser la ligne suivante:
myPort.write("A\n");
Le caractère \n représente le caractère émis par la touche Entrée du clavier.
Programme Arduino ... une action
On modifiera l'état de la led 13 sur une carte Arduino, suivant la valeur du caractère envoyé.
Configurer la liaison arduino à la bonne vitesse
void setup() {
...
Serial.begin(9600);
...
}
Configurer les e/s de la carte arduino pinMode...
Lire l'état de la liaison série, et modifier en conséquence l'état de la led
int incomingByte;
...
void loop() {
if (Serial.available() > 0) { // Wow, there is some characters to read
// read the incoming byte:
incomingByte = Serial.read();
if (incomingByte == 'A') ...
...
}
}
Exercice 2
Plusieurs boutons
Modifier le programme processing en disposant 2 boutons, l'un pour allumer et l'autre pour ... éteindre !
côté arduino
Quelles modifications devons nous apporter ?
Exercice 3
En utilisant le shieldArduino, écrire le programme répondant au cahier des charges suivant :
Modifions l'interface en disposant désormais 2 boutons, appelés + et -.
Lors de l'appui sur + (resp. -), une led supplémentaire doit s'allumer (resp. s'éteindre).
Le protocole utilisé ( message envoyé sur la liaison série) sera tout simplement le nombre de led à allumer.
Pour aller plus loin
Nous avons, dans ce TD, travaillé sur la commande d'une carte Arduino à partir d'un programme Processing.
On pourra consulter le lien suivant pour étudier le transfert d'information d'une carte Arduino vers un programme Processing.: