Bonjour,
J'ai trouvé sur le net un programme permettant de modifier la date/Heure DS1307.
Dans mon cas, j'ai 3 boutons connecté à l'état BAS sur les ports 23-24-25 que j'utilise pour d'autre fonction et aussi pour modifié la date/heure.
Le souci s'est que le reglage s'effectue avec des boutons sur une entrée analogique A0. J'ai pas beaucoups de connaissance et j'ai essayé d'associé une valeur lors de l'appui sur un bouton Essai non concluant.
[
#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
#include <Wire.h>
#include <DS1307new.h>
uint16_t startAddr = 0x0000; // Adresse de démarrage Start dans NV-RAM
uint16_t lastAddr; // Nelle addresse des stockage NV-RAM
uint16_t TimeIsSet = 0xaa55; // Prévient qu'il n'y a pas de remise à l'heure
#define DDS_LOAD 12 //FQ_UD
#define DDS_CLOCK 3
#define DDS_DATA 2
#define Touche_PIN A0 // Entrée des infos boutons
int sensorPin = A0;
int sensorValue = 0;
int val_key;
int Select;
int Heure;
int Minute;
int Seconde;
int Jour;
int Mois;
int Annee;
int Modif = 0;
char LeMois;
const int btn_u = 23; // the pin that the Up pushbutton is attached to
const int btn_d = 24;
const int btn_s = 25;
int val_ana_btn_u = 300;
int val_ana_btn_d = 100;
int val_ana_btn_s = 700;
int ibtn_u = 0;
int ibtn_d = 0;
int ibtn_s = 0;
////////////////////////
////// Sorties tensions alternées + avance rapide //////
int Altern1 = 11; // pin 11 tension alternée
int Altern2 = 12; // pin 12 tension alternée inverse
void setup () {
pinMode(2, INPUT); // Test SQW pin, D2 = INPUT
digitalWrite(2, HIGH); // Test SQW pin, D2 = Pullup on
pinMode(btn_u, INPUT);
pinMode(btn_d, INPUT);
pinMode(btn_s, INPUT);
RTC.setRAM(0, (uint8_t *)&startAddr, sizeof(uint16_t));// Entree startAddr in NV-RAM address 0x08
TimeIsSet = 0xffff;
RTC.setRAM(54, (uint8_t *)&TimeIsSet, sizeof(uint16_t));
RTC.ctrl = 0x00; // 0x00=disable SQW pin, 0x10=1Hz,
// 0x11=4096Hz, 0x12=8192Hz, 0x13=32768Hz
RTC.setCTRL();
pinMode( Touche_PIN, INPUT ); //ensure A0 is an input
digitalWrite( Touche_PIN, LOW ); //ensure pullup is off on A0
lcd.begin(16, 2);
lcd.setCursor(0, 0);
pinMode(Altern1, OUTPUT);
pinMode(Altern2, OUTPUT);
}
////////////////////////////
void Bouton ()
{
delay(100);
if ((Select > 0) and (Select < 4))
{
lcd.setCursor( 0, 0 );
lcd.print(" ");
lcd.setCursor( 4, 0 );
if (Jour < 10) { lcd.print ("0");}
lcd.print( Jour );
lcd.print( ":");
if (Mois < 10) { lcd.print ("0");}
lcd.print( Mois );
lcd.print( ":" );
lcd.print( Annee );
}
if ((Select > 3) and (Select < 7))
{
lcd.setCursor( 0, 0 );
lcd.print(" ");
lcd.setCursor(4, 0 );
if (Heure < 10) { lcd.print ("0");}
lcd.print(Heure );
lcd.print( ":");
if (Minute < 10) { lcd.print ("0");}
lcd.print( Minute );
lcd.print( ":" );
if (Seconde < 10) { lcd.print ("0");}
lcd.print( Seconde );;
}
val_key = 0; // RAZ valeur de la touche
/* ibtn_u=digitalRead(btn_u);
ibtn_d=digitalRead(btn_d);
ibtn_s=digitalRead(btn_s);
if (ibtn_u == LOW)
{sensorValue = val_ana_btn_u;}
else {sensorValue = 0;}
delay (100);
if (ibtn_d == LOW)
{sensorValue = val_ana_btn_d;}
else {sensorValue = 0;}
delay (100);
if (ibtn_s == LOW)
{sensorValue = val_ana_btn_s;}
else {sensorValue = 0;}
delay (100);
*/
sensorValue = analogRead(sensorPin); // lecture de la touche
val_key = int(sensorValue/100); // valeur entière de la touche / 10
switch (val_key)
{
case 7 : //Select
{
lcd.setCursor( 5, 1 );
lcd.print( "Select " );
Select = (Select + 1);
if (Select == 1) {
lcd.setCursor( 0, 1 );
lcd.print (" Reglage jour ");}
if (Select == 2) {
lcd.setCursor( 0, 1 );
lcd.print (" Reglage mois ");}
if (Select == 3) {
lcd.setCursor( 0, 1 );
lcd.print (" Reglage annee ");}
if (Select == 4) {
lcd.setCursor( 0, 1 );
lcd.print (" Reglage heure ");}
if (Select == 5) {
lcd.setCursor( 0, 1 );
lcd.print (" Reglage minute ");}
if (Select == 6) {
lcd.setCursor( 0, 1 );
lcd.print (" Reglage seconde");}
if (Select == 7){
lcd.setCursor( 0, 1 );
lcd.print (" Top ! ");}
if (Select == 8){
lcd.setCursor (0,1);
lcd.print (" ");
(Select = 0);
if (Modif == 1) { //Remise à l'heure
RTC.setRAM(0, (uint8_t *)&startAddr, sizeof(uint16_t));// Entrée startAddr dans NV-RAM address 0x08
TimeIsSet = 0xffff;
RTC.setRAM(54, (uint8_t *)&TimeIsSet, sizeof(uint16_t));
if (TimeIsSet != 0xaa55)
{
RTC.stopClock();
RTC.fillByYMD(Annee,Mois,Jour);
RTC.fillByHMS(Heure,Minute,Seconde);
RTC.setTime();
TimeIsSet = 0xaa55;
RTC.setRAM(54, (uint8_t *)&TimeIsSet, sizeof(uint16_t));
RTC.startClock();
}
else
{
RTC.getTime();
Modif = 0;
lcd.clear();
}
}
}
}
break;
case 3: //Down
{
Modif = 1;
if (Select == 1) {Jour = (Jour - 1);}
if (Jour < 1) {(Jour = 31);}
if (Select == 2){ Mois = (Mois - 1);}
if (Mois < 1) {(Mois = 12);}
if (Select == 3){Annee = (Annee - 1);}
if (Select == 4) {Heure = (Heure - 1);}
if (Heure < 1) {(Heure = 23);}
if (Select == 5){ Minute = (Minute - 1);}
if (Minute < 1) {(Minute = 59);}
if (Select == 6){Seconde = (Seconde - 1);}
if (Seconde < 1) {(Seconde = 59);}
}
break;
case 1: //UP
{
Modif = 1;
if (Select == 1) {Jour = (Jour + 1);}
if (Jour > 31) {(Jour = 1);}
if (Select == 2){ Mois = (Mois + 1);}
if (Mois > 12) {(Mois = 1);}
if (Select == 3){Annee = (Annee + 1);}
if (Select == 4) {Heure = (Heure + 1);}
if (Heure > 23) {(Heure = 0);}
if (Select == 5){ Minute = (Minute + 1);}
if (Minute > 59 ) {(Minute = 0);}
if (Select == 6){Seconde = (Seconde + 1);}
if (Seconde > 59) {(Seconde = 0);}
}
break;
}
}
/////////////////////////////////////////////////
void loop ()
{
if (Select == 0)
{
RTC.getTime();
Heure = RTC.hour;
Minute = RTC.minute;
Seconde = RTC.second;
Jour = RTC.day;
Mois = RTC.month;
Annee = RTC.year;
if ((RTC.second == 00) and (RTC.second != 30)) {
digitalWrite(Altern1, HIGH);
digitalWrite(Altern2, LOW);}
if ((RTC.second == 30)and (RTC.second != 00)) {
digitalWrite(Altern1, LOW);
digitalWrite(Altern2, HIGH);}
if ((RTC.second != 30) and (RTC.second != 00)) {
digitalWrite(Altern1, LOW);
digitalWrite(Altern2, LOW);}
lcd.setCursor( 4, 0 );
if (Heure < 10) {lcd.print ("0");}
lcd.print (Heure);
lcd.print( ":");
if (Minute < 10) { lcd.print ("0");}
lcd.print( Minute );
lcd.print( ":" );
if (Seconde < 10) { lcd.print ("0");}
lcd.print( Seconde );
lcd.print(" ");
lcd.setCursor( 0, 1 );
if (Jour < 10) { lcd.print ("0");}
lcd.print(Jour );
lcd.print( " ");
//if (Mois < 10) { lcd.print ("0");}
switch (RTC.month){
case 1:
lcd.print ("Janvier");
break;
case 2:
.....
case 12:
lcd.print ("decemb.");
break;
}
lcd.print( " " );
lcd.print( Annee );
}
// RAZ valeur de la touche
sensorValue = analogRead(sensorPin); // lecture de la touche
/*ibtn_u=digitalRead(btn_u);
ibtn_d=digitalRead(btn_d);
ibtn_s=digitalRead(btn_s);
if (ibtn_u == LOW)
{sensorValue = val_ana_btn_u;}
else {sensorValue = 0;}
if (ibtn_d == LOW)
{sensorValue = val_ana_btn_d;}
else {sensorValue = 0;}
if (ibtn_s == LOW)
{sensorValue = val_ana_btn_s;}
else {sensorValue = 0;}
val_key = int(sensorValue/100); // valeur entière de la touche / 10
// lcd.setCursor( 0, 0 );
// lcd.print (sensorValue);
if (val_key < 10) { Bouton();}
//Avance rapide
if (val_key == 0)
{
digitalWrite (Altern1, HIGH);
digitalWrite (Altern2, LOW);
delay(250);
digitalWrite (Altern1, LOW);
digitalWrite (Altern2, HIGH);
delay(250);
}
}
]
Est ce que vous pouvez m'aider. J'ai cherché pendant des semaines je commence à désespérer. lol
Merci