Communiquer avec le clavier du pc sur la carte Arduino

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 :

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 ?

Comme ça c'est mieux:

inChar == '\n'

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

OK,

Merci beaucoup :slight_smile:

Bonne journée !

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

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

Ce que tu veut faire ce fait en une ligne :wink:

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

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

  Serial.println(valeur);
}

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 :slight_smile: 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 ! :grin:

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

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

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");
}

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

Si oui il suffit de rajouter un "static" :

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 :

int valeur;

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

void loop() {
  Serial.println(valeur);
  
  delay(500);
}

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

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 ...

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

Le deuxième fonctionne mais pas comme je voulais :wink:

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

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

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

Maestro14000:
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.

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 ^^