read/write numbers into eeprom

This commit is contained in:
King Kévin 2017-05-17 17:11:33 +02:00
parent b69a63e5f4
commit 1cb9d3a659
1 changed files with 31 additions and 10 deletions

41
main.c
View File

@ -60,7 +60,7 @@ volatile bool clap_flag = false; /**< flag set on clap */
#define SQUARE_WAVE_PIN 0 /**< pin connected to RTC DS1307 square wave output */
volatile uint8_t rtc_seconds = 0; /**< number of seconds passed incremented by the square wave */
#define STANDBY_TIMEOUT 30 /**< number of seconds after last shake before going down */
#define STANDBY_TIMEOUT 5 /**< number of seconds after last shake before going down */
volatile uint16_t standby_timer = 0; /**< number of seconds since last wake-up/activity */
#define FRAME_TIMER 2 /**< timer to count frame time */
@ -528,11 +528,11 @@ void main(void)
// get and display numbers on TM1637
for (uint8_t number=0; number<LENGTH(numbers); number++) {
uint8_t ram[2] = {0};
if (!rtc_ds1307_read_ram(ram, number*sizeof(ram), sizeof(ram))) {
printf("could not get number from DS1307\n");
uint8_t bytes[2] = {0};
if (!rtc_ds1307_read_rom(number*LENGTH(bytes), bytes, LENGTH(bytes))) {
printf("could not get number from EEPROM\n");
}
numbers[number].number = (ram[0]<<8)+ram[1];
numbers[number].number = (bytes[0]<<8)+bytes[1];
mux_select(number);
if (0xffff==numbers[number].number) {
led_tm1637_off();
@ -724,7 +724,7 @@ void main(void)
uint16_t buttons_diff = buttons^buttons_new; // get difference
buttons = buttons_new; // save new state
if (buttons_diff) { // only do something if there is a change
printf("button pressed: %016b\n", buttons);
//printf("button pressed: %016b\n", buttons);
for (uint8_t number=0; number<LENGTH(numbers); number++) {
if (buttons_diff&(1<<numbers[number].up) || buttons_diff&(1<<numbers[number].down)) { // buttons for number
if (buttons&(1<<numbers[number].up) && buttons&(1<<numbers[number].down)) { // both buttons are pressed
@ -753,9 +753,9 @@ void main(void)
led_tm1637_number(numbers[number].number);
}
// save number
uint8_t ram[2] = {numbers[number].number>>8, numbers[number].number};
if (!rtc_ds1307_write_ram(ram, number*sizeof(ram), sizeof(ram))) {
printf("could not set number on DS1307\n");
uint8_t bytes[2] = {numbers[number].number>>8, numbers[number].number};
if (!rtc_ds1307_write_rom(number*LENGTH(bytes), bytes, LENGTH(bytes))) {
printf("could not set number on EEPROM\n");
}
}
if ((buttons_diff&(1<<9) && buttons&(1<<9)) || (buttons_diff&(1<<8) && buttons&(1<<8))) { // buttons for time pressed
@ -809,9 +809,29 @@ void main(void)
rtc_tick_flag = false; // reset flag
action = true; // action has been performed
led_toggle(); // toggle LED (good to indicate if main function is stuck)
if (standby_timer>=STANDBY_TIMEOUT && false) { // standby timeout complete
if (standby_timer>=STANDBY_TIMEOUT) { // standby timeout complete
// go into standby mode
printf("shutting down\n");
// increment and save scene and take if there has been a clap
if (-2==morse_delay) {
morse_delay = -1; // prevent incrementing multiple times
if (numbers[0].number!=0xffff) {
numbers[0].number = (numbers[0].number+1)%10000;
uint8_t bytes[2] = {numbers[0].number>>8, numbers[0].number};
if (!rtc_ds1307_write_rom(0*LENGTH(bytes), bytes, LENGTH(bytes))) {
printf("could not set number on EEPROM\n");
}
}
if (numbers[1].number!=0xffff) {
numbers[1].number = (numbers[1].number+1)%10000;
uint8_t bytes[2] = {numbers[1].number>>8, numbers[1].number};
if (!rtc_ds1307_write_rom(1*LENGTH(bytes), bytes, LENGTH(bytes))) {
printf("could not set number on EEPROM\n");
}
}
}
#if 0
timer_disable_counter(TIM(BUZZER_TIMER)); // stop buzzing
led_max7219_off(0xff); // switch off MAX7219 displays
for (uint8_t tm1637=0; tm1637<7; tm1637++) { // switch off TM1637 displays
mux_select(tm1637); // selecting TM1637 display
@ -821,6 +841,7 @@ void main(void)
SCB_SCR |= SCB_SCR_SLEEPDEEP; // enable deep sleep
pwr_set_standby_mode(); // go to deep sleep
while (true); // we should be shut down at this point
#endif
}
if (rtc_seconds>=60) { // one minute passed
rtc_ds1307_time = rtc_ds1307_read_time(); // get time/date from external RTC