Exemplo n.º 1
0
/* test use for printing the status and counter value through usart */
void getEncoder(void){
	detachEXTI(EXTI_Line0 | EXTI_Line1 | EXTI_Line2 | EXTI_Line3);

	USART_puts(USART3, "L_state:");
	USART_putd(USART3, ENCODER_L.rotate);

	USART_puts(USART3, " R_state:");
	USART_putd(USART3, ENCODER_R.rotate);

	getEncoderState(&ENCODER_L);
	getEncoderState(&ENCODER_R);

	USART_puts(USART3, " L_state2:");
	USART_putd(USART3, ENCODER_L.rotate);
	USART_puts(USART3, " R_state2:");
	USART_putd(USART3, ENCODER_R.rotate);

	USART_puts(USART3, " le_en:");
	USART_putd(USART3, ENCODER_L.count);
	USART_puts(USART3, " ri_en:");
	USART_putd(USART3, ENCODER_R.count);
	USART_puts(USART3, "\r\n");

	/* clear encoder counter*/
	ENCODER_L.count = 0;
	ENCODER_R.count = 0;

	attachEXTI(EXTI_Line0 | EXTI_Line1 | EXTI_Line2 | EXTI_Line3);
}
Exemplo n.º 2
0
/* ENCODER RIGHT phase B */
void EXTI3_IRQHandler(){
	if(EXTI_GetITStatus(EXTI_Line3) != RESET){
		ENCODER_R.count++;
		getEncoderState(&ENCODER_R);
		EXTI_ClearITPendingBit(EXTI_Line3);
	}
}
void main () {
    // Current timer state
    enum stateType state = COUNTING;

    // Default timer value to 10 minutes
    int timerValue = 600;

    // Note that count = 4x number of seconds
    int count = timerValue << 2;
 
    // This is used for the blinking digit during set mode
    char currentDigitValue = 0;

    lcd_init();

    initTimer();
    initButtons();
    initEncoder();
    initLedDisplay();
    
    displayTime(timerValue);

    while (1)
    {
        // display the LED string
        displayLEDs(0, displayString[displayStringIndex]);
        displayLEDs(1, displayString[displayStringIndex + 1]);
        displayLEDs(2, displayString[displayStringIndex + 2]);
        displayLEDs(3, displayString[displayStringIndex + 3]);

        // Get user input (buttons and encoder)
        enum button buttonState = getButtonState();
        enum encoderChange encoderState = getEncoderState();

        if (state == SITTING || state == COUNTING) {
            // User wants to enable set mode
            if (buttonState == BUTTON_S2) {
                count = 0;
                timerValue = 0;
                currentDigitValue = 0;
                state = SETTING_DIGIT0;
                
                bcd.digit0 = 0xA;
                bcd.digit1 = 0xA;
                bcd.digit2 = 0xA;
                bcd.digit3 = 0xA;
                lcd_display_digits(bcd);

            // User wants to reset the timer
            } else if (buttonState == BUTTON_S3) {
                count = timerValue << 2;
                state = SITTING;
                displayTime(timerValue);

            // User wants to start the timer
            } else if (state == SITTING && buttonState == BUTTON_S4) {
                count = timerValue << 2;
                state = COUNTING;
                displayTime(count >> 2);
            }
        }

        // If we're already in set mode
        else if (state == SETTING_DIGIT0