Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

  1. #21
    Membre expérimenté
    Il manque le else ! Et vous pouvez ne conserver qu’un seul appel à text() une fois la valeur de la String définie

    (et ça serait bien de donner une valeur initiale à valeurInString - même si par défaut c’est 0, ça fait plus propre)

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    import processing.serial.*; 
    Serial myPort;
    int valeurInString=0;
    String afficheEtat="OFF" ;
     
    void setup () {
      size(400, 300);
      myPort = new Serial(this, Serial.list()[0], 115200);
      myPort.bufferUntil ('\n'); 
      textFont(createFont("Grenoble SF", 24));
    }
     
    void draw() { 
      background(0); 
      if (valeurInString == 1) { 
        afficheEtat = "ON" ; 
      } else {
        afficheEtat = "OFF" ;
      }
      text("Etat led =  " + afficheEtat, 50, 100); // Affiche la valeur de valeurInString
    }
     
    void serialEvent (Serial myPort) {
      String inString = myPort.readStringUntil ('\n'); 
      if (inString != null) {.
        inString = trim (inString); // Supprime les caractères d'espace (blanc, tab, CR, LF,...) du début et de la fin de la chaîne
        valeurInString = (int (inString)) ;
      }
    }
    vous pourriez bien sûr définir afficheEtat dans serialEvent() et vous passer de valeurInString (en donnant une valeur initiale à afficheEtat) ou alors appeler text() avec le texte complet directement dans le if et dans le else

  2. #22
    Membre à l'essai
    Utiliser Arduino avec Processing etc..
    Bonsoir

    Le programme
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    // Programme tiré de l'exemple grahp de l'Ide Arduino
    import processing.serial.*; // Import la bibliothèque communication série + classes associées.
    Serial myPort; // Contient N° port utilisé ici 0.
    int valeurInString; // Variable globale, car je ne savais pas où la placer en variable locale.
    String afficheEtat ; // Variable pour l'affichage.
     
    void setup () {
      size(400, 300); // Taille de la fenêtre d'affichage en pixels / Format size(width, height).
      printArray(Serial.list());
      myPort = new Serial(this, Serial.list()[0], 115200);
      myPort.bufferUntil ('\n'); // Ne rien faire sur le port série, tant qu'une donnée nouvelle ligne n'est pas dans le tampon( pas sûr tout ça).
      textFont(createFont("Grenoble SF", 24));
      background(0); // Définir le noir pour la fenêtre de visualisation.
    }
    void draw() { // Appelle fonction dessin. On constate que l’axe des x représente le temps, l’axe des y la valeur de la donnée.
      background(0); // Rafraîchissement de la fenêtre pour éviter d'écrire les valeurs l'un sur l'autre.
      if (valeurInString == 1) { // Test si la donnée lue sur le port série et stockée dans valeurInString est égale à 1.
        afficheEtat = "ON" ; // True Demande affichage ON
        text("Etat led = " + afficheEtat, 50, 100); // Affiche la valeur de afficheEtat.
      } else {
     
        afficheEtat = "OFF" ; // False Demande affichage OFF
      }
      background (0) ; // C'est là qu'il fallait placer ce p.. de truc; juste avant d'afficher un nouvel état
      text("Etat led =   " + afficheEtat, 50, 100); // Affiche la valeur de afficheEtat.
    }
    void serialEvent (Serial myPort) {
      String inString = myPort.readStringUntil ('\n'); // Acquisition de la donnée en code ASCII.
      if (inString != null) { // Vérifie si une donnée est présente sur myPort.
        inString = trim (inString); // Elimine les blancs ?
        print (inString) ; // Affiche bien 0 et 1 dans la console.
        valeurInString = (int (inString)) ;
      }
    }


    La vidéo


    Je pense que le problème venait de la position du rafraîchissement d'écran.
    Pour le else j'avais cru lire qu'on pouvait l'omettre dans certains cas.

  3. #23
    Membre expérimenté
    Jolie vidéo encore - merci du partage

    Le else est nécessaire quand in veut faire un traitement différent si la condition et vraie ou fausse. On ne met pas de else quand quand on ne veut rien faire quand la condition est fausse.

    Sino le code n’est pas idéal ...

    Votre code d’affichage dit

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Effacer l’écran
    Si valeur vaut 1 (mémoriser message ON et afficher ON) Sinon (mémoriser message Off)
    Effacer l’écran
    Afficher la valeur mémorisée


    Il n’y a pas besoin d’effacer deux fois l’écran ni dans un cas de mémoriser et afficher ou juste de mémoriser

    Pourquoi ne pas faire:

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    Si valeur vaut 1 (mémoriser message ON) Sinon (mémoriser message Off)
    Effacer l’écran
    Afficher la valeur mémorisée

    C’est plus simple non ?

    (Pour éviter tout clignotement de l’écran il ne faudrait faire l’effacement que si la valeur a changé - là c’est pas grave de tout effacer et repeindre car ça va vite et on ne le voit pas mais si la scène était plus complexe ça clignoterait)

###raw>template_hook.ano_emploi###