Outils pour utilisateurs

Outils du site


wiki:tutoriels:processing:processing_9:processing_9

Ceci est une ancienne révision du document !


ARDUINO : COMMENT ENVOYER DES DONNÉES DE TYPE FLOAT, DOUBLE OU INT SUPÉRIEUR 255 VIA LE PORT SÉRIE

  • Porteur(s) du projet : Damien MUTI DESGROUAS
  • Date : 05/11/2020
  • Licence : libre !
  • Contexte : Apprentissage

introduction

Ce tutoriel permet d'étendre la notion d'affiche interactive à des objets quelconques comme par exemple des vêtements.

L'objectif est de lancer un média (son, vidéo, animation Processing) lorsque la distance détectée à l'aide d'un capteur de distance à ultrasons est inférieure à un seuil défini par l'utilisateur.

Un des enjeux est donc de lire les données issues du capteur de distance branchée sur la carte Arduino et d'envoyer ces données via le port série à l'application Processing. Ce problème est traité dans le tutoriel suivant :

Le programme qui suit est fortement inspiré de celui développé pour la gestion de l'interactivité des affiches interactives.

Algorithme

Si

Solution

Pour contourner ce problème, une des solution est de convertir le nombre (float, int, long, double, etc.) en une chaîne de caractère (String) et d'envoyer cette chaîne sur le port série via la méthode Serial.print(), du coté de la carte Arduino.

Du coté de la réception sur l'application Processing, la chaîne de caractère envoyée par la carte Arduino sur le port série est d'abord lue par la méthode readString() de la librairie Serial. Ensuite, la chaîne est convertie en un entier grâce à la méthode int(), ou en un nombre flottant grâce à la méthode float().

Référence :

Mise en œuvre : Envoie de la distance lue par un capteur à ultrason

Montage

On utilise un capteur à ultrason Grove pour mesurer une distance. On envoie ensuite la distance mesurée à l'application Processing. Il convient de brancher le capteur Grove sur l'entrée digitale D7. Le montage est le suivant :

code Arduino

Le code Arduino est le suivant :

#include "Ultrasonic.h"

Ultrasonic ultrasonic(7);
void setup() {
  Serial.begin(9600);
}
void loop() {
  long distance;

  distance = ultrasonic.MeasureInCentimeters(); // two measurements should keep an interval
  Serial.print(distance);//0~400cm
  //Serial.println(" cm");
  delay(250);
}

Le code est disponible sur le lien suivant : ultrasonic_envoie_donn_es_port_serie.ino.zip

code Processing

Le code Processing est le suivant :

/*
références : https://forum.processing.org/one/topic/converting-string-to-int.html
 */

import processing.serial.*;

Serial myPort;  // Create object from Serial class
String  inBuffer;      // Data received from the serial port
int inEntier;

void setup() {
  size(200, 200);
  // I know that the first port in the serial list on my mac
  // is always my  FTDI adaptor, so I open Serial.list()[0].
  // On Windows machines, this generally opens COM1.
  // Open whatever port is the one you're using.

  // Print a list of the serial ports, for debugging purposes:
  printArray(Serial.list());

  String portName = Serial.list()[32];
  myPort = new Serial(this, portName, 9600);
}

void draw() {
  // lecture des données sur le port série
  if ( myPort.available() > 0) {  // si une donnée est disponible sur le port série
    inBuffer = myPort.readString(); // lire la donnée et la stoquer dans inBuffer (chaine de caractères - String) 
  }
  //conversion des données String -> int
  if (inBuffer != null) { // si la chaine de caractère n'est pas nulle
    println("inBuffer="+inBuffer +"(String)"); //afficher la chaine de caractère inBuffer
    inEntier=int(inBuffer); // convertir la chaine de caractère en un entier
    println("inEntier="+inEntier+"(int)"); // afficher l'entier correcpondant
  }
  
  // test des données
  color c ;
  if (inEntier<25){
    c = color(255,0,0);
  }
  else{
    c = color(0,0,255);
  }
  fill(c);
  rect(0,0,width,height);
}

Le code est disponible sur le lien suivant : lecture_donnees_port_serie.pde.zip

wiki/tutoriels/processing/processing_9/processing_9.1604581885.txt.gz · Dernière modification: 2020/11/05 14:11 de damien.muti