//MiniMo -- minimalistic driver firmware for momentary buttons (no blinkies) -- DrJones 2014 //Up&Down variant ("Werner's UI") #define F_CPU 4800000 //use fuses low:0x75 high:0xff #include #include //change modes here; just change/add/delete values. The "0" is 'off' uint8_t modes[]={0, 255}; //PWM values, 5..255 - LEAVE THE "0" THERE int main() { DDRB=2; PORTB=8; //define PB1 as output and pull-up switch on PB3 TCCR0A=0b00100001; TCCR0B=0b00000001; //PWM setup, 9kHz //uint8_t count=0, lasmode=1, waspressed=0; uint8_t mode=0 //define some variables used below while(1) { //endless loop if ((PINB&8)==0) { //when the button is pressed (PB3 pulled down) mode=1; //only one mode is needed, so if button is presses, use 100% mode else { // if button is not pressed, just turn off the light mode=0; } OCR0B=modes[mode]; //set PWM level (0 is off) _delay_ms(25); //wait a bit before checking again, important for counting } }