Comment afficher un Serial.Print() dans un champ

Bonjour...
Du moins; Bonsoir à tous.

C'est mon premier post ici.

Je viens d'acquérir une Arduino Uno et je fais quelques tests pour comprendre comment ça fonctionne.
Je l'ai commandé en même temps qu'un accéléromètre MMA7361L (ici).
Après quelques tests, j'ai lancé l'exemple suivant pour tester l'accéléromètre.

/*
  AnalogReadSerial
 Reads an analog input on pin 0, prints the result to the serial monitor.
 Attach the center pin of a potentiometer to pin A0, and the outside pins to +5V and ground.
 
 This example code is in the public domain.
 */

// the setup routine runs once when you press reset:
void setup() {
  // initialize serial communication at 9600 bits per second:
  Serial.begin(9600);
}

// the loop routine runs over and over again forever:
void loop() {
  // read the input on analog pins :
  int sensorValue1 = analogRead(A0);
  int sensorValue2 = analogRead(A2);
  int sensorValue3 = analogRead(A4);
  // print out the values you read:
  Serial.print(" X = ");
  Serial.print(sensorValue1 - 340);
  Serial.print("\t");
  Serial.print(" Y = ");
  Serial.print(sensorValue2 - 330);
  Serial.print("\t");
  Serial.print(" Z = ");
  Serial.print(sensorValue3 - 345);
  Serial.print("\t");
  Serial.print(" 0g = ");
  Serial.print(sensorValue4 - 345);
  Serial.print("\t");
  Serial.println();
  delay(0.0001);        // delay in between reads for stability
}

Dans le moniteur série, l'affichage est en boucle (normale; la fonction est un void loop() me direz-vous) et ça m'agace un peu.

Je voudrait pouvoir afficher les 4 résultats (x, y, z et 0g) dans quatre champs de texte (immobiles donc).
J'ai pensé essayer "text()" pour encadrer chaque Serial.Print()...
Naturellement, ça ne passe pas.
Quelqu'un aurait une solution pour moi?
Je suis débutant de chez débutant.

PS : Je ne connais que très peux le C, je fais surtout du HTML (rien à voir.... :cold_sweat:)

Malheureusement si je comprends bien ton problème tu ne pourras pas le résoudre par le terminal série, il faut programmer un soft !

Tu peux utiliser processing dont le langage est très proche de celui de l’arduino (d’ailleurs l’IDE arduino c’est du processing). Après tu peux utiliser n’importe quel langage, VB6, VB.net, C, C++, python …

Ce que tu peux faire, c’est écrire une ligne puis l’effacer complètement et la réécrire ensuite avec les nouvelles valeurs.
Tu auras l’impression que seuls les caractères qui changent sont réécrits.
Essaie en remplaçant “Serial.println();” par

delay(10);//delai avant d'effacer
for (int i=0;i<128;i++)
{
  Serial.write(8);//caractere d'effacement
}

Le problème c’est que ça ne marche pas avec le terminal arduino. Il faut un autre terminal comme minicom ou hyperterminal…

Le problème c'est que ça ne marche pas avec le terminal arduino. Il faut un autre terminal comme minicom ou hyperterminal...

