#include #include void LED_SPEED(void); void LED_TIMER(void); void LEDBUTTONRACE(void); void initialize_adc(void); void ProcessPressedButton(int ButtonPressed); void ProcessReleasedButton(int ButtonReleased); void ModeChange(int modeChange); int Pressed_Confidence_Level[2]; int Released_Confidence_Level[2]; int Pressed[2]; int read_adc_value(int ch); int LEDNumber[2]; int adc_result0; int main(void) { DDRB = 0b01111111; DDRA = 0b00000000; DDRD = 0b11111111; PORTD = 0b00000000; PORTA = 0b00000111; PORTB = 0b10000000; while(1) { LED_TIMER(); } } void ModeChange(int modeChange) { if(modeChange == 1) { LEDBUTTONRACE(); } else if(modeChange == 2) { LED_SPEED(); } else if(modeChange == 3) { LED_TIMER(); } } void initialize_adc() { ADMUX = (1< 2232) { TCNT1 = 0; PORTB = 1< 6) { LEDNumber[0] = 0; PORTD = 1< 7) LEDNumber[1] = 0; } } if(bit_is_clear(PINA, 2)) { PORTA = 0b00000111; ModeChange(1); } } } void LEDBUTTONRACE() { PORTB = 0b10000000; PORTD = 0b00000000; PORTA = 0b00000111; if(bit_is_clear(PINA, 2)) { PORTA = 0b00000111; ModeChange(2); } while(1) { if(bit_is_clear(PINA, 2)) { PORTA = 0b00000111; ModeChange(2); } if (bit_is_clear(PINB, 7)) { ProcessPressedButton(0); } else { ProcessReleasedButton(0); } if (bit_is_clear(PINA, 1)) { ProcessPressedButton(1); } else { ProcessReleasedButton(1); } } } void ProcessPressedButton(int ButtonPressed) { Pressed_Confidence_Level[ButtonPressed] ++; if (Pressed_Confidence_Level[ButtonPressed] > 500) { if (Pressed[ButtonPressed] == 0) { Pressed[ButtonPressed] = 1; if (ButtonPressed == 0) { PORTB |= 1 << LEDNumber[ButtonPressed]; } if (ButtonPressed == 1) { PORTD |= 1 << ((LEDNumber[ButtonPressed] + 1)); } LEDNumber[ButtonPressed] ++; if (LEDNumber[ButtonPressed] > 6) { for(int i=0;i < 5;i++) { if (ButtonPressed == 0) { PORTB = 1 << PINB0; _delay_ms(5); PORTB = 1 << PINB5; _delay_ms(5); PORTB = 1 << PINB3; _delay_ms(5); PORTB = 1 << PINB2; _delay_ms(5); PORTB = 1 << PINB1; _delay_ms(5); PORTB = 1 << PINB6; _delay_ms(5); PORTB = 1 << PINB4; _delay_ms(5); PORTB = 1 << PINB6; _delay_ms(2); PORTB = 1 << PINB4; _delay_ms(2); PORTB = 1 << PINB5; _delay_ms(2); PORTB = 1 << PINB2; _delay_ms(2); PORTB = 1 << PINB1; _delay_ms(2); PORTB = 1 << PINB0; _delay_ms(2); PORTB = 1 << PINB1; _delay_ms(2); PORTB = 1 << PINB7; _delay_ms(2); } if (ButtonPressed == 1) { PORTD = 1 << PIND0; _delay_ms(5); PORTD = 1 << PIND1; _delay_ms(5); PORTD = 1 << PIND2; _delay_ms(5); PORTD = 1 << PIND3; _delay_ms(5); PORTD = 1 << PIND4; _delay_ms(5); PORTD = 1 << PIND5; _delay_ms(5); PORTD = 1 << PIND6; _delay_ms(5); PORTD = 1 << PIND7; _delay_ms(5); PORTD = 1 << PIND7; _delay_ms(5); PORTD = 1 << PIND6; _delay_ms(2); PORTD = 1 << PIND5; _delay_ms(2); PORTD = 1 << PIND4; _delay_ms(2); PORTD = 1 << PIND3; _delay_ms(2); PORTD = 1 << PIND2; _delay_ms(2); PORTD = 1 << PIND1; _delay_ms(2); PORTD = 1 << PIND0; _delay_ms(2); } } LEDNumber[0] = 0; LEDNumber[1] = 0; PORTB = 0b10000000; PORTA = 0b00000111; PORTD = 0b00000000; } } Pressed_Confidence_Level[ButtonPressed] = 0; } } void ProcessReleasedButton(int ButtonReleased) { Released_Confidence_Level[ButtonReleased] ++; if (Released_Confidence_Level[ButtonReleased] > 500) { Pressed[ButtonReleased] = 0; Released_Confidence_Level[ButtonReleased] = 0; } } void LED_SPEED() { PORTB = 0b10000000; PORTD = 0b00000000; int delay = 100; initialize_adc(); LEDNumber[1] = 0; if(bit_is_clear(PINA, 2)) { PORTA = 0b00000111; ModeChange(3); } while(1) { if(bit_is_clear(PINA, 2)) { PORTA = 0b00000111; ModeChange(3); } adc_result0 = read_adc_value(0); delay = adc_result0 / 8; if(adc_result0 <= 100) { delay = adc_result0 / 1.5; } LEDNumber[0]++; PORTB = 1 << LEDNumber[0]; _delay_ms(delay); if(LEDNumber[0] > 6) { LEDNumber[1] = 7; PORTD = 0x00; LEDNumber[0] = 0; if(bit_is_clear(PINA, 2)) { PORTA = 0b00000111; ModeChange(3); } for(int i = 0; LEDNumber[1] > i; LEDNumber[1] --) { if(bit_is_clear(PINA, 2)) { PORTA = 0b00000111; ModeChange(3); } PORTD = 1 << LEDNumber[1]; _delay_ms(delay); } PORTD = 0x00; PORTB = 0b10000000; LEDNumber[1] = 7; LEDNumber[0] = -1; PORTB = 1 << LEDNumber[0]; } } }