Projet Arduino
Répondre à la discussion
Affichage des résultats 1 à 12 sur 12

Projet Arduino



  1. #1
    Koolod

    Projet Arduino


    ------

    Salut à tous, dans le cadre de mon projet actuel, je dois réaliser une fonction chronomètre: en effet je suis en train de construire un afficheur de données arduino avec un écran lcd et un arduino uno. Celui possédera des fonctions de chrono, mesure de température, et d'horloge. Il est important que la fonction chrono ne présente aucun delay() car avec eux l'arduino ne peux pas surveiller l'état des boutons destinés aux changements de mode. Voici ce que j'ai déjà fait et qui malheureusement ne marche pas.

    Code:
     void processMenuChrono() {
            int heures,minutes,secondes,disec;
            char message[16] = "";
    
    
        lcd.begin(16, 2); 
        lcd.print("Chronometre");
        if((millis() - temps) > 2000 ){
            
        
        lcd.clear();
       
        heures = 0;
        minutes = 0;
        secondes = 0;
        disec = 0;
    
        if(disec == 10){
          disec = 0;
          secondes++;
            
        }
        if(secondes == 60) 
        {
            secondes = 0; 
            minutes++;
        }
        if(minutes == 60) 
        {
            minutes = 0;
            heures++;
        }
        if(heures == 24) 
        {
            heures = 0;
        }
    
        
        sprintf(message,"%d,%d,%d,%d",heures,minutes,secondes,disec);
    
    
        lcd.home();          
    
        lcd.write(message);  
        if((millis() - temps) > 100){
                     
        disec++;
        temps = millis();
    
    
          }
        }
      }
    Si quelqu'un pourrait me renseigner sur mes erreurs où sur un programme similaire, je suis preneur

    -----

  2. #2
    freepicbasic

    Re : Projet Arduino

    Tu m'es à zéro t'es compteurs juste avant de les tester.
    La remise à zéro doit se faire dans le setup, une seule fois.
    A+, pat

  3. #3
    Koolod

    Re : Projet Arduino

    Quand tu parles de compteur tu parles des variables ? heures min sec disec ?

  4. #4
    freepicbasic

    Re : Projet Arduino

    oui !

    et en plus comment tu les alimentent t 'es variables ,
    ce qui changent c est millis()
    A+, pat

  5. A voir en vidéo sur Futura
  6. #5
    Koolod

    Re : Projet Arduino

    En gros le code que j'ai testé au tout début c'est ça:
    Code:
    #include <LiquidCrystal.h>
    LiquidCrystal lcd(12,11,5,4,3,2);
    *
    int heures,minutes,secondes,disec;
    char message[16] = "";
    *
    void setup()
    {
    ****lcd.begin(16, 2);
    ****lcd.print("Chronometre");
    ****delay(2000);
    ****lcd.clear();
    ****
    ****heures = 0;
    ****minutes = 0;
    ****secondes = 0;
    ****disec = 0;
    }
    *
    void loop(){
    ****
    ****if(disec == 10){
    ********disec = 0;
    ********secondes++;
    *********
    ****}
    ****if(secondes == 60)
    ****{
    ********secondes = 0;
    ********minutes++;
    ****}
    ****if(minutes == 60)
    ****{
    ********minutes = 0;
    ********heures++;
    ****}
    ****if(heures == 24)
    ****{
    ********heures = 0;
    ****}
    *
    *****
    ****sprintf(message,"%d,%d,%d,%d",heures,minutes,secondes,disec);
    *
    ****lcd.home();*********
    *
    ****lcd.write(message);*
    *
    ****delay(100);*********
    ****
    ****disec++;
    }
    Le problème est que ce programme doit être rassemblé en une seule fonction qui ne comporte aucun delay() pour pouvoir changer de menu.

  7. #6
    Yvan_Delaserge

    Re : Projet Arduino

    Il faut mettre la gestion du LCD dans une fonction

    Code:
    void affichage( disec, secondes, minutes, heures ) {
    
    if(disec == 10){
    disec = 0;
    secondes++;
    }
    
    if(secondes == 60)
    {
    secondes = 0;
    minutes++;
    }
    
    if(minutes == 60)
    {
    minutes = 0;
    heures++;
    }
    
    if(heures == 24)
    {
    heures = 0;
    }
    
    sprintf(message,"%d,%d,%d,%d",heures,minutes,secondes,disec);
    
    lcd.home();
    
    lcd.write(message);
    
    }
    que tu appelles toutes les 100 msec depuis la boucle void main().
    Pour cela, à chaque tour de void main tu compares la valeur de millis() avec la valeur stockée lors du passage précédent. Quand la différence est égale à 100, tu appelles la fonction affichage.
    Un civet, un plat de côtes et puis, glissez-moi une petite paupiette avec.( Lino Ventura)

  8. #7
    freepicbasic

    Re : Projet Arduino

    // 1ère lecture
    Setup (){
    time = millis();
    nextTime = time +100
    }

    loop ()
    {
    // Tout les 100 millis aller dans la routine
    if (millis() > nextTime) {
    nextTime += 100;
    MyProc();
    }
    }
    A+, pat

  9. #8
    Koolod

    Re : Projet Arduino

    J'ai fait comme tu m'as dit:
    Code:
    void affichage() {
        char message[16] = "";
        int heures,minutes,secondes,disec;
    
    if(disec == 10){
    disec = 0;
    secondes++;
    }
    
    if(secondes == 60)
    {
    secondes = 0;
    minutes++;
    }
    
    if(minutes == 60)
    {
    minutes = 0;
    heures++;
    }
    
    if(heures == 24)
    {
    heures = 0;
    }
    
    sprintf(message,"%d,%d,%d,%d",heures,minutes,secondes,disec);
    
    lcd.home();
    
    lcd.write(message);
    
    }
    void loop()
    {
      if((millis() - temps) > 100){
          affichage(); 
          temps = millis();
      }
    }
    cependant le compteur s'affiche mais ne se lance pas

  10. #9
    Koolod

    Re : Projet Arduino

    Après avoir réessayé plusieurs fois ça ne marche toujours pas, je ne sais pas quoi faire.

  11. #10
    Yvan_Delaserge

    Re : Projet Arduino

    pas de void setup?et tu as oublié d'incrémenter disec au début de la fonction afichage.
    Dernière modification par Yvan_Delaserge ; 19/06/2015 à 15h50.
    Un civet, un plat de côtes et puis, glissez-moi une petite paupiette avec.( Lino Ventura)

  12. #11
    freepicbasic

    Re : Projet Arduino

    Code:
    #include <LiquidCrystal.h>
    
    void Affichage();
    
    unsigned long time;
    unsigned long nextTime;
    int heures,minutes,secondes,disec;
    char message[16] = "";
    
    
    LiquidCrystal lcd(12,11,5,4,3,2);
    
    void setup()
    {
    lcd.begin(16, 2);
    lcd.print("Chronometre");
    delay(2000);
    lcd.clear();
    time = millis();
    nextTime = time +100;
    
    heures = 0;
    minutes = 0;
    secondes = 0;
    disec = 0;
    }
    
    void loop(){
    // Tout les 100 millis aller dans la routine
    if (millis() > nextTime) {
       nextTime += 100;
       Affichage();
       }
    }
    
    void Affichage()
    {
    disec++;
    
    if(disec == 10){
      disec = 0;
      secondes++;
      }
    if(secondes == 60)
      {
      secondes = 0;
      minutes++;
      }
    if(minutes == 60)
      {
      minutes = 0;
      heures++;
      }
    if (heures == 24)
      {
      heures = 0;
      }
    
    
    sprintf(message,"%d,%d,%d,%d",heures,minutes,secondes,disec);
    
    lcd.home();
    lcd.write(message);
    }
    A+, pat

  13. #12
    Koolod

    Re : Projet Arduino

    Il y avait un void setup mais il était beaucoup plus haut dans le programme,je ne l'avais pas collé, en tout cas bravo et merci ça marche il me reste plus qu'à rajouter des bp pour start stop et reset

Discussions similaires

  1. Projet arduino
    Par jmjaffre dans le forum Électronique
    Réponses: 22
    Dernier message: 17/06/2015, 13h11
  2. Projet ARDUINO
    Par IB69 dans le forum Électronique
    Réponses: 6
    Dernier message: 03/02/2014, 20h59
  3. Projet de bac Arduino
    Par kocliko dans le forum TPE / TIPE et autres travaux
    Réponses: 0
    Dernier message: 19/03/2013, 08h52
  4. Projet arduino
    Par ouess dans le forum Électronique
    Réponses: 0
    Dernier message: 26/11/2012, 16h52
  5. Projet arduino
    Par invite6b4f2e28 dans le forum Électronique
    Réponses: 6
    Dernier message: 16/09/2012, 22h53
Découvrez nos comparatifs produits sur l'informatique et les technologies.