aide Arduino uno barographe


bonjour à tous,

j'ai découvert arduino il y peu et à force de regarder ce qu'il était possible de faire je me suis lancé.
je me suis donc équiper d'une carte arduino uno, d'un capteur de pression bmp180, d'un capteur de température et hygrométrie dht22, et d'un ecran tft 2.8' adafruit.
en tâtonnant j'ai réussi à faire ce que je voulais.
j'ai réalisé un barographe mais je bute encore sur un problème et j'aurais aimé avoir votre avis.

voici ce que j'ai programmé en setup et loop
jai ensuite l'initialisation des capteurs

code: [select]

void setup() {
  serial.begin(9600);
  serial.println("ili9341 test!");
 
  dht.begin();

  while(!serial){;}                         // waith until leonardo serial port ready
  delay(5000);
  wire.begin();                             // activate i2c
  
  init_sensor();                          // initialize baro sensor variables
  delay(100);
  tft.begin();

  
  // read diagnostics (optional can debug problems)
  uint8_t x = tft.readcommand8(ili9341_rdmode);
  serial.print("display power mode: 0x"); serial.println(x, hex);
  x = tft.readcommand8(ili9341_rdmadctl);
  serial.print("madctl mode: 0x"); serial.println(x, hex);
  x = tft.readcommand8(ili9341_rdpixfmt);
  serial.print("pixel format: 0x"); serial.println(x, hex);
  x = tft.readcommand8(ili9341_rdimgfmt);
  serial.print("image format: 0x"); serial.println(x, hex);
  x = tft.readcommand8(ili9341_rdselfdiag);
  serial.print("self diagnostic: 0x"); serial.println(x, hex);
  
  serial.println(f("benchmark                time (microseconds)"));
  
  pinmode(retroeclairage, output);
  analogwrite(retroeclairage, 30);

  tft.fillscreen(black);
 
  tft.setrotation(1);
 
  tft.setcursor(0, 0);
  tft.settextcolor(white);  tft.settextsize(1);
  tft.print("1100 hpa");
  tft.drawline(50, 5, 320, 5, white);
  
  tft.setcursor(0,80);
  tft.settextcolor(white);  tft.settextsize(1);
  tft.print("1013 hpa");
  tft.drawline(0, 92, 320, 92, white);
  
  tft.setcursor(0,175);
  tft.settextcolor(white);  tft.settextsize(1);
  tft.print("920 hpa");
  tft.drawline(0, 185, 320, 185, white);
    
  tft.setcursor(135,215);
  tft.settextcolor(green);  tft.settextsize(2);
  tft.print("hpa");
  
  tft.setcursor(290,200);
  tft.settextcolor(white);  tft.settextsize(2);
  tft.print("'c");
  tft.setcursor(290,220);
  tft.settextcolor(green);  tft.settextsize(2);
  tft.print("%");
  
  temps = millis(); //on initialise le temps  
  
}
void loop()
{
  delay(2500);

int32_t b5;
 
  b5 = temperature();                       // read , calculate temperature (t)

  serial.print("temperature: ");
  serial.print(t, 2);
  serial.print(" c, ");
  

  p = pressure(b5);                         // read , calculate pressure (p)

  serial.print("pressure: ");
  serial.print(p, 2);
  serial.print(" hpa, ");
  serial.print("");
  
    
  float h = dht.readhumidity(); //lecture de l'humidité et affectation à la variable de type « float »
  float t = dht.readtemperature(); //lecture de la température et affectation à la variable de type // »float »

//on vérifie juste que le retour soit valide, c'est à dire dans la plage de mesure de la sonde, sinon //on affiche une erreur
  if (isnan(t) || isnan(h)) {
  serial.println("erreur lecture dht");
  } else {
  serial.print("humidite: " ); //affichage sur le monotoring
  serial.print(h);
  serial.print( " %\t ");
  serial.print("degres: " );
  serial.print(t);
  serial.println(" *c ");
  
  tft.setcursor(5,210);
  tft.fillrect(5,210,125,50,black);
  tft.settextcolor(white);  tft.settextsize(3);
  tft.print(p, 2);
  
  tft.setcursor(210,200);
  tft.fillrect(200,200,80,50,black);
  tft.settextcolor(white);  tft.settextsize(2);
  tft.print(t);
  
  tft.setcursor(210,220);
  tft.settextcolor(white);  tft.settextsize(2);
  tft.print(h);
  
  if((millis() - temps) > 270000)
           {
            compteur++;
            ypixel = ((1100-(p)+5));
            xpixel = compteur;
            tft.drawline(xpixel ,8  ,xpixel,184 ,black);  // efface point précédent
            tft.drawpixel(xpixel ,ypixel ,green);
                        
            tft.setcursor(0, 0);
            tft.settextcolor(white);  tft.settextsize(1);
            tft.print("1100 hpa");
            tft.drawline(50, 5, 320, 5, white);
  
            tft.setcursor(0,80);
            tft.settextcolor(white);  tft.settextsize(1);
            tft.print("1013 hpa");
            tft.drawline(0, 92, 320, 92, white);
  
            tft.setcursor(0,175);
            tft.settextcolor(white);  tft.settextsize(1);
            tft.print("920 hpa");
            tft.drawline(0, 185, 320, 185, white);
            serial.print(compteur);
            temps = millis();
            }
            
            
   if(compteur = 319)
     {
       compteur = 0;
     }  
    
 

  
  
  delay(2500);                               // delay between each readout
}}

  


mon problème est le suivant. je n'arrive pas à gérer la fin de l'affichage sur l'écran lorsque mon compteur atteint 319.
j'ai essayé de le forcer à 0 mais cette boucle bloque l'affichage des points.
je voudrais savoir quelle méthode utiliser pour que la courbe avance jusqu'au bout puis on efface le plus ancien point et le nouveau reste à 319.

je ne sais pas si je me suis bien exprimé.
mais si quelqu'un pourrait me donner un conseil pour savoir la méthode à utiliser.

voici une photo du montage
">

bonne soirée à tous

j'ai réalisé un barographe mais je bute encore sur un problème et j'aurais aimé avoir votre avis.

mon problème est le suivant. je n'arrive pas à gérer la fin de l'affichage sur l'écran lorsque mon compteur atteint 319.
j'ai essayé de le forcer à 0 mais cette boucle bloque l'affichage des points.
je voudrais savoir quelle méthode utiliser pour que la courbe avance jusqu'au bout puis on efface le plus ancien point et le nouveau reste à 319.

je ne sais pas si je me suis bien exprimé.
bonsoir
si si , l'exposé est clair :smiley-mr-green:
la reactualisation de courbe à t=0 (actuel) sur la profondeur d'acquisition de la courbe , nécessite de mémoriser la courbe précédente à t-1)
ça passe par de l'alimentation/decalage de postes de 2 tables en valeurs ,  le dimensionnement des 2 tables etant fonction du nombre de points "à afficher"


Arduino Forum > International > Français (Moderators: jfs, Snootlab) > aide Arduino uno barographe


arduino

Comments

Popular posts from this blog

invalid use of void expresion in FlexiTimer2 library

error: a function-definition is not allowed here before '{' token

LED Strip Code