lecture serie avec arduino

bonjour a tous,

j'ai besoin d'un petit coup de pouce pour faire avancer mon projet ,il sagit de la lecture serie par la carte arduino d'une consigne de temperature a virgule (ex: 120,5°c) a envoyer par le biais du moniteur serie pour ensuite la stocker dans l'eeprom de l'arduino pour ne pas la perdre apres coupure alim et faire une boucle qui va verifier ça en permanence si : temp consingne = temp reel .

moniteur serie ---> saisie 120.5 --> press enter --> lecture temp par arduino ---> stockage eeprom arduino ---> verifier temp reel et comp a eeprom (si temp reel < temp consigne alors demarrer la chauffe, si temp reel egal temp consigne rien faire ou maintenir temp consigne)

j'ai compris que l'arduino faisait la lecture serie de 1 chiffre ou caracter a la fois donc a mon sens je pense faire une boucle qui va lire chaque chiffre 1 a 1 jusqua avoir la totalité de la temp de consigne ,puis definir une variable float(tempcons) qui contiendra 120,5 et la stocker dans l'eeprom

pour l'instant voudrai testé cette partie du prog mais la j'avaou que en prog j'ai aucune idée de comment l'ecrire, apres je vais mettre les protection qui s'impose pour eviter les temperatures incohérentes ou la saisie de caractere au lieu de chiffre et contraidre la valeur dans une fourchette

si une ame charitable souhaite me venir en aide pour la partie lecture serie svp

merci d'avance

j'ai edité une partie du code qui marche pas
si quelqun veut bien me le corriger ce serai cool

int conv;
float TempCons;
int tempcons[4];

void setup()

{
Serial.begin(9600);
}

void loop()

{
while (Serial.available()<4) {for(int i=0;i<4;i++) { tempcons = Serial.read();}}
_ TempCons = (tempcons[0])*100+(tempcons[1])*10+(tempcons[2])1+0.1(tempcons[3]);_

  • conv =((TempCons/8)/0.00625); // conversion pour stockage en eeprom*

_ Serial.print(TempCons,1);_
_ Serial.println();_
_ Serial.print(conv);_
}

[/quote]

C'est la balise # pour insérer du code lisible

desolé je maitrise pas le post sur les forums

j'ai progresse un peu dans mon elaboration

maintenant j'ai besoin de ce coup de pouce pour mettre des gardes fou a serial.available pour ne pas que l'on rentre des chiffre >4 ou < 4
toute mes tentatives avec des if mettent a mal mon prog et plus rien fonctionne

voila ce que j'ai fait jusque la

int conv;
float TempCons;
int tempcons[4];

void setup()

{
  Serial.begin(9600);
}

void loop() 

{
  while ( Serial.available() == 4 ) {
  
  for (int i;i<=4;i++)
  
  { tempcons[i] = Serial.read(); }
 
 TempCons = (tempcons[0]-'0')*100+(tempcons[1]-'0')*10+(tempcons[2]-'0')*1+0.1*(tempcons[3]-'0');
 conv =((TempCons/8)/0.00625); // conversion pour stockage en eeprom
   
  Serial.println();
  Serial.print(TempCons,1);
  Serial.println();
  Serial.print(conv);
 /* Serial.println();
  Serial.print(conv/100);
  Serial.print(conv%100);*/
  Serial.flush();
  break;
}
}

Dreamingworld:
j'ai progresse un peu dans mon elaboration

maintenant j'ai besoin de ce coup de pouce pour mettre des gardes fou a serial.available pour ne pas que l'on rentre des chiffre >4 ou < 4
toute mes tentatives avec des if mettent a mal mon prog et plus rien fonctionne

voila ce que j'ai fait jusque la

Je ne sais pas si c'est vraiment ça que tu veux.

int conv;
float TempCons;
char tempcons[5];

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

void loop(){
  while ( Serial.available() != 4 ) {};           // On ne fait rien tant qu'il n'y a pas 4 caractères de reçus
  
  for (int i=0;i<=4;i++) {
        tempcons[i] = Serial.read();
  }
  tempcons[4]='\0';                                  // termine la chaîne
  TempCons = atof(tempcons);
  conv =(int)(TempCons*10);                    // conversion en entier pour stockage en eeprom
   
  Serial.println();
  Serial.print(TempCons,1);
  Serial.println();
  Serial.print(conv);
 /* Serial.println();
  Serial.print(conv/100);
  Serial.print(conv%100);*/
  Serial.flush();
}

bonjour

merci fdufnews pour ta contribution au dev du code le remaniement que tu as fait n'est pas tout a fait ce que je souhaite ,en fait je l'ai testé et celui ci bloque la carte quand on entre plus de 5 chiffre a repetition faut faire du reset hard pour que sa reparte ,de plus le serial .flush() rempli pas correctement sa fonction ou j'ai pas compris comment il marche ou comment l'utiliser parce que si j'entre plus de 4 chiffres il me garde le ou les dernier en buffer et les rajoutent a la suite a la prochaine entrée ce qui rend la consigne de temp icoherente

vais poster des captures pour me faire comprendre

lectserietest1.pdf (383 KB)