|
@@ -41,11 +41,11 @@
|
|
#define REG_ALARM1_SEC 0x07
|
|
#define REG_ALARM1_SEC 0x07
|
|
#define REG_ALARM1_MIN 0x08
|
|
#define REG_ALARM1_MIN 0x08
|
|
#define REG_ALARM1_HOUR 0x09
|
|
#define REG_ALARM1_HOUR 0x09
|
|
-#define REG_ALARM1_DATE 0xA0
|
|
|
|
|
|
+#define REG_ALARM1_DATE 0x0a
|
|
|
|
|
|
-#define REG_ALARM2_MIN 0xB0
|
|
|
|
-#define REG_ALARM2_HOUR 0xC0
|
|
|
|
-#define REG_ALARM2_DATE 0xD0
|
|
|
|
|
|
+#define REG_ALARM2_MIN 0x0b
|
|
|
|
+#define REG_ALARM2_HOUR 0x0c
|
|
|
|
+#define REG_ALARM2_DATE 0x0d
|
|
|
|
|
|
#define REG_CON 0x0e
|
|
#define REG_CON 0x0e
|
|
#define REG_STATUS 0x0f
|
|
#define REG_STATUS 0x0f
|
|
@@ -458,26 +458,170 @@ uint8_t DS3231::_encode(uint8_t value)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
-void DS3231::setAlarm1Time(uint8_t date,uint8_t hour, uint8_t min, uint8_t sec)
|
|
|
|
|
|
+void DS3231::setAlarm1Time(uint8_t hour, uint8_t min)
|
|
{
|
|
{
|
|
- if (((date>=1) && (date<31)) && ((hour>=0) && (hour<24)) && ((min>=0) && (min<60)) && ((sec>=0) && (sec<60)))
|
|
|
|
|
|
+ if (((hour>=0) && (hour<24)) && ((min>=0) && (min<60)))
|
|
{
|
|
{
|
|
- _writeRegister(REG_ALARM1_SEC, _encode(sec));
|
|
|
|
- _writeRegister(REG_ALARM1_MIN, _encode(min));
|
|
|
|
- _writeRegister(REG_ALARM1_HOUR, _encode(hour));
|
|
|
|
- _writeRegister(REG_ALARM1_DATE, _encode(date));
|
|
|
|
|
|
+ min = _encode(min);
|
|
|
|
+ hour = _encode(hour);
|
|
|
|
+
|
|
|
|
+ uint8_t sec = 0x00;
|
|
|
|
+ min = min &~ (1<<7);
|
|
|
|
+ hour = hour &~ (1<<7);;
|
|
|
|
+ hour = hour &~ (1<<6);
|
|
|
|
+ uint8_t date = 0x81;
|
|
|
|
+ _writeRegister(REG_ALARM1_SEC, sec);
|
|
|
|
+ _writeRegister(REG_ALARM1_MIN, min);
|
|
|
|
+ _writeRegister(REG_ALARM1_HOUR, hour);
|
|
|
|
+ _writeRegister(REG_ALARM1_DATE, date);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
-void DS3231::setAlarm2Time(uint8_t min, uint8_t hour, uint8_t date)
|
|
|
|
|
|
+void DS3231::setAlarm2Time(uint8_t hour, uint8_t min)
|
|
{
|
|
{
|
|
- if (((hour>=0) && (hour<24)) && ((min>=0) && (min<60)) && ((date>=1) && (date<31)))
|
|
|
|
|
|
+ if (((hour>=0) && (hour<24)) && ((min>=0) && (min<60)))
|
|
{
|
|
{
|
|
|
|
+ min = _encode(min);
|
|
|
|
+ hour = _encode(hour);
|
|
|
|
+
|
|
|
|
+ min = min &~ (1<<7);
|
|
|
|
+ hour = hour &~ 0x3f;
|
|
|
|
+ uint8_t date = 0x81;
|
|
_writeRegister(REG_ALARM2_MIN, _encode(min));
|
|
_writeRegister(REG_ALARM2_MIN, _encode(min));
|
|
_writeRegister(REG_ALARM2_HOUR, _encode(hour));
|
|
_writeRegister(REG_ALARM2_HOUR, _encode(hour));
|
|
_writeRegister(REG_ALARM2_DATE, _encode(date));
|
|
_writeRegister(REG_ALARM2_DATE, _encode(date));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+char *DS3231::getAlarm1Str(uint8_t format)
|
|
|
|
+{
|
|
|
|
+ static char output[] = "xx:xx:xx-xxxxxx";
|
|
|
|
+ uint8_t sec = _readRegister(REG_ALARM1_SEC);
|
|
|
|
+ uint8_t min = _readRegister(REG_ALARM1_MIN);
|
|
|
|
+ uint8_t hour = _readRegister(REG_ALARM1_HOUR);
|
|
|
|
+ uint8_t date = _readRegister(REG_ALARM1_DATE);
|
|
|
|
+
|
|
|
|
+ // Formatage des bits de controle
|
|
|
|
+ if((sec&(1<<7)) == 0)
|
|
|
|
+ output[14] = 48;
|
|
|
|
+ else
|
|
|
|
+ output[14] = 49;
|
|
|
|
+
|
|
|
|
+ if((min&(1<<7)) == 0)
|
|
|
|
+ output[13] = 48;
|
|
|
|
+ else
|
|
|
|
+ output[13] = 49;
|
|
|
|
+
|
|
|
|
+ if((hour&(1<<7)) == 0)
|
|
|
|
+ output[12] = 48;
|
|
|
|
+ else
|
|
|
|
+ output[12] = 49;
|
|
|
|
+
|
|
|
|
+ if((hour&(1<<6)) == 0)
|
|
|
|
+ output[10] = 50;
|
|
|
|
+ else
|
|
|
|
+ output[10] = 49;
|
|
|
|
+
|
|
|
|
+ if((date&(1<<7)) == 0)
|
|
|
|
+ output[11] = 48;
|
|
|
|
+ else
|
|
|
|
+ output[11] = 49;
|
|
|
|
+
|
|
|
|
+ if((date&(1<<6)) == 0)
|
|
|
|
+ output[9] = 77;
|
|
|
|
+ else
|
|
|
|
+ output[9] = 87;
|
|
|
|
+
|
|
|
|
+ //Fin formatage des bits de controle
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ sec = _decode(sec);
|
|
|
|
+ min = _decode(min);
|
|
|
|
+ hour = _decodeH(hour);
|
|
|
|
+
|
|
|
|
+ if (hour<10)
|
|
|
|
+ output[0]=48; // "0" en ASCII
|
|
|
|
+ else
|
|
|
|
+ output[0]=char((hour / 10)+48);
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ output[1]=char((hour % 10)+48);
|
|
|
|
+
|
|
|
|
+ if (min<10)
|
|
|
|
+ output[3]=48; // "0" en ASCII
|
|
|
|
+ else
|
|
|
|
+ output[3]=char((min / 10)+48);
|
|
|
|
+
|
|
|
|
+ output[4]=char((min % 10)+48);
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ output[6]=char((sec / 10)+48);
|
|
|
|
+ output[7]=char((sec % 10)+48);
|
|
|
|
+ output[16]=0;
|
|
|
|
+
|
|
|
|
+ return (char*)&output;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+char *DS3231::getAlarm2Str(uint8_t format)
|
|
|
|
+{
|
|
|
|
+ static char output[] = "xx:xx-xxxxx";
|
|
|
|
+ uint8_t min = _readRegister(REG_ALARM2_MIN);
|
|
|
|
+ uint8_t hour = _readRegister(REG_ALARM2_HOUR);
|
|
|
|
+ uint8_t date = _readRegister(REG_ALARM2_DATE);
|
|
|
|
+
|
|
|
|
+ // Formatage des bits de controle
|
|
|
|
+
|
|
|
|
+ if((min&(1<<7)) == 0)
|
|
|
|
+ output[10] = 48;
|
|
|
|
+ else
|
|
|
|
+ output[10] = 49;
|
|
|
|
+
|
|
|
|
+ if((hour&(1<<7)) == 0)
|
|
|
|
+ output[9] = 48;
|
|
|
|
+ else
|
|
|
|
+ output[9] = 49;
|
|
|
|
+
|
|
|
|
+ if((hour&(1<<6)) == 0)
|
|
|
|
+ output[7] = 50;
|
|
|
|
+ else
|
|
|
|
+ output[7] = 49;
|
|
|
|
+
|
|
|
|
+ if((date&(1<<7)) == 0)
|
|
|
|
+ output[8] = 48;
|
|
|
|
+ else
|
|
|
|
+ output[8] = 49;
|
|
|
|
+
|
|
|
|
+ if((date&(1<<6)) == 0)
|
|
|
|
+ output[6] = 77;
|
|
|
|
+ else
|
|
|
|
+ output[6] = 87;
|
|
|
|
+
|
|
|
|
+ //Fin formatage des bits de controle
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ min = _decode(min);
|
|
|
|
+ hour = _decode(hour);
|
|
|
|
+
|
|
|
|
+ if (hour<10)
|
|
|
|
+ output[0]=48; // "0" en ASCII
|
|
|
|
+ else
|
|
|
|
+ output[0]=char((hour / 10)+48);
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ output[1]=char((hour % 10)+48);
|
|
|
|
+
|
|
|
|
+ if (min<10)
|
|
|
|
+ output[3]=48; // "0" en ASCII
|
|
|
|
+ else
|
|
|
|
+ output[3]=char((min / 10)+48);
|
|
|
|
+
|
|
|
|
+ output[4]=char((min % 10)+48);
|
|
|
|
+
|
|
|
|
+ output[11]=0;
|
|
|
|
+
|
|
|
|
+ return (char*)&output;
|
|
|
|
+}
|