From 1cb9d3a659d92ca5c5a6a1dc7f698187d4b44e73 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?King=20K=C3=A9vin?= Date: Wed, 17 May 2017 17:11:33 +0200 Subject: [PATCH] read/write numbers into eeprom --- main.c | 41 +++++++++++++++++++++++++++++++---------- 1 file changed, 31 insertions(+), 10 deletions(-) diff --git a/main.c b/main.c index 38c4128..1b888ab 100644 --- a/main.c +++ b/main.c @@ -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>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