Traffic lights using timer
#define INTERRUPTS 975

volatile uint8_t count;

if (count &gt;= INTERRUPTS){


count is an 8 bit integer, so the maximum value of it is 255. Therefor count will never be bigger of equal to 975.

Use volatile uint16_t count; instead.

PS instead of messing with the TCNT0 register, I'd use 2 different values of INTERRUPTS to change between 15 and 5 second intervals.

Something like if( count&gt;=975 || ( (col=='g'||col=='r') &amp;&amp; count&gt;=325 ) ){