Cours:ProcessingArduino

De troyesGEII
Aller à : navigation, rechercher

Communication Arduino -- Processing


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.


Question.jpg Créer une fenêtre de taille 700x400

Question.jpg Dessiner un disque de diamètre 300, au centre de l'écran :

on pourra utiliser width et height

Question.jpg 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.

Question.jpg 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.

Question.jpg Modifier l'état d'un drapeau à chaque clic :

le drapeau sera réalisé grâce à une variable de nom isAllume et de type boolean.

Question.jpg Changer la couleur du disque en fonction de l'état du drapeau (rouge ou noir)

Question.jpg 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);
  ...
}

Question.jpg 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é.

Question.jpg Configurer la liaison arduino à la bonne vitesse

void setup() {
  ...
  Serial.begin(9600);
  ...
}

Question.jpg Configurer les e/s de la carte arduino pinMode...

Question.jpg 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

Question.jpg Modifier le programme processing en disposant 2 boutons, l'un pour allumer et l'autre pour ... éteindre !

côté arduino

Question.jpg Quelles modifications devons nous apporter ?


Exercice 3

Todo.jpg 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.:

Arduino et Processing