Pages: [1]   Go Down
Author Topic: lecture serie avec arduino  (Read 782 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 5
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
« Last Edit: September 20, 2013, 12:56:56 pm by Dreamingworld » Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 5
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Quote

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 smiley-cry(TempCons/8)/0.00625); // conversion pour stockage en eeprom
  
  Serial.print(TempCons,1);
  Serial.println();
  Serial.print(conv);
}
 



« Last Edit: September 20, 2013, 03:49:27 pm by Dreamingworld » Logged

france
Offline Offline
God Member
*****
Karma: 15
Posts: 846
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Christian

Offline Offline
Newbie
*
Karma: 0
Posts: 5
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

desolé je maitrise pas le post sur les forums
« Last Edit: September 21, 2013, 11:55:29 am by Dreamingworld » Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 5
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Code:
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;
}
}
« Last Edit: September 21, 2013, 09:07:55 am by Dreamingworld » Logged

France
Offline Offline
Faraday Member
**
Karma: 36
Posts: 3422
There is an Arduino for that
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.

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

Offline Offline
Newbie
*
Karma: 0
Posts: 5
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 (382.86 KB - downloaded 15 times.)
Logged

Pages: [1]   Go Up
Jump to: