/** * @brief This function handles Bus Fault exception. * @param None * @retval None */ void BusFault_Handler(void) { BSP_LED_On(LED_RED); BSP_LCD_GLASS_DisplayString("BUSERR"); /* Go to infinite loop when Bus Fault exception occurs */ while (1) { } }
/** * @brief This function handles Memory Manage exception. * @param None * @retval None */ void MemManage_Handler(void) { BSP_LED_On(LED_RED); BSP_LCD_GLASS_DisplayString("MEMERR"); /* Go to infinite loop when Memory Manage exception occurs */ while (1) { } }
int main(void) { InitAll(); InitRelayPins(); BSP_LED_On(LED_GREEN); BSP_LED_On(LED_BLUE); BSP_LCD_GLASS_DisplayString((uint8_t*)"READY"); // RIGHT: 00 - 27 min: blue led on, relay 1 on // RIGHT_OVERLAP: 28 - 29 min: same + green flashing // LEFT: 30 - 57 min: green led on, relay 2 on // LEFT_OVERLAP: 58 - 59 min: same + blue flashing // BOTH_OFF: both relays off, both LEDs off, counters not active // BOTH_ON: both relays on, both LEDs on, counters not active // USER press: BOTH_OFF // left button: jump to state LEFT // right button: jump to state RIGHT // left + right button: jump to state BOTH_ON const int TIME_OVERLAP = 2 * 60; const int TIME_RIGHT = 30 * 60 - TIME_OVERLAP; const int TIME_LEFT = 15 * 60 - TIME_OVERLAP; while (1) { switch(state) { case RESET_STATE: green_off(); blue_off(); relay_1_off(); relay_2_off(); relay_3_off(); relay_4_off(); set_sec(0); state = RIGHT; break; case RIGHT: if (prev_state != RIGHT) { prev_state = RIGHT; blue_on(); green_off(); relay_1_off(); relay_2_on(); set_sec(TIME_RIGHT); } if (!sec) { state = RIGHT_OVERLAP; } break; case RIGHT_OVERLAP: if (prev_state != RIGHT_OVERLAP) { prev_state = RIGHT_OVERLAP; blue_on(); relay_1_on(); relay_2_on(); set_sec(TIME_OVERLAP); } if (sec & 1) { green_on(); } else { green_off(); } if (!sec) { state = LEFT; } break; case LEFT: if (prev_state != LEFT) { prev_state = LEFT; green_on(); blue_off(); relay_1_on(); relay_2_off(); set_sec(TIME_LEFT); } if (!sec) { state = LEFT_OVERLAP; } break; case LEFT_OVERLAP: if (prev_state != LEFT_OVERLAP) { prev_state = LEFT_OVERLAP; green_on(); relay_1_on(); relay_2_on(); set_sec(TIME_OVERLAP); } if (sec & 1) { blue_on(); } else { blue_off(); } if (!sec) { state = RIGHT; } break; case BOTH_OFF: if (prev_state != BOTH_OFF) { green_off(); blue_off(); relay_1_off(); relay_2_off(); set_sec(0); } break; case BOTH_ON: if (prev_state != BOTH_ON) { green_on(); blue_on(); relay_1_on(); relay_2_on(); set_sec(0); } break; } // Read touch buttons int buttonId = getTouchButtons(); // LEFT button if (buttonId == 0) { prev_state = RESET_STATE; state = LEFT; } // RIGHT button if (buttonId == 3) { prev_state = RESET_STATE; state = RIGHT; } } // Will never get here. return 0; }