//storage variables boolean toggle0 = 0; boolean toggle1 = 0; boolean toggle2 = 0; long counter; void setup() { cli();//stop interrupts // put your setup code here, to run once: counter = 0; pinMode(8, OUTPUT); pinMode(10, OUTPUT); pinMode(11, OUTPUT); pinMode(12, OUTPUT); pinMode(13, OUTPUT); TCCR2A = 0;// set entire TCCR2A register to 0 TCCR2B = 0;// same for TCCR2B TCNT2 = 0;//initialize counter value to 0 // set compare match register for 2khz increments OCR2A = 124;// = (16*10^6) / (2000*64) - 1 (must be <256) // turn on CTC mode TCCR2A |= (1 << WGM01); // Set CS01 and CS00 bits for 64 prescaler TCCR2B |= (1 << CS01) | (1 << CS00); // enable timer compare interrupt TIMSK2 |= (1 << OCIE0A); sei();//allow interrupts } ISR(TIMER2_COMPA_vect){//timer0 interrupt 2kHz toggles pin 8 //generates pulse wave of frequency 2kHz/2 = 1kHz (takes two cycles for full wave- toggle high then toggle low) if (toggle0){ digitalWrite(8,LOW); toggle0 = 0; } else{ digitalWrite(8,LOW); toggle0 = 1; } counter++; } void loop() { // put your main code here, to run repeatedly: if((counter % 1000) == 0){ digitalWrite(12,HIGH); } if((counter % 1500) == 0){ digitalWrite(12,LOW); } }