We are about to switch to a new forum software. Until then we have removed the registration on this forum.
Hi everyone
Excuse my English because I'm not super good French and English
I stumbled upon this http://www.mon-club-elec.fr/pmwiki_mon_ Processing ...
My project and many more. The project is to control two servos with pc using processing and arduino code.
The problem is that the PROCESSING finds me every time an error in the code which however was recovered on the site
// Programme processing
// généré avec le générateur de code Processing
// www.mon-club-elec.fr
// par X. HINAULT - Mai 2011 - tous droits réservés
/////////////// Description du programme ////////////
// Utilise le port Serie
// Utilise la librairie GUI controlP5
// Utilise un/des réglage(s) linéaire(s) (Slider)
// XXXXXXXXXXXXXXXXXXXXXX ENTETE DECLARATIVE XXXXXXXXXXXXXXXXXXXXXX
// inclusion des librairies utilisées
import processing.serial.*; // importe la librairie série processing
import controlP5.*; // importe la librairie GUI controlP5
// cette librairie doit être présente dans le répertoire /libraries du répertoire Processing
// voir ici : http://www.sojamo.de/libraries/controlP5/
// déclaration objets
// --- port Série ---
Serial myPort; // Création objet désignant le port série
ControlP5 controlP5; // déclare un objet principal de la librairie GUI controlP5
Slider sPan, sTilt, sVitesse; // déclare un/ des objet Slider
// déclaration variables globales
//------ déclaration des variables de couleur utiles ----
int jaune=color(255,255,0);
int vert=color(0,255,0);
int rouge=color(255,0,0);
int bleu=color(0,0,255);
int noir=color(0,0,0);
int blanc=color(255,255,255);
int bleuclair=color(0,255,255);
int violet=color(255,0,255);
// XXXXXXXXXXXXXXXXXXXXXX Fonction SETUP XXXXXXXXXXXXXXXXXXXXXX
void setup(){ // fonction d'initialisation exécutée 1 fois au démarrage
// ---- initialisation paramètres graphiques utilisés
colorMode(RGB, 255,255,255); // fixe format couleur R G B pour fill, stroke, etc...
fill(0,0,255); // couleur remplissage RGB
stroke (0,0,0); // couleur pourtour RGB
rectMode(CORNER); // origine rectangle : CORNER = coin sup gauche | CENTER : centre
imageMode(CORNER); // origine image : CORNER = coin sup gauche | CENTER : centre
//strokeWeight(0); // largeur pourtour
frameRate(15);// Images par seconde
// --- initialisation fenêtre de base ---
size(450, 425); // ouvre une fenêtre xpixels x ypixels
background(0,0,0); // couleur fond fenetre
// --- initialisation des objets et fonctionnalités utilisées ---
//------------- initialisation 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, Serial.list()[0], 115200); // Initialise une nouvelle instance du port Série
//myPort = new Serial(this, "/dev/ttyUSB0", 115200); // Initialise une nouvelle instance du port Série
myPort.bufferUntil('\n'); // attendre arrivée d'un saut de ligne pour générer évènement série
//======== Initialisation Objets GUI ControlP5 =========
controlP5 = new ControlP5(this); // initialise l'objet principal de la librairie GUI controlP5
// typeObjet nomObjet=controlP5.addObjet(paramètres); // pour info : déclaration / initialisation possible en 1 ligne
// Textfield field = controlP5.addTextfield("myWindowTextfield",70,130,100,20); // exemple
//======== Initialisation Objets Sliders =========
//------------ slider Pan ----------------
// addSlider(theName, theMin, theMax, theDefaultValue, theX, theY, theW, theH)
sPan=controlP5.addSlider("sPan",0,180,90,40,height-50,350,25); // ajoute un Slider au ControlP5
//s1 = (Slider)controlP5.controller("MonSlider1"); // initialise l'objet Slider déclaré
// méthodes propres à l'objet Slider
sPan.setNumberOfTickMarks(181); // fixe le nombre crans - n+1 pour n valeurs
//s1.setNumberOfTickMarks((int(s1.max())+1); // fixe le nombre crans - n+1 pour n valeurs
sPan.showTickMarks(false); // affichage des repères
sPan.setSliderMode(Slider.FIX); // fonctionnement du slider FLEXIBLE ou FIX
// méthodes communes à tous les controles (objet Controller)
sPan.setLabelVisible(true); // affichage des labels
sPan.setLabel("PAN"); // fixe label objet
sPan.setDecimalPrecision(0); // fixe la précision
sPan.setColorActive(rouge); // fixe la couleur active
//sRouge.setColorBackground(color(255,255,0)); // fixe couleur fond
sPan.setColorForeground(rouge); // fixe couleur avant
//sRouge.setArrayValue(new float[] {100,255} ); // fixe les valeurs min/max du Slider ?
sPan.setColorCaptionLabel(blanc); // fixe couleur Label
sPan.setColorValueLabel(noir); // fixe la couleur valeur
//------------ slider Tilt ----------------
// addSlider(theName, theMin, theMax, theDefaultValue, theX, theY, theW, theH)
sTilt=controlP5.addSlider("sTilt",0,180,90,(height/2)-10,10,25,350); // ajoute un Slider au ControlP5
//s1 = (Slider)controlP5.controller("MonSlider1"); // initialise l'objet Slider déclaré
// méthodes propres à l'objet Slider
sTilt.setNumberOfTickMarks(181); // fixe le nombre crans - n+1 pour n valeurs
//s1.setNumberOfTickMarks((int(s1.max())+1); // fixe le nombre crans - n+1 pour n valeurs
sTilt.showTickMarks(false); // affichage des repères
sTilt.setSliderMode(Slider.FIX); // fonctionnement du slider FLEXIBLE ou FIX
// méthodes communes à tous les controles (objet Controller)
sTilt.setLabelVisible(true); // affichage des labels
sTilt.setLabel("TILT"); // fixe label objet
sTilt.setDecimalPrecision(0); // fixe la précision
sTilt.setColorActive(vert); // fixe la couleur active
//sTilt.setColorBackground(color(255,255,0)); // fixe couleur fond
sTilt.setColorForeground(vert); // fixe couleur avant
//sTilt.setArrayValue(new float[] {100,255} ); // fixe les valeurs min/max du Slider ?
sTilt.setColorCaptionLabel(blanc); // fixe couleur Label
sTilt.setColorValueLabel(noir); // fixe la couleur valeur
//------------ slider Vitesse ----------------
// addSlider(theName, theMin, theMax, theDefaultValue, theX, theY, theW, theH)
sVitesse=controlP5.addSlider("sVitesse",1,20,10,10,height-15,400,10); // ajoute un Slider au ControlP5
//s1 = (Slider)controlP5.controller("MonSlider1"); // initialise l'objet Slider déclaré
// méthodes propres à l'objet Slider
sVitesse.setNumberOfTickMarks(20); // fixe le nombre crans - n+1 pour n valeurs
//s1.setNumberOfTickMarks((int(s1.max())+1); // fixe le nombre crans - n+1 pour n valeurs
sVitesse.showTickMarks(false); // affichage des repères
sVitesse.setSliderMode(Slider.FIX); // fonctionnement du slider FLEXIBLE ou FIX
// méthodes communes à tous les controles (objet Controller)
sVitesse.setLabelVisible(true); // affichage des labels
sVitesse.setLabel("Vitesse"); // fixe label objet
sVitesse.setDecimalPrecision(0); // fixe la précision
sVitesse.setColorActive(jaune); // fixe la couleur active
//sVitesse.setColorBackground(color(255,255,0)); // fixe couleur fond
sVitesse.setColorForeground(jaune); // fixe couleur avant
//sVitesse.setArrayValue(new float[] {100,255} ); // fixe les valeurs min/max du Slider ?
sVitesse.setColorCaptionLabel(blanc); // fixe couleur Label
sVitesse.setColorValueLabel(noir); // fixe la couleur valeur
} // fin fonction Setup
// XXXXXXXXXXXXXXXXXXXXXX Fonction Draw XXXXXXXXXXXXXXXXXXXX
void draw() { // fonction exécutée en boucle
// tout se passe dans les fonctions évènements des contrôles graphiques
} // fin de la fonction draw()
// XXXXXXXXXXXXXXXXXXXXXX Autres Fonctions XXXXXXXXXXXXXXXXXXXXXX
//------------- 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 : **********
[s]String inString = myPort.readStringUntil('\n'); // chaine stockant la chaîne reçue sur le port Série
// saut de ligne en marque de fin
[/s]
if (inString != null) { // si la chaine recue n'est pas vide
print (inString); // affichage brut de la chaine recue
} // fin condition chaine recue pas vide
} // fin de la fonction de gestion des évènements Série
// Gestion des évènements des objets GUI controlP5 ----
//------ fonction gestion globale des évènements GUI controlP5
public void controlEvent(ControlEvent theEvent) {
//println(theEvent.controller().name());// affiche le nom de l'évènement
}
// ------ gestion évènement Slider ------
void sPan(float valeur) { // fonction évènement Slider de meme nom - reçoit la valeur
println("Evènement Slider Pan avec valeur = "+valeur);
println("Envoi sur port série = "+int(valeur));
if (valeur>100)myPort.write("servoPan("+int(valeur)+")\n"); // envoie la valeur suivie d'un saut de ligne sur le port Série
if ((valeur<100) && (valeur>9))myPort.write("servoPan(0"+int(valeur)+")\n"); // envoie la valeur suivie d'un saut de ligne sur le port Série
if (valeur<=9)myPort.write("servoPan(00"+int(valeur)+")\n"); // envoie la valeur suivie d'un saut de ligne sur le port Série
}
// ------ gestion évènement Slider ------
void sTilt(float valeur) { // fonction évènement Slider de meme nom - reçoit la valeur
println("Evènement Slider Tilt avec valeur = "+valeur);
println("Envoi sur port série = "+int(valeur));
if (valeur>100)myPort.write("servoTilt("+int(valeur)+")\n"); // envoie la valeur suivie d'un saut de ligne sur le port Série
if ((valeur<100) && (valeur>9))myPort.write("servoTilt(0"+int(valeur)+")\n"); // envoie la valeur suivie d'un saut de ligne sur le port Série
if (valeur<=9)myPort.write("servoTilt(00"+int(valeur)+")\n"); // envoie la valeur suivie d'un saut de ligne sur le port Série
}
// ------ gestion évènement Slider ------
void sVitesse(float valeur) { // fonction évènement Slider de meme nom - reçoit la valeur
println("Evènement Slider Vitesse avec valeur = "+valeur);
println("Envoi sur port série = "+int(valeur));
//if (valeur>100)myPort.write("Vitesse("+int(valeur)+")\n"); // envoie la valeur suivie d'un saut de ligne sur le port Série
if ((valeur<100) && (valeur>9))myPort.write("Vitesse(0"+int(valeur)+")\n"); // envoie la valeur suivie d'un saut de ligne sur le port Série
if (valeur<=9)myPort.write("Vitesse(00"+int(valeur)+")\n"); // envoie la valeur suivie d'un saut de ligne sur le port Série
}
//XXXXXXXXXXXXXXXXXX Fin du programme XXXXXXXXXXXXXXXXX
THE part of the code is concerned is
String inString = myPort.readStringUntil('\n'); // chaine stockant la chaîne reçue sur le port Série // saut de ligne en marque de fin
This section is organized as wrong but I do not see at all or is the error if someone had the solution?
thank you very much
Answers
Moved to Arduino section and reformatted code. We don't use BBCode here, but Markdown (see link below the textarea).
Search readStringUntil in the forum, you will see there is a bug where it is missing from Processing 2.1. To be fixed in next version.
OK . thank you : )