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 */
|
#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 */
|
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 */
|
volatile uint16_t standby_timer = 0; /**< number of seconds since last wake-up/activity */
|
||||||
|
|
||||||
#define FRAME_TIMER 2 /**< timer to count frame time */
|
#define FRAME_TIMER 2 /**< timer to count frame time */
|
||||||
|
@ -528,11 +528,11 @@ void main(void)
|
||||||
|
|
||||||
// get and display numbers on TM1637
|
// get and display numbers on TM1637
|
||||||
for (uint8_t number=0; number<LENGTH(numbers); number++) {
|
for (uint8_t number=0; number<LENGTH(numbers); number++) {
|
||||||
uint8_t ram[2] = {0};
|
uint8_t bytes[2] = {0};
|
||||||
if (!rtc_ds1307_read_ram(ram, number*sizeof(ram), sizeof(ram))) {
|
if (!rtc_ds1307_read_rom(number*LENGTH(bytes), bytes, LENGTH(bytes))) {
|
||||||
printf("could not get number from DS1307\n");
|
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);
|
mux_select(number);
|
||||||
if (0xffff==numbers[number].number) {
|
if (0xffff==numbers[number].number) {
|
||||||
led_tm1637_off();
|
led_tm1637_off();
|
||||||
|
@ -724,7 +724,7 @@ void main(void)
|
||||||
uint16_t buttons_diff = buttons^buttons_new; // get difference
|
uint16_t buttons_diff = buttons^buttons_new; // get difference
|
||||||
buttons = buttons_new; // save new state
|
buttons = buttons_new; // save new state
|
||||||
if (buttons_diff) { // only do something if there is a change
|
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++) {
|
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_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
|
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);
|
led_tm1637_number(numbers[number].number);
|
||||||
}
|
}
|
||||||
// save number
|
// save number
|
||||||
uint8_t ram[2] = {numbers[number].number>>8, numbers[number].number};
|
uint8_t bytes[2] = {numbers[number].number>>8, numbers[number].number};
|
||||||
if (!rtc_ds1307_write_ram(ram, number*sizeof(ram), sizeof(ram))) {
|
if (!rtc_ds1307_write_rom(number*LENGTH(bytes), bytes, LENGTH(bytes))) {
|
||||||
printf("could not set number on DS1307\n");
|
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
|
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
|
rtc_tick_flag = false; // reset flag
|
||||||
action = true; // action has been performed
|
action = true; // action has been performed
|
||||||
led_toggle(); // toggle LED (good to indicate if main function is stuck)
|
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
|
// go into standby mode
|
||||||
printf("shutting down\n");
|
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
|
led_max7219_off(0xff); // switch off MAX7219 displays
|
||||||
for (uint8_t tm1637=0; tm1637<7; tm1637++) { // switch off TM1637 displays
|
for (uint8_t tm1637=0; tm1637<7; tm1637++) { // switch off TM1637 displays
|
||||||
mux_select(tm1637); // selecting TM1637 display
|
mux_select(tm1637); // selecting TM1637 display
|
||||||
|
@ -821,6 +841,7 @@ void main(void)
|
||||||
SCB_SCR |= SCB_SCR_SLEEPDEEP; // enable deep sleep
|
SCB_SCR |= SCB_SCR_SLEEPDEEP; // enable deep sleep
|
||||||
pwr_set_standby_mode(); // go to deep sleep
|
pwr_set_standby_mode(); // go to deep sleep
|
||||||
while (true); // we should be shut down at this point
|
while (true); // we should be shut down at this point
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
if (rtc_seconds>=60) { // one minute passed
|
if (rtc_seconds>=60) { // one minute passed
|
||||||
rtc_ds1307_time = rtc_ds1307_read_time(); // get time/date from external RTC
|
rtc_ds1307_time = rtc_ds1307_read_time(); // get time/date from external RTC
|
||||||
|
|
Loading…
Reference in New Issue