Last active
June 3, 2021 14:11
-
-
Save HorlogeSkynet/d8ccc372afa7febb04a5 to your computer and use it in GitHub Desktop.
Get data from Arduino with serial port on Processing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* Programme nécessaire, et donc réalisé, dans le but de modéliser un projet TIPE */ | |
/* Année scolaire 2015 - 2016 */ | |
import processing.serial.*; | |
int indArduino; | |
Serial portSerie; | |
void setup() | |
{ | |
/* ... */ | |
//On assigne '-1' pour forçer l'exception de 'checkArduino()', et donc l'appel de 'connectArduino()' à la première itération | |
indArduino = -1; | |
//On crée le thread qui gèrera la fermeture de fenêtre | |
prepareExitHandler(); | |
/* ... */ | |
} | |
void draw() | |
{ | |
/* ... */ | |
getData(); | |
/* ... */ | |
} | |
void getData() | |
{ | |
//On vérifie si l'Arduino est toujours branchée | |
checkArduino(); | |
//On lit les données jusqu'au caractère de fin de buffer (choix personnel) | |
String string = portSerie.readStringUntil('\n'); | |
if(string != null) | |
{ | |
//On efface les ' ' eventuels présents aux extrémités de la chaîne | |
string = trim(string); | |
//Déformatage des données, récupérées sous forme d'une chaîne de caractères | |
int data[] = int(split(string, ':')); //Avec ':' caractère de délimitation entre les données | |
if(data != null) | |
{ | |
/* Traitement des données, présentes dans le tableau 'data[]' */ | |
} | |
} | |
} | |
private void prepareExitHandler() | |
{ | |
Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() | |
{ | |
public void run() | |
{ | |
try | |
{ | |
closeSerial(); | |
} | |
catch(Exception e) | |
{ | |
//La fonction 'closeSerial()' n'a peut-être pas pu être exécutée correctement | |
} | |
} | |
})); | |
} | |
void connectArduino() | |
{ | |
int i; | |
String string; | |
String listePorts[]; | |
while(true) | |
{ | |
println("En attente d'une connexion avec l'Arduino..."); | |
listePorts = Serial.list(); | |
if(listePorts != null) | |
{ | |
//On parcourt la boucle à l'envers car l'Arduino a sûrement été branchée en dernier | |
for(i = listePorts.length - 1; i >= 0; i--) | |
{ | |
string = listePorts[i]; | |
//On vérifie si la chaîne contient les caractéristiques d'un périphérique série... | |
//... pour chaque OS (Linux || MAC OS || Windows) | |
if(string.indexOf("USB") >= 0 || string.indexOf("usbserial") >= 0 || string.indexOf("COM") >= 0) | |
{ | |
//On essaie de créer un objet gérant le dialogue avec le port série | |
portSerie = new Serial(this, listePorts[i], 9600); | |
//On nettoie le port série | |
portSerie.clear(); | |
//On lit la chaîne potentiellement présente | |
string = portSerie.readStringUntil('\n'); | |
//Si elle comporte les caractères spécifiques du buffer fixés sur l'Arduino | |
if(string != null && string.indexOf('\n') > 0 && string.indexOf(':') > 0) | |
{ | |
//On fixe l'indice de l'élément choisi dans le tableau | |
indArduino = i; | |
println("Arduino connectée."); | |
return; | |
} | |
//Sinon, le périphérique auquel on s'est connecté n'est pas l'Arduino | |
else | |
{ | |
stop(); | |
continue; | |
} | |
} | |
} | |
} | |
delay(1500); | |
} | |
} | |
void checkArduino() | |
{ | |
try | |
{ | |
//On tente d'accéder à l'élément du tableau à la position 'indArduino' fixée plus haut | |
String string = Serial.list()[indArduino]; | |
//Pour éviter un Warning de Processing... | |
string = trim(string); | |
} | |
//On vérifie à l'aide d'une exception si l'on peut toujours accéder à cet élément dans le tableau... | |
catch(ArrayIndexOutOfBoundsException e) | |
{ | |
println("Arduino déconnectée."); | |
closeSerial(); | |
//... si tel n'est pas le cas, on tente une (re)connexion avec l'Arduino | |
connectArduino(); | |
} | |
} | |
void closeSerial() | |
{ | |
if(portSerie != null) | |
{ | |
portSerie.clear(); | |
portSerie.stop(); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment