Code:
ISR(INT0_vect)
{
    int reading;
    int rc_value;
  
// An dieser Stelle hat reading immer einen eher zufälligen Inhalt.

    if(reading == 0)
...
int reading;
->
static int reading;

Wozu sollen reading und rc_value in main gut sein?
Ich glaube, du hast bei Variablen noch ein Verständnisproblem global <-> lokal.

Außerdem bekommst du doch garantiert eine "is used uninitialized in this function"-Warnung. Warnungen sollte man nicht einfach ignorieren, und bei Fragen im Forum auch mitposten.