#include #include #include #include #define max_gear 8 #define max_rpm_led 16 #define restart_RPM_delay 2 #define seven_seg PORTB void initializePort(); void initializeA2D(); void restartRPM(int led_cout); void paintRPM(int local_led_count); void paintGear(); void testHardware(); void paintAlphabet(char data); int rpm_led_on_count = 1; int gear = 0; int is_pressed_up = 0;//upshift button status int is_pressed_down = 0;//down shift button status int main(void){ initializePort(); testHardware(); initializeA2D(); sei();//enable global interupt ADCSRA |= 1< 0) && is_pressed_down==0 && is_pressed_up==0){ gear--; is_pressed_down = 1; restartRPM(rpm_led_on_count); paintGear(); } }else{ //button at pin A4 is released is_pressed_down = 0; } if(bit_is_clear(PINA,5)) { //button at pin A5 is pressed if((gear < max_gear) && is_pressed_up==0 && is_pressed_down==0){ gear++; is_pressed_up = 1; restartRPM(rpm_led_on_count); paintGear(); } }else{ //button at pin A5 is released is_pressed_up = 0; } _delay_ms(1); } } ISR(ADC_vect){ uint8_t high = ADCH; if( high > 127){ if(is_pressed_down == 0 && is_pressed_up == 0){ rpm_led_on_count = ((high-127)*2)/(max_rpm_led) + 1; paintRPM(rpm_led_on_count); } } ADCSRA |= 1<=0;i--){ paintRPM(i); _delay_ms(restart_RPM_delay); } //increase rpm indicator leds one by one for(int i=1;i<=led_count;i++){ paintRPM(i); _delay_ms(restart_RPM_delay); } } void paintRPM(int local_led_count){ switch(local_led_count){ case 0 :PORTD = 0x00; PORTC = 0x00; break; case 1 :PORTD = 0x01; PORTC = 0x00; break; case 2 :PORTD = 0x03; PORTC = 0x00; break; case 3 :PORTD = 0x07; PORTC = 0x00; break; case 4 :PORTD = 0x0f; PORTC = 0x00; break; case 5 :PORTD = 0x1f; PORTC = 0x00; break; case 6 :PORTD = 0x3f; PORTC = 0x00; break; case 7 :PORTD = 0x7f; PORTC = 0x00; break; case 8 :PORTD = 0xff; PORTC = 0x00; break; case 9 :PORTD = 0xff; PORTC = 0x01; break; case 10:PORTD = 0xff; PORTC = 0x03; break; case 11:PORTD = 0xff; PORTC = 0x07; break; case 12:PORTD = 0xff; PORTC = 0x0f; break; case 13:PORTD = 0xff; PORTC = 0x1f; break; case 14:PORTD = 0xff; PORTC = 0x3f; break; case 15:PORTD = 0xff; PORTC = 0x7f; break; case 16:PORTD = 0xff; PORTC = 0xff; break; } }