Go Down

Topic: Communiquer avec le clavier du pc sur la carte Arduino (Read 4552 times) previous topic - next topic

Jordan-pDevices

Jun 03, 2013, 10:52 pm Last Edit: Jun 05, 2013, 04:26 pm by Maestro14000 Reason: 1
Bonjour,

Quand je compile mon programme qui me servira à la régulation de la température de mon aquarium voici ce que j'obtiens :  error: ISO C++ forbids comparison between pointer and integer

c'est au niveau du test inclu dans la boucle while (en gras) de ce programme :
Quote

 String inputString = "";
 bool stringComplete = false;
 
 if (stringComplete)
 {
   inputString = "";
   stringComplete = false;
 }
 while (Serial.available())
 {
   char inChar = (char)Serial.read();
   inputString += inChar;
   
   if (inChar == "\n")
   {
     T = inputString.toInt();
     stringComplete = true;
   }



Pourriez m'expliquer le problème s'il vous plaît ?

cbrandt


skywodd

Bonjour,

Pour compléter la réponse de cbrandt :
"\n" (double quote) = chaine de caractère = pointeur sur char
'\n' (simple quote) = caractère = char simple
Des news, des tutos et plein de bonnes choses sur http://skyduino.wordpress.com !


Jordan-pDevices

Oups, je n'arrive pas à le faire fonctionner, j'ai voulu prendre des morceaux de programme à droite à gauche et ça ne fonctionne pas.

Pour faire des tests, j'aimerais rentrer une valeur au clavier et l'afficher sur le moniteur de série en direct. Où pourrais-je trouver un programme tout simple qui me permettrait de bien comprendre ?

Merci.

(car pour l'instant, quand j'écris un nombre, ça me met le nombre de chiffre en zéros l'un au dessus de l'autre. par exemple si j'écris 10, le moniteur série affiche :
0
0
si j'écris 35065, il affiche :
0
0
0
0
0
....... je trouve ça assez incompréhensible  :smiley-eek: )

skywodd

Copier/coller des morceaux de code n'as JAMAIS rien donné de fonctionnel ...

Ce que tu veut faire ce fait en une ligne ;)
Code: [Select]
void setup() {
  Serial.begin(115200);
}

void loop() {
  int valeur = Serial.parseInt(); // Magie

  Serial.println(valeur);
}

http://arduino.cc/en/Reference/ParseInt
Des news, des tutos et plein de bonnes choses sur http://skyduino.wordpress.com !

Jordan-pDevices

#6
Jun 05, 2013, 04:11 pm Last Edit: Jun 05, 2013, 04:16 pm by Maestro14000 Reason: 1
Oui j'ai bien compris que ça ne marche pas le copier collé ^^

Ok, je test ça tout de suite ! et je vais peut-être revenir avec des questions

Merci



Ça fonctionne très bien ces deux lignes dis donc :-) merci, j'avais cherché dans les références, mais je n'avais pas vu cette fonction.
Et je vois comment refaire mon programme pour l'instant !  :smiley-mr-green:

Jordan-pDevices

#7
Jun 05, 2013, 04:25 pm Last Edit: Jun 05, 2013, 05:12 pm by Maestro14000 Reason: 1
Ah non, je ne vois plus la suite du programme ...

Car pour l'instant ces simples lignes enregistre un entier et l'affiche pendant le temps d'une boucle. J'aimerais que la valeur soit stockée et que ça ne retourne pas à zéro à chaque fois, sinon pour chauffer un aquarium ça va être très laborieux de rentrer la valeur désirée à chaque fin de boucle ^^
Vous comprenez le souci ? J'imaginais faire une boucle avec une condition du genre "tant que machin différent de zéro, lancer chauffage"... mais au final la valeur "valeur" retournera à zéro dès la fin de la boucle  :smiley-sad-blue:



C'est bon j'ai trouvé une manière de contourner ce problème  :)
Quote

int temp = 0;

void setup() {
 Serial.begin(9600);
}

void loop() {
 int valeur = Serial.parseInt(); // Magie
 if (valeur > 1){
   temp = valeur;
 }
 if (valeur == 1){
   temp = 0;
 }
 Serial.println("Enter the desired temperature");
 Serial.println(temp);
 Serial.println("to stop heatting please press 1");
}


skywodd

Tu veut que la valeur ne soit saisie qu'une seule fois ?

Si oui il suffit de rajouter un "static" :
Code: [Select]
void setup() {
  Serial.begin(115200);
}

void loop() {
  static int valeur = Serial.parseInt(); // Magie COMBO

  Serial.println(valeur);
}


Sinon si tu veut demander la valeur tant que == 0 :
Code: [Select]
int valeur;

void setup() {
  Serial.begin(115200);

  do {
    Serial.println("Valeur ?");
    valeur = Serial.parseInt();
  } while(valeur == 0);
}

void loop() {
  Serial.println(valeur);
 
  delay(500);
}
Des news, des tutos et plein de bonnes choses sur http://skyduino.wordpress.com !

Jordan-pDevices

Salut skywodd, j'ai essayé ton premier programme et ça ne fonctionne pas... ça met toujours des 0, même si tu rentre 555...

Moi de mon côté j'ai un programme qui fonctionne pour l'écriture au clavier avec ce que tu m'as dit avant, j'ai rajouté deux if et c'est bon :)

skywodd

Tu est sûr d'avoir configuré ton moniteur série correctement ? (115200 bauds + fin de ligne en "newline")
Pour le "static" je veut bien émettre un doute sur son bon fonctionnement (initialisation avec la sortie d'une fonction) par contre pour la boucle + variable globale ça devrait marcher ...
Des news, des tutos et plein de bonnes choses sur http://skyduino.wordpress.com !

Jordan-pDevices

Oui j'ai bien réglé et static ne fonctionne pas.

Le deuxième fonctionne mais pas comme je voulais  ;)

Regarde ce que j'ai fais et qui me convient :

Quote

int temp = 0;

void setup() {
 Serial.begin(9600);
}

void loop() {
 int valeur = Serial.parseInt(); // Magie
 if (valeur > 1){
   temp = valeur;
 }
 if (valeur == 1){
   temp = 0;
 }
 Serial.println("Entrez la temperature");
 Serial.println(temp);
 Serial.println("pour arreter le chauffage appuyer sur 1");
}





Ah j'avais déjà mis le programme ^^ tant pis

Jordan-pDevices

Salut Skywodd !

J'ai une question sur le Serial.parseInt, est-ce que ca donne toujours un délai de une seconde ?
Je n'ai pas trouvé dans la documentation....

Merci  :)

skywodd


J'ai une question sur le Serial.parseInt, est-ce que ca donne toujours un délai de une seconde ?
Je n'ai pas trouvé dans la documentation....

Ça attend indéfiniment jusqu'à ce que tu saisisses un nombre, de mémoire ya pas de timeout.
Des news, des tutos et plein de bonnes choses sur http://skyduino.wordpress.com !

Jordan-pDevices

Ah ok.

C'est bizarre car j'ai l'impression que depuis que je l'ai rajouté, ça m'a rajouté comme un délai.

Tant pis, en tout cas ça fonctionne.

Merci beaucoup !

Maintenant j'ai d'autres soucis avec un écran ^^

Go Up