Error processing code to control two servo motor via pc

edited January 2014 in Arduino

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 : )

Sign In or Register to comment.