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