bonjour tout le monde,
ayant un peu de temps ce matin, je me suis amusé a faire une pendule inutile, donc indispensable.
un tiny rtc v1.1
un servo moteur
un nono
le but étant d’allumer une led toutes les minutes et d’avoir une aiguille indiquant les secondes.
vraiment fait à l’arrache, mais ca fonctionne.
#include <Wire.h>
#include <DS1307.h>
#include <Servo.h>
Servo myservo; // create servo object to control a servo
int rtc[7];
byte rr[7];
int ledPin = 13;
int heure_alarm = 13;
int mn_alarm = 02;
int sec_alarm = 00;
int temps_alarm = 5000;
void setup()
{
myservo.attach(9);
DDRC|=_BV(2) |_BV(3); // POWER:Vcc Gnd
PORTC |=_BV(3); // VCC PINC3
pinMode(ledPin, OUTPUT);
Serial.begin(9600);
RTC.get(rtc,true);
Serial.println(rtc[6]);
Serial.println("titi");
if(rtc[6]<2015){
Serial.println("lolo");
RTC.stop();
RTC.set(DS1307_SEC,1);
RTC.set(DS1307_MIN,32);
RTC.set(DS1307_HR,12);
RTC.set(DS1307_DOW,2);
RTC.set(DS1307_DATE,13);
RTC.set(DS1307_MTH,10);
RTC.set(DS1307_YR,16);
RTC.start();
}
//RTC.SetOutput(LOW);
//RTC.SetOutput(HIGH);
//RTC.SetOutput(DS1307_SQW1HZ);
//RTC.SetOutput(DS1307_SQW4KHZ);
//RTC.SetOutput(DS1307_SQW8KHZ);
RTC.SetOutput(DS1307_SQW32KHZ);
}
void loop()
{
int i;
RTC.get(rtc,true);
delay(1000);
myservo.write(rtc[0]);
Serial.print(" Il est : ");
Serial.print(rtc[2]);
Serial.print("H");
Serial.print(rtc[1]);
Serial.print("mn");
Serial.print(rtc[0]);
Serial.println("s");
Serial.print("Date : ");
Serial.print(rtc[6]);
Serial.print("Y");
Serial.print(rtc[5]);
Serial.print("Mois");
Serial.print(rtc[4]);
Serial.println("Jour");
Serial.println(mn_alarm);
if(rtc[2]==heure_alarm && rtc[1]==mn_alarm && rtc[0]== sec_alarm){
unsigned long time_debut=millis();
while( millis() - time_debut<temps_alarm){
Serial.println("alarm");
digitalWrite(ledPin, HIGH);
myservo.write(rtc[0]);
}
mn_alarm++;
}else{
digitalWrite(ledPin, LOW);
}
if (Serial.available() > 6) {
for(i=0;i<7;i++){
rr[i]=BCD2DEC(Serial.read());
}
Serial.println("SET TIME:");
RTC.stop();
RTC.set(DS1307_SEC,rr[6]);
RTC.set(DS1307_MIN,rr[5]);
RTC.set(DS1307_HR,rr[4]);
RTC.set(DS1307_DOW,rr[3]);
RTC.set(DS1307_DATE,rr[2]);
RTC.set(DS1307_MTH,rr[1]);
RTC.set(DS1307_YR,rr[0]);
RTC.start();
}
}
char BCD2DEC(char var){
if (var>9){
var=(var>>4)*10+(var&0x0f);
}
return var;
}