/* * Copyright 2017-2024 Oleg Borodin */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include button_t volume_button; typedef struct { uint8_t volume; bool volume_updated; } contr_t; contr_t contr; void contr_init(void) { contr.volume = 0; contr.volume_updated = false; } void contr_setup(void) { } ISR(TIMER0_OVF_vect) { button_handle(&volume_button); } void contr_show_logo(void) { disp_clear(); char* dispstr = "Made by R2FDX"; disp_string(1, 1, dispstr); _delay_ms(100); disp_clear(); } #define CONTR_DISPSTR_SIZE 16 void contr_show_volume(void) { char dispstr[CONTR_DISPSTR_SIZE]; sprintf(dispstr, "%4d", contr.volume); disp_string(1, 1, dispstr); } #define MAX_VOLUME 64 void contr_calc_volume(void) { if (button_was_pressed(&volume_button) == true) { contr.volume++; contr.volume_updated = true; } if (contr.volume > MAX_VOLUME) { contr.volume = 0; contr.volume_updated = true; } } void contr_main(void) { contr_show_logo(); uint16_t counter = 0; while (true) { counter++; _delay_ms(10); contr_calc_volume(); contr_show_volume(); } }