Partage
  • Partager sur Facebook
  • Partager sur Twitter

[projet] Station météo

    12 juin 2012 à 22:18:58

    Bonjour,
    je compte faire une station météo, et pour l'instant j'ai 2/3 problèmes.

    Je veux brancher sur l'arduino :
    2 capteurs (2 broches ana.) 1 broche digi. (la data seras transmise par radio)
    +une RTC (2 broches ana.)
    +un écran LCD (6 broches digi.)
    +3 boutons (3 broches digi. une broche ana.)
    +une carte SD (5 broches digi., comme ça)
    Ce qui fait un total de 4 broches ana. et 14 digi. 5 broches ana. et 10 digi. 2 broches ana. et 12 digi.

    • Peut-on brancher des trucs (boutons par ex.) sur les broches 0 et 1 ? -> oui, mais il vaut mieux les mettre en entré et encore mieux non
    • Peut-on brancher l'écran LCD sur n'importe quelle broche ? -> oui
    • Savez-vous où trouver une horloge RTC pas trop chère (je trouve rien sur google) ? -> ici
    • Avez-vous des infos. sur comment communiquer avec la carte SD avec 6 broches digitales et 1 analogique (ou moins) ?-> oui (4 broches digi.)
    • Savez-vous où trouver une humidistance pas trop chère ?-> DHTxx
    • Mon écran est trop sombre, et ce n'est pas a cause du contraste, pourquoi ?-> J'ai oublier de mettre le rétro-éclairage ...
    • Comment résoudre le bug de noël (+ de jours que prévu) ?
    • Comment mettre la librairie virtualwire sur l'ATtiny45 ?


    Merci de votre lecture, et, j’espère, de vos réponse ;)
    • Partager sur Facebook
    • Partager sur Twitter
    2b||!2b   sqrt(4b²)
      12 juin 2012 à 22:44:23

      Tu peux brancher des trucs sur les broches 0 et 1, mais dans ce cas tu ne pourras pas utiliser la voie série USB pour afficher des trucs.
      Tu peux aussi utiliser les voies analogiques inutilisés comme des voies numériques classiques.
      L'écran LCD peut-être branché sur les broches que tu veux. Il te faudra juste faire attention en utilisant la librairie LiquidCrystal à utilisé les bonnes broches (chapitre sur les LCD en cours de rédaction)
      J'ai trouvé une RTC sur "dx.com" pour 3 euros (avec la pile). Je ne l'ai pas encore essayé (car je fais le LCD avant).
      Pour la carte SD, je n'en ai aucune idée, une bonne piste serait de commencer par la doc officielle (et les docs sur le shield que tu comptes utiliser)
      • Partager sur Facebook
      • Partager sur Twitter

      Retrouvez moi sur mon blog et ma chaine Youtube !

      Anonyme
        13 juin 2012 à 10:49:15

        Citation

        Tu peux brancher des trucs sur les broches 0 et 1, mais dans ce cas tu ne pourras pas utiliser la voie série USB pour afficher des trucs.


        Oui alors je rajoute qu'il faut faire attention car le bootloader de l'arduino est en permanence en train de scruter s'il y a quelque chose qui arrive sur sa liaison série. Cela engendre parfois bien des problèmes. Le mieux c'est de ne pas utiliser les broches en sortie, en entrée cela va un peu mieux, mais la meilleur solution reste de ne pas les utiliser.

        Après tes boutons tu peut les mettre sur tes entrées analogiques en créant un système avec pont diviseur de tension. De plus je crois que l'on peut se servir des broches analogique en broche logique d'entrée (ou de sortie, je sais plus)
        • Partager sur Facebook
        • Partager sur Twitter
          13 juin 2012 à 11:07:18

          C'est vrai que les 4 boutons pourrait être mis sur une seule broche analogique en faisant un diviseur de tension entre chaque bouton
          • Partager sur Facebook
          • Partager sur Twitter

          Retrouvez moi sur mon blog et ma chaine Youtube !

            13 juin 2012 à 12:46:00

            Merci,
            j'ai éditer.
            Pour les modules RTC j'ai trouver ça de mon coté, je crois le moins chère dans la gamme DS1307,
            j'ai vu que le tien est un 1302 : deux questions :
            -Ses broches ne porte pas le même nom que le 1307, c'est compatible ?
            -A t-il de la mémoire (je crois que l'on dit EEPROM) ?
            • Partager sur Facebook
            • Partager sur Twitter
            2b||!2b   sqrt(4b²)
              13 juin 2012 à 13:56:36

              C'est broche ne sont effectivement pas les memes car le mien (1302) utilise un protocole de ommunication différent du tien (le mien est dans une liaison série particulière et le tien est en liaison I²C)
              Pourquoi une EEPROM ? La date et l'heure sont stockés dans la RAM du composant car elle change sans arret.
              • Partager sur Facebook
              • Partager sur Twitter

              Retrouvez moi sur mon blog et ma chaine Youtube !

                13 juin 2012 à 14:44:14

                Citation : Eskimon

                Pourquoi une EEPROM ? La date et l'heure sont stockés dans la RAM du composant car elle change sans arret.


                Je n'était pas sur du nom, mais je sais que dans le modèle 1307 on peut stocker des donnée, je vais garder le 1307, plus chère mais j'ai vus plus de tutos dessus.
                • Partager sur Facebook
                • Partager sur Twitter
                2b||!2b   sqrt(4b²)
                  13 juin 2012 à 16:52:27

                  Assure toi d'avoir le matériel pour la souder vu qu'elle vient en kit ;)
                  • Partager sur Facebook
                  • Partager sur Twitter

                  Retrouvez moi sur mon blog et ma chaine Youtube !

                    13 juin 2012 à 19:12:04

                    Citation : Eskimon

                    Assure toi d'avoir le matériel pour la souder vu qu'elle vient en kit ;)


                    C'est bon j'ai tout :)

                    Je laisse le sujet ouvert pour le suivis de ma station.
                    • Partager sur Facebook
                    • Partager sur Twitter
                    2b||!2b   sqrt(4b²)
                      17 juin 2012 à 16:18:24

                      Up, J'ai un problème, j'ai un capteur de température dont la résistance baisse quand la température monte, comment avoir une correspondance ?
                      Par exemple, je sais qu'a 16.6°C sa résistance est à 62.9K et a 16.4, elle est à 63K, donc comment savoir que un nombre de 0 à 1023 va donner tant de degrés ?
                      • Partager sur Facebook
                      • Partager sur Twitter
                      2b||!2b   sqrt(4b²)
                      Anonyme
                        17 juin 2012 à 17:12:12

                        euh, tes chiffres n'ont pas l'air en correspondance avec tes dires.

                        Si la résistance baisse quand la température augmente, c'est que ta thermistance est une CTN (coefficient de température négatif)
                        • Partager sur Facebook
                        • Partager sur Twitter
                          17 juin 2012 à 17:33:08

                          Pour savoir quelle valeur tu auras pour quelle température il faut se référer à la documentation constructeur de ton capteur. Tu auras alors de belle courbe qui te montreront la résistance attendu en fonction de la température
                          • Partager sur Facebook
                          • Partager sur Twitter

                          Retrouvez moi sur mon blog et ma chaine Youtube !

                            17 juin 2012 à 17:40:30

                            Citation : olyte

                            tes chiffres n'ont pas l'air en correspondance avec tes dires


                            corrigé

                            Citation : Eskimon

                            il faut se référer à la documentation constructeur de ton capteur


                            heu, si j'ai récupérer le composant et qu'il n'y a aucune référence, je fais comment ? :p
                            • Partager sur Facebook
                            • Partager sur Twitter
                            2b||!2b   sqrt(4b²)
                            Anonyme
                              17 juin 2012 à 17:45:10

                              cherches du côté des résistance CTN de 100kohms. il me semble que les valeurs sont normalisées.
                              • Partager sur Facebook
                              • Partager sur Twitter
                                18 juin 2012 à 18:59:45

                                Le graphique de l'évolution est linéaire, en sachant 2 données, je devrait savoir le coef température/résistance.
                                Mais comment savoir la résistance du capteur à partir de l'Arduino ?
                                Mon début -300 lignes :p - de code ici (dite moi si je me suis tromper, svp) :
                                #include <LiquidCrystal.h>
                                #include <Wire.h>
                                #include "RTClib.h"
                                
                                #define VAL1 20
                                #define VAL2 50
                                #define VAL3 60
                                
                                //A5;4 A0;1 A2 -- D2;3;4;5;6;7 D10;11;12;13
                                //RTC  CAPT BT        LCD           SD
                                RTC_Millis RTC;
                                LiquidCrystal lcd(7, 6, 5, 4, 3, 2);
                                
                                boolean bout1 = false;
                                boolean bout2 = false;
                                boolean bout3 = false;
                                boolean Ancbout1 = false;
                                boolean Ancbout2 = false;
                                boolean Ancbout3 = false;
                                
                                int analogA2;
                                int temp;
                                int Mitemp = 100;
                                int Matemp = 0;
                                int hum;
                                int Mihum = 100;
                                int Mahum = 0;
                                
                                double J = 17;
                                double Mo = 6;
                                double A = 2012;
                                double H = 14;
                                double Mi = 37;
                                double S = 41;
                                double TotS = 0;
                                double J2 = 25;
                                double Mo2 = 12;
                                double A22 = 2012;
                                double H2 = 0;
                                double Mi2 = 0;
                                double S2 = 0;
                                double TotS2 = 0;
                                
                                DateTime now;
                                
                                int phase = 0;
                                //0=heure
                                //1=temp
                                //2=hum
                                //3=noël
                                //4=maxminitemp
                                //5=maxminihum
                                byte Coeur[8] = {
                                  0b00000,
                                  0b01010,
                                  0b11111,
                                  0b11111,
                                  0b11111,
                                  0b01110,
                                  0b00100,
                                  0b00000
                                };
                                byte Coeur2[8] = {
                                  0B00000,
                                  0B00000,
                                  0B01010,
                                  0B01110,
                                  0B01110,
                                  0B00100,
                                  0B00000,
                                  0B00000
                                };
                                byte vague[8] = {
                                  0B00000,
                                  0B00000,
                                  0B00000,
                                  0B01100,
                                  0B10011,
                                  0B00000,
                                  0B00000,
                                  0B00000
                                };
                                byte AInv[8] = {
                                  0B11111,
                                  0B11111,
                                  0B10001,
                                  0B10101,
                                  0B10101,
                                  0B10001,
                                  0B10101,
                                  0B10101
                                };
                                byte Degre[8] = {
                                  0B01110,
                                  0B10001,
                                  0B10001,
                                  0B10001,
                                  0B01110,
                                  0B00000,
                                  0B00000,
                                  0B00000
                                };
                                
                                void setup () {
                                  // following line sets the RTC to the date & time this sketch was compiled
                                  RTC.begin(DateTime(__DATE__, __TIME__));
                                  
                                TotS2 += S2;
                                TotS2 += (Mi2*60);
                                TotS2 += ((H2*60)*60);
                                TotS2 += ((((J2*24)*60)*60)*Mo2);
                                
                                  Serial.begin(57600);
                                  
                                  lcd.begin(20, 4);
                                  lcd.createChar(1, Coeur);
                                  lcd.createChar(2, Coeur2);
                                  lcd.createChar(3, vague);
                                  lcd.createChar(4, AInv);
                                  lcd.createChar(5, Degre);
                                  for(int i = 0; i!=5; i++)
                                  {
                                    lcd.setCursor(3,2);
                                    lcd.print("I "); 
                                    lcd.write(2);
                                    lcd.print(" Arduino !");
                                    delay(250);
                                    lcd.setCursor(3,2);
                                    lcd.print("I "); 
                                    lcd.write(1);
                                    lcd.print(" Arduino !");
                                    delay(250);
                                  }
                                  lcd.setCursor(0,0);
                                  lcd.write(3);lcd.write(3);lcd.write(3);lcd.write(3);lcd.write(3);lcd.write(4);lcd.print("rduinMeteo");lcd.write(3);lcd.write(3);lcd.write(3);lcd.write(3);lcd.write(3);lcd.write(3);lcd.write(3);
                                }
                                
                                void loop () 
                                {
                                  switch(phase)
                                  {
                                    case 0 :
                                      //333334rduiMeteo33333
                                      //******17/06/12******
                                      //******09H51:20******
                                      //<-Humi.******Temp.->
                                      now = RTC.now();
                                      lcd.setCursor(6,2);
                                      lcd.print(now.day(), DEC);lcd.print('/');lcd.print(now.month(), DEC);lcd.print('/');lcd.print(now.year(), DEC);
                                      lcd.setCursor(6,3);
                                      lcd.print(now.hour(), DEC);lcd.print(':');lcd.print(now.minute(), DEC);lcd.print(':');lcd.print(now.second(), DEC);
                                      lcd.setCursor(0,4);
                                      lcd.print("<-Humi.      Temp.->");
                                      break;
                                      
                                    case 1 :
                                      //333334rduiMeteo33333
                                      //***Temperature*:****
                                      //********20°C********
                                      //<-Heure******Humi.8->
                                      temp = analogRead(A0);
                                      if(temp > Matemp)
                                        Matemp = temp;
                                      if(temp < Mitemp)
                                        Mitemp = temp;
                                      lcd.setCursor(3,2);
                                      lcd.print("Temperature :");
                                      lcd.setCursor(8,3);
                                      lcd.print(temp, DEC);lcd.write(5);lcd.print("C");
                                      lcd.setCursor(0,4);
                                      lcd.print("<-Heure      Humi.->");
                                      break;
                                      
                                    case 2 :
                                      //333334rduiMeteo33333
                                      //*****Humidite*:*****
                                      //********54%*********
                                      //<-Temp.******Heure->
                                      hum = map(analogRead(A1),0,1023,0,100);
                                      if(hum > Mahum)
                                        Mahum = hum;
                                      if(hum < Mihum)
                                        Mihum = hum;
                                      lcd.setCursor(5,2);
                                      lcd.print("Humidite :");
                                      lcd.setCursor(8,3);
                                      lcd.print(hum, DEC);lcd.print("%");
                                      lcd.setCursor(0,4);
                                      lcd.print("<-Temp.      Heure->");
                                      break;
                                      
                                    case 3 :
                                      //333334rduiMeteo33333
                                      //110J*02H*50min*20sec
                                      //*****avant noel*****
                                      //<-Humi.******Temp.->
                                      now = RTC.now();
                                      J  = now.day();
                                      Mo = now.month();
                                      A  = now.year();
                                      H  = now.hour();
                                      Mi = now.minute();
                                      S  = now.second();
                                      TotS += S;
                                      TotS += (Mi*60);
                                      TotS += ((H*60)*60);
                                      TotS += ((((J*24)*60)*60)*Mo);
                                      TotS = TotS2 - TotS;
                                      Mi = TotS/60;
                                      H = Mi/60;
                                      J = H/24;
                                      S = (int)TotS%60;
                                      Mi = (int)Mi%60;
                                      H = (int)H%24;
                                      J = (int)J;
                                      
                                      lcd.setCursor(0,2);
                                      lcd.print(J);lcd.print("J ");lcd.print(H);lcd.print("H ");lcd.print(Mi);lcd.print("min ");lcd.print(S);lcd.print("sec");
                                      lcd.setCursor(5,3);
                                      lcd.print("Avant noel");
                                      lcd.setCursor(0,4);
                                      lcd.print("<-Humi.      Temp.->");
                                      break;
                                      
                                    case 4 :
                                      //333334rduiMeteo33333
                                      //Minimale : 10°C*****
                                      //Maximale : 40°C*****
                                      //<-Heure******Humi.->
                                      lcd.setCursor(0,2);
                                      lcd.print("Minimale : ");lcd.print(Mitemp, DEC);lcd.write(5);lcd.print("C");
                                      lcd.setCursor(0,3);
                                      lcd.print("Maximale : ");lcd.print(Matemp, DEC);lcd.write(5);lcd.print("C");
                                      lcd.setCursor(0,4);
                                      lcd.print("<-Heure      Humi.->");
                                      break;
                                      
                                    case 5 :
                                      //333334rduiMeteo33333
                                      //Minimale : 30%******
                                      //Maximale : 75%******
                                      //<-Temp.******Heure->
                                      lcd.setCursor(0,2);
                                      lcd.print("Minimale : ");lcd.print(Mihum, DEC);lcd.print("%");
                                      lcd.setCursor(0,3);
                                      lcd.print("Maximale : ");lcd.print(Mahum, DEC);lcd.print("%");
                                      lcd.setCursor(0,4);
                                      lcd.print("<-Temp.      Heure->");
                                      break;
                                      
                                    default:
                                    phase = 0;
                                  }
                                  analogA2 = analogRead(A2);
                                  if(analogA2 > VAL1-10 && analogA2 < VAL1+10)
                                  {
                                    bout1 = true;
                                    bout2 = false;
                                    bout3 = false;
                                  }
                                  else if(analogA2 > VAL2-10 && analogA2 < VAL2+10)
                                  {
                                    bout1 = false;
                                    bout2 = true;
                                    bout3 = false;
                                  }else if(analogA2 > VAL3-10 && analogA2 < VAL3+10)
                                  {
                                    bout1 = false;
                                    bout2 = false;
                                    bout3 = true;
                                  }
                                  if(bout1 && (bout1 != Ancbout1))
                                  {
                                    phase--;
                                    if(phase < 0)
                                      phase = 3;
                                  }
                                  if(bout2 && (bout2 != Ancbout2))
                                  {
                                    phase++;
                                    if(phase > 3)
                                      phase = 0;
                                  }
                                  if(bout3 && (bout3 != Ancbout3))
                                  {
                                      phase += 3;
                                  }
                                  
                                  Ancbout1 = bout1;
                                  Ancbout2 = bout2;
                                  Ancbout3 = bout3;
                                }
                                
                                • Partager sur Facebook
                                • Partager sur Twitter
                                2b||!2b   sqrt(4b²)
                                  18 juin 2012 à 19:45:34

                                  Pour mesurer ta résistance, je vois deux possibilités :
                                  1) créer un générateur de courant (c'est un simple montage à transistor) et mesurer la tension (qui sera proportionnelle à la résistance)
                                  2) faire un pont diviseur avec une résistance fixe (en ayant mesuré sa valeur, vu que tu utilise probablement des résistances à 10%). La mesure de tension au milieu du pont vaudra R1/(R1+R2) * U.

                                  La seconde solution est moins précise (parce que la courbe n'est pas linéaire et qu'il est difficile d'exploiter toute la plage de l'ADC), mais demande beaucoup moins d'électronique.
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                  64kB de mémoire, c'est tout ce dont j'ai besoin
                                    18 juin 2012 à 20:04:16

                                    Donc si j'utilise la méthode 2, R1 et R2 sont égale à quoi ?
                                    J'ai sa :
                                    (code pour afficher les espaces)
                                                R1?          R2?
                                    +5V>-----capteur--|--résistance100K----->GND
                                                      |
                                                   Arduino
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                    2b||!2b   sqrt(4b²)
                                      20 juin 2012 à 15:59:39

                                      J'ai fais un code qui donne le nb de jour av. noël :
                                      #include <Wire.h>
                                      #include "RTClib.h"
                                      
                                      RTC_Millis RTC;
                                      
                                      long double J = 17;
                                      long double Mo = 6;
                                      long double A = 2012;
                                      long double H = 14;
                                      long double Mi = 37;
                                      long double S = 41;
                                      long double TotS = 0;
                                      long double J2 = 25;
                                      long double Mo2 = 12;
                                      long double A22 = 2012;
                                      long double H2 = 0;
                                      long double Mi2 = 0;
                                      long double S2 = 0;
                                      long double TotS2 = 0;
                                      
                                      int Jj = 17;
                                      int Hh = 14;
                                      int Mii = 37;
                                      int Ss = 41;
                                      
                                      void setup () {
                                        // following line sets the RTC to the date & time this sketch was compiled
                                        Wire.begin();
                                        RTC.begin(DateTime(__DATE__, __TIME__));
                                        TotS2 += S2;
                                        TotS2 += (Mi2*60);
                                        TotS2 += ((H2*60)*60);
                                        TotS2 += ((((J2*24)*60)*60)*Mo2);
                                      
                                        Serial.begin(57600);
                                        
                                      }
                                      
                                      void loop () 
                                      {
                                            //333334rduiMeteo33333
                                            //110J*02H*50min*20sec
                                            //*****avant noel*****
                                            //<-Humi.******Temp.->
                                            DateTime now = RTC.now();
                                            TotS = 0;
                                            J  = now.day();
                                            Mo = now.month();
                                            A  = now.year();
                                            H  = now.hour();
                                            Mi = now.minute();
                                            S  = now.second();
                                            TotS += S;
                                            TotS += (Mi*60);
                                            TotS += ((H*60)*60);
                                            TotS += (((J*24)*60)*60);
                                            TotS += ((((30*24)*60)*60)*Mo-1);
                                            TotS = TotS2 - TotS;
                                            Mi = TotS/60;
                                            H = Mi/60;
                                            J = H/24;
                                            Ss  = ((int)TotS)%60;
                                            Mii = ((int)Mi)%60;
                                            Hh  = ((int)H)%24;
                                            Jj  = ((int)J);
                                            Serial.print(Jj);Serial.print("J ");
                                            Serial.print(Hh);Serial.print("H ");
                                            Serial.print(Mii);Serial.print("min ");
                                            Serial.print(Ss);Serial.println("sec");
                                            Serial.println("Avant noel");
                                            Serial.println("");
                                            delay(1000);
                                      }
                                      

                                      Il ne marche pas, des fois les secondes sont négatives et elle avance de 3 en 3 une idée de pourquoi ?

                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                      2b||!2b   sqrt(4b²)
                                        20 juin 2012 à 16:17:50

                                        Ouai, secondes est sur un int... ce qui et trop petit pour stocker les valeurs... met toi sur du unsigned long tu seras plus tranquille... (tu pourras aller jusqu'à 4 294 967 295 secondes, ce qui fait grosso modo 136 ans :) alors qu'avec un int (signed par défaut) tu feras à peine 9 heures (car 32 767 valeurs possibles en positifs))
                                        • Partager sur Facebook
                                        • Partager sur Twitter

                                        Retrouvez moi sur mon blog et ma chaine Youtube !

                                          20 juin 2012 à 19:05:17

                                          Donc j'ai fait ça, sa marche :
                                          Ss  = ((long int)TotS)%60;
                                          Mii = ((long int)Mi)%60;
                                          Hh  = ((long int)H)%24;
                                          Jj  = ((long int)J);
                                          

                                          Il me manque juste le code pour ajouter aux secondes totales le nombre de mois passés (si on est le 6, il y a 5 mois passés)
                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                          2b||!2b   sqrt(4b²)
                                            20 juin 2012 à 20:35:01

                                            Citation : diode


                                            Il me manque juste le code pour ajouter aux secondes totales le nombre de mois passés


                                            J'ai peur de pas avoir compris ta question...
                                            • Partager sur Facebook
                                            • Partager sur Twitter

                                            Retrouvez moi sur mon blog et ma chaine Youtube !

                                              20 juin 2012 à 23:33:11

                                              ben, sa convertit temps de mois en secondes
                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                              2b||!2b   sqrt(4b²)
                                                20 juin 2012 à 23:50:38

                                                bah... 1 mois c'est 30.4375*24*3600 secondes

                                                En prenant en compte qu'une année c'est 365 jours et qu'il y a un jours en plus tout les 4 ans, on peut dire qu'une année c'est "en moyenne" 365.25 jours, ce qui donne donc 365.25/12 = 30.4375 jours par mois :)
                                                • Partager sur Facebook
                                                • Partager sur Twitter

                                                Retrouvez moi sur mon blog et ma chaine Youtube !

                                                  3 juillet 2012 à 10:29:01

                                                  Donc le code finale :
                                                  #include <Wire.h>
                                                  #include "RTClib.h"
                                                  
                                                  RTC_Millis RTC;
                                                  
                                                  long double J = 17;
                                                  long double Mo = 6;
                                                  long double A = 2012;
                                                  long double H = 14;
                                                  long double Mi = 37;
                                                  long double S = 41;
                                                  long double TotS = 0;
                                                  long double J2 = 25;
                                                  long double Mo2 = 12;
                                                  long double A22 = 2012;
                                                  long double H2 = 0;
                                                  long double Mi2 = 0;
                                                  long double S2 = 0;
                                                  long double TotS2 = 0;
                                                  
                                                  int Jj = 17;
                                                  int Hh = 14;
                                                  int Mii = 37;
                                                  int Ss = 41;
                                                  
                                                  void setup () {
                                                    // following line sets the RTC to the date & time this sketch was compiled
                                                    analogWrite(A3,HIGH);
                                                    analogWrite(A2,LOW);
                                                    Wire.begin();
                                                    RTC.begin(DateTime(__DATE__, __TIME__));
                                                    TotS2 += S2;
                                                    TotS2 += (Mi2*60);
                                                    TotS2 += ((H2*60)*60);
                                                    TotS2 += ((((J2*24)*60)*60)*Mo2);
                                                  
                                                    Serial.begin(57600);
                                                    Serial.println((double)TotS2);
                                                  }
                                                  
                                                  void loop () 
                                                  {
                                                        //333334rduiMeteo33333
                                                        //110J*02H*50min*20sec
                                                        //*****avant noel*****
                                                        //<-Humi.******Temp.->
                                                        DateTime now = RTC.now();
                                                        TotS = 0;
                                                        J  = now.day();
                                                        Mo = now.month();
                                                        A  = now.year();
                                                        H  = now.hour();
                                                        Mi = now.minute();
                                                        S  = now.second();
                                                        TotS += S;//Seconde
                                                        TotS += (Mi*60);//Minute
                                                        TotS += ((H*60)*60);//heure
                                                        TotS += (((J*24)*60)*60);//jour
                                                        TotS += 30,4375 * (Mo-1);//mois
                                                        TotS = TotS2 - TotS;//Sec tot avant noël
                                                        Mi = TotS/60;//Minutes tot avant noël
                                                        H = Mi/60;//Heure tot avant noël
                                                        J = H/24;//Jours tot avant noël
                                                        Ss  = ((long int)TotS)%60;//Sec avant noël
                                                        Mii = ((long int)Mi)%60;//Minutes avant noël
                                                        Hh  = ((long int)H)%24;//Heure avant noël
                                                        Jj  = ((long int)J);//Jours avant noël
                                                        Serial.print(Jj);Serial.print("J ");
                                                        Serial.print(Hh);Serial.print("H ");
                                                        Serial.print(Mii);Serial.print("min ");
                                                        Serial.print(Ss);Serial.println("sec");
                                                        Serial.println("Avant noel");
                                                        Serial.println("");
                                                        delay(1000);
                                                  }
                                                  

                                                  Il reste un problème : (à mon avis c'est juste que l'arduino ne manipule pas bien les grands nombres)
                                                  296J 13H 34min 4sec
                                                  Avant noel
                                                  
                                                  296J 13H 34min 4sec
                                                  Avant noel
                                                  
                                                  296J 13H 34min 4sec
                                                  Avant noel
                                                  
                                                  296J 13H 34min 2sec
                                                  Avant noel
                                                  
                                                  296J 13H 34min 0sec
                                                  Avant noel
                                                  
                                                  296J 13H 34min 0sec
                                                  Avant noel
                                                  
                                                  296J 13H 34min 0sec
                                                  Avant noel
                                                  
                                                  296J 13H 33min 58sec
                                                  Avant noel
                                                  
                                                  296J 13H 33min 56sec
                                                  Avant noel
                                                  
                                                  296J 13H 33min 56sec
                                                  Avant noel
                                                  
                                                  296J 13H 33min 56sec
                                                  Avant noel
                                                  
                                                  296J 13H 33min 54sec
                                                  Avant noel
                                                  • Partager sur Facebook
                                                  • Partager sur Twitter
                                                  2b||!2b   sqrt(4b²)
                                                    3 juillet 2012 à 10:59:44

                                                    Je trouve qu'il y a beaucoup de variables et de cast dans ton programme... Tu pourrais commenter un peu plus et on pourra voir pourquoi ca bugouille...
                                                    • Partager sur Facebook
                                                    • Partager sur Twitter

                                                    Retrouvez moi sur mon blog et ma chaine Youtube !

                                                      3 juillet 2012 à 11:17:59

                                                      Je commente que la partit intéressante :
                                                      /*transformation de la date en secondes*/
                                                      TotS += S;//Seconde
                                                      TotS += (Mi*60);//Minute
                                                      TotS += ((H*60)*60);//heure
                                                      TotS += (((J*24)*60)*60);//jour
                                                      TotS += 30,4375 * (Mo-1);//mois
                                                      
                                                      /*Seconde totale avant noël*/
                                                      TotS = TotS2 - TotS;
                                                      
                                                      /*transformation des secondes en date*/
                                                      //transformation en totale : tant de secondes = tant de minutes = tant d'heures = tant de jours
                                                      Mi = TotS/60;//Minutes
                                                      H = Mi/60;//Heure
                                                      J = H/24;//Jours
                                                      //transformation finale : il y a tant de secondes, tant de minutes, tant d'heures, tant de jours avant noël
                                                      Ss  = ((long int)TotS)%60;//Secondes avant noël
                                                      Mii = ((long int)Mi)%60;//Minutes avant noël
                                                      Hh  = ((long int)H)%24;//Heure avant noël
                                                      Jj  = ((long int)J);//Jours avant noël
                                                      


                                                      Et l'écran que j'ai acheter ici a une luminosité très faible : c'est normale ? si oui, comment y remédier ?
                                                      • Partager sur Facebook
                                                      • Partager sur Twitter
                                                      2b||!2b   sqrt(4b²)
                                                        3 juillet 2012 à 11:36:58

                                                        Pour l'écran, c'est le rétroéclairage qui est faible ou le contraste entre le bleu et le blanc ? Si c'est la deuxième, alors il y a une broche nommé V0 sur laquelle doit se trouver un potentiomètre et qui permet justement de régler ce contraste.

                                                        Petite remarque, tu utilises uniquement des valeurs entières, donc pourquoi déclarer des doubles ? (ta multiplication du mois sera casté au retour).

                                                        Sinon je vois pas trop la vite fait pourquoi ca "lag" (car si j'ai bien compris le problème est la). Apparemment les calculs sont OK...
                                                        Essai de diminuer ton delay() à la fin du programme (genre delay(500)) car en le faisant toutes les secondes je pense que ca pourrait etre une raison pour voir juste des secondes paires...


                                                        • Partager sur Facebook
                                                        • Partager sur Twitter

                                                        Retrouvez moi sur mon blog et ma chaine Youtube !

                                                          3 juillet 2012 à 11:42:14

                                                          C'est le rétroéclairage, j'ai mis le contraste au max.

                                                          Les double sont plus grand non ?

                                                          Avec un delay de 500ms j'ai ça :
                                                          296J 12H 20min 0sec
                                                          Avant noel
                                                          
                                                          296J 12H 20min 0sec
                                                          Avant noel
                                                          
                                                          296J 12H 20min 0sec
                                                          Avant noel
                                                          
                                                          296J 12H 20min 0sec
                                                          Avant noel
                                                          
                                                          296J 12H 20min 0sec
                                                          Avant noel
                                                          
                                                          296J 12H 20min 0sec
                                                          Avant noel
                                                          
                                                          296J 12H 19min 58sec
                                                          Avant noel
                                                          
                                                          296J 12H 19min 58sec
                                                          Avant noel



                                                          EDIT : avec ce code ça marche nickel ! :
                                                          #include <Wire.h>
                                                          #include "RTClib.h"
                                                          
                                                          RTC_Millis RTC;
                                                          
                                                          unsigned long int J = 17;
                                                          unsigned long int Mo = 6;
                                                          unsigned long int A = 2012;
                                                          unsigned long int H = 14;
                                                          unsigned long int Mi = 37;
                                                          unsigned long int S = 41;
                                                          unsigned long int TotS = 0;
                                                          unsigned long int J2 = 25;
                                                          unsigned long int Mo2 = 12;
                                                          unsigned long int A22 = 2012;
                                                          unsigned long int H2 = 0;
                                                          unsigned long int Mi2 = 0;
                                                          unsigned long int S2 = 0;
                                                          unsigned long int TotS2 = 0;
                                                          
                                                          int Jj = 17;
                                                          int Hh = 14;
                                                          int Mii = 37;
                                                          int Ss = 41;
                                                          
                                                          void setup () {
                                                            // following line sets the RTC to the date & time this sketch was compiled
                                                            analogWrite(A3,HIGH);
                                                            analogWrite(A2,LOW);
                                                            Wire.begin();
                                                            RTC.begin(DateTime(__DATE__, __TIME__));
                                                            TotS2 += S2;
                                                            TotS2 += (Mi2*60);
                                                            TotS2 += ((H2*60)*60);
                                                            TotS2 += ((((J2*24)*60)*60)*Mo2);
                                                          
                                                            Serial.begin(57600);
                                                            Serial.println((double)TotS2);
                                                          }
                                                          
                                                          void loop () 
                                                          {
                                                                //333334rduiMeteo33333
                                                                //110J*02H*50min*20sec
                                                                //*****avant noel*****
                                                                //<-Humi.******Temp.->
                                                                DateTime now = RTC.now();
                                                                TotS = 0;
                                                                J  = now.day();
                                                                Mo = now.month();
                                                                A  = now.year();
                                                                H  = now.hour();
                                                                Mi = now.minute();
                                                                S  = now.second();
                                                                TotS += S;//Seconde
                                                                TotS += (Mi*60);//Minute
                                                                TotS += ((H*60)*60);//heure
                                                                TotS += (((J*24)*60)*60);//jour
                                                                TotS += (unsigned long int)(30,4375 * (Mo-1));//mois
                                                                TotS = TotS2 - TotS;//Sec tot avant noël
                                                                Mi = TotS/60;//Minutes tot avant noël
                                                                H = Mi/60;//Heure tot avant noël
                                                                J = H/24;//Jours tot avant noël
                                                                Ss  = TotS%60;//Sec avant noël
                                                                Mii = Mi%60;//Minutes avant noël
                                                                Hh  = H%24;//Heure avant noël
                                                                Jj  = J;//Jours avant noël
                                                                Serial.print(Jj);Serial.print("J ");
                                                                Serial.print(Hh);Serial.print("H ");
                                                                Serial.print(Mii);Serial.print("min ");
                                                                Serial.print(Ss);Serial.println("sec");
                                                                Serial.println("Avant noel");
                                                                Serial.println("");
                                                                delay(1000);
                                                          }
                                                          

                                                          Console :
                                                          296J 4H 56min 27sec
                                                          Avant noel
                                                          
                                                          296J 4H 56min 26sec
                                                          Avant noel
                                                          
                                                          296J 4H 56min 25sec
                                                          Avant noel
                                                          
                                                          296J 4H 56min 24sec
                                                          Avant noel
                                                          • Partager sur Facebook
                                                          • Partager sur Twitter
                                                          2b||!2b   sqrt(4b²)
                                                            3 juillet 2012 à 12:01:54

                                                            les doubles sont surtout des nombres à virgules, et donc beaucoup plus long à gérer pour les calculs, si tu n'as que des entiers, long tout court sera très bien.

                                                            Mais bon, vu ce que tu en fait, un simple entier sur 16bits serait suffisant si tu optimisais un peu ton algo :p (cela dit, je suis pas expert en arduino, mais si c'est des micro 8bits, long doit te donner ça :p)
                                                            • Partager sur Facebook
                                                            • Partager sur Twitter
                                                              3 juillet 2012 à 14:02:19

                                                              Donc la différence entre "marche pas" et "marche" se jouait bien sur le "double" contre "int" ?
                                                              • Partager sur Facebook
                                                              • Partager sur Twitter

                                                              Retrouvez moi sur mon blog et ma chaine Youtube !

                                                              [projet] Station météo

                                                              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                                              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                                              • Editeur
                                                              • Markdown