Cours:ProcessingArduinoProjet
Nous disposons d'un PC et d'une carte arduino avec sa carte d'extension, qui possède un certain nombre de capteurs, dont un capteur de luminosité.
Le but de ce projet est de tracer une courbe de luminosité sur le PC.
Les données seront transmises en utilisant la liaison série, comme étudié précédemment, et l'affichage dévolu à processing.
Programmes de base
Les 2 programmes suivant, respectivement arduino et processing, mettent en place la liaison série.
void setup()
{
Serial.begin(115200);
}
void loop()
{
static unsigned int i=0;
if (i==1023) i=0;
else i++;
Serial.println(i);
delay(100);
}
import processing.serial.*; // importe la librairie série processing
Serial myPort; // Création objet désignant le port série
void setup()
{
background(0); // fond noir
//------------- initialisation port série ----
myPort = new Serial(this, "/dev/ttyACM1", 115200); // Initialise une nouvelle instance du port Série
} // fin fonction Setup
void draw()
{ // fonction exécutée en boucle
} // fin de la fonction draw()
//------------- Fonction de gestion des évènements série ----
void serialEvent (Serial myPort)
{ // fonction appelée lors de la survenue d'un évènement série
// ******** Gestion de la valeur reçue sur le port série : **********
// saut de ligne en marque de fin
String inString = myPort.readStringUntil('\n'); // chaine stockant la chaîne reçue sur le port Série
if (inString != null)
{ // si la chaine recue n'est pas vide
println(inString); // affiche chaine recue
inString=inString.trim();
println(int(inString));
} // fin condition chaine recue pas vide
} // fin de la fonction de gestion des évènements Série
String ... Int
Vous pouvez constater que le programme processing reçoit une chaîne de caractères et non un nombre de la carte arduino.
De ce fait, il va être nécessaire d'effectuer une conversion de type et vous allez, pour cela, devoir utiliser les fonctions Java :
- parseInt() (Voir une documentation Java ICI)
- substring() (Voir une documentation Java ICI)
- length() (Voir une documentation Java ICI)
Remarque : Il est nécessaire de supprimer les 2 derniers caractère de la chaîne avant d'effectuer la conversion.
Une autre possibilité, sans doute plus simple, est d'utiliser :
- trim(): pour "nettoyer" la chaîne des caractères indésirables (esapce, retour à la ligne)
- int(): pour effectuer un transtypage
Modifier votre programme et afficher la valeur après conversion, avec par exemple :
int i = ....;
println(i);
Tracé
Vous êtes prêt maintenant à tracer la courbe. Pour cela, votre programme devra au minimum réaliser les actions suivantes :
- Mettre les valeurs dans un tableau au fur et à mesure de leur arrivée.
- Trouver les valeurs minimums et maximums
- Faire une mise à l'échelle en fonction de la taille de votre écran
- Faire le tracé
Remarque : la mise à l'échelle peut se faire par un calcul ou avec l'utilisation de la primitive map. Dans le premier cas, la difficulté est de trouver le calcul à faire et dans le deuxième cas il s'agit de comprendre comment fonctionne "map" !
Améliorations
Terminé, il est temps d'améliorer votre programme en :
- permettant de choisir le capteur représenté (Température ou Luminosité)
- permettant de changer la période d'échantillonnage
On utilisera pour ce faire des "boutons" sur le logiciel processing