示例#1
0
/**
  * @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)
    {
    }
}
示例#2
0
/**
  * @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)
    {
    }
}
示例#3
0
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;
}