o que esta errado aqui?

desculpe me pela demora em responder, mas é que a faculdade consome o tempo todo,,,,

decidi mudar um pouquinho o programa usando switch case,,,

desta forma ficou assim..

#define botao 8
#define led 13

typedef enum {
BOTAO_OFF,
BOTAO_ON} t_estados;

t_estados estado;

int time;

void setup() {
pinMode(botao, INPUT);
pinMode(led, OUTPUT);

digitalWrite(led, LOW);
estado = BOTAO_OFF;}

void loop()
{
switch (estado)
{
case BOTAO_OFF:
if(digitalRead(botao) != 0)
{
time= millis();
estado = BOTAO_ON;
}
break;
case BOTAO_ON:
if(digitalRead(botao) == 0)
{
time= millis() - time;
if(time >= 3000)
digitalWrite(led, HIGH);
else if(time <= 1000)
digitalWrite(led, LOW);
estado = BOTAO_OFF;
}
break;
default:
break;
}
}

porém ainda tenho o problema do led apenas dar uma piscada quando deveria permanecer aceso, se eu tiro a linha da condição <= 1000 ai funciona normal, aí nao consigo apagar o led por não ter este comando no programa,, por que será??

obrigado