Cours:ProcessingArduinoProjet : Différence entre versions

De troyesGEII
Aller à : navigation, rechercher
({{Rouge|String ... Int}})
 
(9 révisions intermédiaires par 2 utilisateurs non affichées)
Ligne 19 : Ligne 19 :
 
void loop()
 
void loop()
 
{
 
{
   Serial.println(random(1024));
+
  static unsigned int i=0;
   delay(300);
+
  if (i==1023) i=0;
 +
          else i++;
 +
   Serial.println(i);
 +
   delay(100);
 
}
 
}
 
</source>
 
</source>
  
  
<source lang=c>
+
<source lang=java>
// inclusion des librairies utilisées
 
 
import processing.serial.*; // importe la librairie série processing
 
import processing.serial.*; // importe la librairie série processing
// --- port Série ---
 
 
Serial  myPort; // Création objet désignant le port série
 
Serial  myPort; // Création objet désignant le port série
 
+
 
void setup()
 
void setup()
 
{
 
{
  // fonction d'initialisation exécutée 1 fois au démarrage
+
   background(0); // fond noir
  //---- initialisation graphique ----
 
   background(0,0,0); // fond noir
 
 
 
 
   //------------- initialisation port série ----
 
   //------------- initialisation port série ----
  println("Ports série disponibles sur le PC :");
+
   myPort = new Serial(this, "/dev/ttyACM1", 115200); // Initialise une nouvelle instance du port Série
  println(Serial.list()); // affiche dans la console la liste des ports séries
 
  // Vérifier que le numéro du port série utilisé est le meme que celui utilisé avec  Serial.list()[index]
 
   myPort = new Serial(this, "/dev/ttyACM0", 115200); // Initialise une nouvelle instance du port Série
 
 
 
 
} // fin fonction Setup
 
} // fin fonction Setup
 
+
 
void  draw()
 
void  draw()
 
{ // fonction exécutée en boucle
 
{ // fonction exécutée en boucle
 
+
 
} // fin de la fonction draw()
 
} // fin de la fonction draw()
 
+
 
//------------- Fonction de gestion des évènements série ----
 
//------------- Fonction de gestion des évènements série ----
 
void serialEvent (Serial myPort)
 
void serialEvent (Serial myPort)
 
{ // fonction appelée lors de la survenue d'un évènement série
 
{ // fonction appelée lors de la survenue d'un évènement série
 
   // ******** Gestion de la valeur reçue sur le port 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
 
   String inString = myPort.readStringUntil('\n'); // chaine stockant la chaîne reçue sur le port Série
  // saut de ligne en marque de fin
 
 
 
   if (inString != null)
 
   if (inString != null)
 
   { // si la chaine recue n'est pas vide
 
   { // si la chaine recue n'est pas vide
                 print(inString); // affiche chaine recue
+
                 println(inString); // affiche chaine recue
 +
                inString=inString.trim();
 +
                println(int(inString));
 
   } // fin condition chaine recue pas vide
 
   } // fin condition chaine recue pas vide
 
} // fin de la fonction de gestion des évènements Série
 
} // fin de la fonction de gestion des évènements Série
 +
</source>
 +
 +
={{Rouge|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.
 +
 +
Les différentes valeurs étant séparées par un retour à la ligne (\n), on récupère les données (myPort.readStringUntil) jusqu'à trouver ce caractère.
 +
 +
Afin de convertir les caractères reçus en nombre, on utilise :
 +
*[https://processing.org/reference/trim_.html trim()]: pour "nettoyer" la chaîne des caractères indésirables (esapce, retour à la ligne)
 +
*[https://processing.org/reference/intconvert_.html int()]: pour effectuer un [https://fr.wikibooks.org/wiki/Programmation_Java/Transtypage transtypage]
 +
 +
{{Todo|Vérifiez le bon fonctionnement du programme}}
 +
 +
={{Rouge|Tracé}}=
  
// Gestion des évènements des objets GUI controlP5 ----
+
Vous êtes prêt maintenant à tracer la courbe. Pour cela, votre programme devra au minimum réaliser les actions suivantes :
</source>
+
 
 +
*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 [https://processing.org/reference/map_.html 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" !
 +
 
 +
={{Rouge|Améliorations}}=
  
={{Rouge|}}=
+
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
  
={{Rouge|}}=
+
On utilisera pour ce faire des "boutons" sur le logiciel processing

Version actuelle datée du 27 novembre 2016 à 17:43

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.

Todo.jpg Vérifier leur fonctionnement.

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.

Les différentes valeurs étant séparées par un retour à la ligne (\n), on récupère les données (myPort.readStringUntil) jusqu'à trouver ce caractère.

Afin de convertir les caractères reçus en nombre, on utilise :

  • trim(): pour "nettoyer" la chaîne des caractères indésirables (esapce, retour à la ligne)
  • int(): pour effectuer un transtypage

Todo.jpg Vérifiez le bon fonctionnement du programme

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