Go Down

Topic: [Info] Horloge binaire (Read 5313 times) previous topic - next topic

fdufnews

#15
Feb 21, 2014, 05:10 pm Last Edit: Feb 21, 2014, 05:24 pm by fdufnews Reason: 1

Ma question : Ce document me semble une référence pour le langage C "normalisé".
Le C d'Arduino est-il 100% conforme où existe t'il des différences ?


Arduino s'appuie sur les compilateurs C et C++ pour AVR en ajoutant une surcouche pour "simplifier" l'usage pour les novices.
Donc l'environnement Arduino n'apporte à priori pas de limitation au langage.
Les limitations sont celles du compilateur qui n'implémente pas certaines fonctionnalités trop lourdes pour un microcontrôleur.

Pour les courageux, la doc est là: http://www.nongnu.org/avr-libc/

patg_


je n'ai pas de RTC.isrunning() ni de RTC.now().unixtime() dans mon code oO ^^

Ajoute-le comme ça:
Serial.println(RTC.isrunning()) ;
et regarde ce que ça te donne dans le moniteur série.


Par contre RTC.now().unixtime() c'est quoi ça ? :P

Ca récupère le nombre de secondes écoulées depuis le 1er Janvier 1970:
Code: [Select]

Serial.print("nb de secondes depuis 1970: ");
Serial.println(RTC.now().unixtime());

Mes Arduineries: http://breizhmakers.over-blog.com/

alfredcore

D'accord je comprends un peu mieux merci :) Alor j'ai fait le test comme dit  et ça me donne sa :)

Code: [Select]
21/2/2014 12:22:0
nb de secondes depuis 1970: 1392985320
1
21/2/2014 12:22:0
nb de secondes depuis 1970: 1392985320
1
21/2/2014 12:22:0
nb de secondes depuis 1970: 1392985320
1
21/2/2014 12:22:0
nb de secondes depuis 1970: 1392985320
1
21/2/2014 12:22:0
nb de secondes depuis 1970: 1392985320
1



Par contre sans avoir de bouton connecter il modifie seul l'heure /minute

au debut il etai comme sa
Code: [Select]
1
21/2/2014 15:24:0
nb de secondes depuis 1970: 1392996240


et a la fin


Code: [Select]
21/2/2014 21:34:0
nb de secondes depuis 1970: 1393018440
1

patg_

Je crois comprends:
Es-tu sûr que tu n'appelles
Code: [Select]
RTC.adjust(now);
que lorsqu'un bouton est appuyé?

Là tout se passe comme si tu appelais
Code: [Select]
RTC.adjust(now);
à chaque itération de loop() avec pour effet une heure qui ne change pas puisque tu remets à l'ancienne heure à chaque itération.
Mes Arduineries: http://breizhmakers.over-blog.com/

alfredcore

Effectivement tu as raison :) j'ai modifié sa passe un peu beaucoup mieux :) il compte enfin correctement apprêt avoir modifié l'heure :D

Mais j'ai toujours un problème pour le changement d'heure :/ et j'ai trouvé pourquoi mais je n'ai pas trouvé comment modifier correctement :) je cherche ^^

Enfait dans mon "code" il met à jour les heure/minute uniquement quand il n'y a rien de connecter sur les borne quand les deux sont connecter il ne modifie plus l'heure il faudrait que j'inverse, mais comme je n'ai pas créé cette partie du code moi-même j'ai du mal :/


Code: [Select]
//mon test

#include <Wire.h>
#include "RTClib.h"
RTC_DS1307 RTC;


int latchPin = 8;
int clockPin = 12;
int dataPin = 11;

const int BouttonH = 6;
const int BouttonM = 7;

int sBouttonH = 1;
int clkBouttonH = 0;
int sBouttonM = 1;
int clkBouttonM = 0;


void setup() {
    Serial.begin(9600);
    Wire.begin();
    RTC.begin();
    pinMode(latchPin, OUTPUT);
    pinMode(clockPin, OUTPUT);
    pinMode(dataPin, OUTPUT);
    pinMode(BouttonH, INPUT);
    pinMode(BouttonM, INPUT);
  }
 
   



byte bcdSecond;
byte bcdMinute;
byte bcdHour;
   

byte decodeBCD(byte bcdValue)
{
return  (10 * (bcdValue >> 5)) + ((0xf & bcdValue) >> 1 );
}

byte encodeBCD(byte value)
{
  return ((value/10)<< 5) | ((value % 10) << 1 );
}


void loop() {
 
Serial.println(RTC.isrunning()) ;

  DateTime now = RTC.now();
 
  bcdSecond= now.second();
  bcdMinute= now.minute();
  bcdHour= now.hour();
 
  sBouttonH = digitalRead(BouttonH);
if(sBouttonH == 1)
  clkBouttonH = 0;
sBouttonM = digitalRead(BouttonM);
if(sBouttonM == 1)
  clkBouttonM = 0;
 
 
 
        if(sBouttonH == 0)
      {
        clkBouttonH = clkBouttonH++;
        if(clkBouttonH > 2){
        now = DateTime(now.year(),now.month(),now.day(),(now.hour()+1)%24,now.minute(),now.second());
        RTC.adjust(now);
        }
      }
     
          if(sBouttonM == 0)
      {     
        clkBouttonM = clkBouttonM++;
        if(clkBouttonM > 2){
        now = DateTime(now.year(),now.month(),now.day(),now.hour(),(now.minute()+1)%60,0);
        RTC.adjust(now);
        }
      }
   
   
 
 

 
   
  digitalWrite(latchPin, LOW);
  shiftOut(dataPin, clockPin, MSBFIRST, encodeBCD(bcdHour)); 
  shiftOut(dataPin, clockPin, MSBFIRST, encodeBCD(bcdMinute));   
  shiftOut(dataPin, clockPin, MSBFIRST, encodeBCD(bcdSecond));
  digitalWrite(latchPin, HIGH);
 
 
 
    //We print the day
    Serial.print(now.day(), DEC);
    Serial.print('/');
    Serial.print(now.month(), DEC);
    Serial.print('/');
    Serial.print(now.year(), DEC);
    Serial.print(' ');
    Serial.print(now.hour(), DEC);
    Serial.print(':');
    Serial.print(now.minute(), DEC);
    Serial.print(':');
    Serial.print(now.second(), DEC);
    Serial.println();
   
Serial.print("nb de secondes depuis 1970: ");
Serial.println(RTC.now().unixtime());

  }



nulentout

Bonjour les Amis,
Juste un petit texte pour remercier fdufnews relatifs à deux points précis :
• Pour la conformité du C Arduino avec le standard ANSI c'est compris.
• Ton lien sur la possibilté de travailler directement sur les registres de gestion des PORTS est exactement l'information dont j'avais besoin. C'est parfait.

Go Up