=( =(

Malheureusement si je comprends bien ton problème tu ne pourras pas le résoudre par le terminal série, il faut programmer un soft !

Tu peux utiliser processing dont le langage est très proche de celui de l'arduino (d'ailleurs l'IDE arduino c'est du processing). Après tu peux utiliser n'importe quel langage, VB6, VB.net, C, C++, python ...

=( =( =( =(

Bon, entre temps, j'ai trouvé sur le site de Processing un sketch qui affiche (dans des champs) des valeurs "calculées" (Les fonctions étant déjà déclarées).
Si mon vocabulaire est mauvais, n'hésitez pas à me recadre... :sweat_smile:

Si je vous comprends bien, je peux remplacer les valeurs obtenues grâce les fonctions par les valeurs lues par mon port.
Il faut que je précise au passage que je fonctionne essentiellement par modification de codes existants pour comprendre le(s) langage(s) d'où ma nécessité de partir d'exemples existants.
Ainsi, j'aurai programme qui lira les données directement de l'Arduino (je crois et j'espère).

Mais dans tous les tests que j'ai pu faire, Processing me refuse toute lecture de mon port USB. Je pensais que ça se faisait comme comme dans l'interface Arduino; en sélectionnant le port avant la compilation. or, je n'ai rien trouvé de tel dans Processing.

Merci d'avance de vos réponses.

PS : Je ne mets pas plus de code pour le moment car je veux être sûr de la démarche avant de coder plus.
Merci encore.

Non mais pour afficher quatre valeurs y'a aucune difficultée. La logique quelque soit le langage sera :

  • Lire la ligne
  • Séparer les valeurs
  • Les afficher

Perso je travaille sous VB.NET, il faut même pas une dizaine de lignes pour faire ça, sous Processing c'est mon avis personnel, je trouve ça plus complexe ... Mais l'interface est beaucoup plus simple.

Merci. B@tto.
"Lire la ligne" ?
En somme, Processing (dans mon cas) ne lit pas l'Arduino (donc pas le port usb) mais un réceptacle (tiers programme - ou fichier xls) des données émises par l'arduino... :fearful: Je commence déjà à m'embrouiller :fearful:

Et enfin, je demande à Processing de lire le fichier généré...
Dis-moi que je me rapproche. :.

Désolé j'étais en train de bosser justement mon port série sous VB.NET et tu as une fonction readline qui te permet d'attendre le println si tu veux. En gros je lis ma trame d'un seul bloc.

Sinon non ton logiciel reçoit direct l'info en quelque sorte, il va lire le port série dans lequel les données sont stockées, une fois lues elles sont effacées. Pas de programme tiers ^^

Merci.
J'ai fait quelques essais, je commence à comprendre.
Maintenant, je vais essayer de faire comme tout le monde...
]:smiley: Tenter mon premier mini programme ]:smiley:

Merci encore.

Des fois pour faire juste quelques affichage de test, au lieu de s'embêter à développer une interface en VB ou n'importe quel autre langage, il peut être plus simple et surtout plus rapide d'utiliser hyperterminal (ou un autre soft terminal) en émulation VT100 et d'utiliser les codes d'échappement.
Avec les codes d'échappement on peut se déplacer dans l'écran (haut, bas, gauche, droite), effacer des zones, changer la taille de la police (normal ou gros), inverser le contraste. C'est rustique mais simple à mettre en oeuvre.
Pas besoin de développement. en faisant quelques define on a même pas besoin d'apprendre les codes.

Désolé de deterer le topic, mais comment inserer les codes d'échappement ?

Le "ESC [ 2J" pour ma part

nathan30:
Désolé de deterer le topic, mais comment inserer les codes d'échappement ?

Le "ESC [ 2J" pour ma part

Ca devrait le faire:

Serial.print(27,DEC);
Serial.print("[2J");

Et donc dans mon terminal, je dois faire quoi pour que ce code d'échappement soit actif ?

Entering Sleep mode
Sleep mode OFF
Analog reading: 	698	C: 	25.21	F: 	77.38
27[2JEntering Sleep mode
Sleep mode OFF
Analog reading: 	698	C: 	25.21	F: 	77.38
27[2J

Voilà c'que j'ai dans mon terminal..

nathan30:
Et donc dans mon terminal, je dois faire quoi pour que ce code d'échappement soit actif ?

C'est à dire ? Le moniteur série intégré à l'IDE ne sert qu'à envoyer et recevoir des données séries, mais c'est très basique, aucun moyen de le faire réagir on fonction d'une certaine chaine de caractères par exemple.

T'es bien sûr que ton terminal est configuré en VT100?

Bonjour,

Utilise un terminal genre teraterm ou terminalBpp qui supporte de base le mode VT100.
Le terminal de l’ide arduino ne sait rien faire d’autre qu’afficher des caractères ASCII de base.

J'utilise Terminal BPP, mais comment utiliser la commande ""ESC [ 2J" a travers le terminal ?..

nathan30:
J'utilise Terminal BPP, mais comment utiliser la commande ""ESC [ 2J" a travers le terminal ?..

Je vois.
Le caractère ESC (ASCII 27) n'est pas imprimable, hors il s'affiche dans ta console.
Je viens de vérifier la doc et en fait il faut faire:

Serial.write(27);
Serial.write("[2J");

Ca devrait aller mieux maintenant.

Merci, je test sa demain ou Vendredi :slight_smile:

Donc quand je met sa, ca va automatiquement effacer les lignes écrites avant ?

nathan30:
Merci, je test sa demain ou Vendredi :slight_smile:

Donc quand je met sa, ca va automatiquement effacer les lignes écrites avant ?

D'après la spec VT100 ça doit effacer l'écran. Mais je suis un peu surpris que tu me poses cette question :grin: .

Ca me rappelle ma jeunesse où je pilotais un minitel avec ma calculatrice via le port série (au début des années 90). :grin: