read/write numbers into eeprom
This commit is contained in:
parent
b69a63e5f4
commit
1cb9d3a659
41
main.c
41
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<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
|
||||
|
|
Loading…
Reference in New Issue