Error de código

Hola a todos como están.

He posteado este ejercicio aquí porque realmente necesito de su ayuda, resulta que necesito que un led se ponga intermitente según el valor que me muestre el serial monitor pero no lo logro. Soy nuevo en el tema de arduino y les agradecería mucho su ayuda.
A continuación les mostrare la descripción del ejercicio y también mi código que no funciona como yo quiero.
¡Muchas gracias¡

Descripción del ejercicio:

Unas luces navideñas modernas son las siguientes: mientras se mantenga pulsado S1 una variable entera inicializada en 0 se comienza a incrementar de 20 en 20, al soltar S1 la variable para de incrementarse, cuando se pulse S2 el valor de la variable se debe cargar a un Hola Mundo del LED, esto quiere decir que el LED va estar intermitente en intervalos de tiempo iguales al valor de la variable. Por consola serial debes ir mostrando el valor de la variable. Para que puedas volver la variable a 0 y puedas hacer otra rutina de intermitencia, coloca la condición de que S1 y S2 se opriman al tiempo, con ello la variable entera debe volver a 0.

Este es mi código:

int boton = 2;
int boton2= 3;
int led= 13;

void setup (){
  pinMode (boton, INPUT);
  pinMode (boton2, INPUT);
  pinMode (led, OUTPUT);
  Serial.begin (9600);
  
}


void loop (){

  int y= 20;
  int x= 0;
  for (int i=0; i=5000; i+=y){
  int estado= digitalRead(boton); 
  if (estado==0){
  Serial.println (x+=y);
  delay (1000);
  }
  
  int estado2= digitalRead(boton2); 
  if (estado2==0)
  {
  digitalWrite(led, HIGH);
  delay (x+=y);
  digitalWrite(led, LOW);
  delay (x+=y);
  }
  if ((digitalRead (boton)==LOW && digitalRead (boton2)==LOW)){
    Serial.println (0);
  }
  }
  }

Esta sería tu versión corregida con delay

int boton   = 2;
int boton2  = 3;
int led     = 13;
int y;
int x = 0;
bool estado1;
bool estado2;

void setup (){
  pinMode (boton, INPUT);
  pinMode (boton2, INPUT);
  pinMode (led, OUTPUT);
  Serial.begin (9600);
}


void loop (){

  estado1 = digitalRead(boton); 

  if (estado1 == 0) { // boton a GND?
      x += 20;
      Serial.print("x = ");
      Serial.println(x);
      y = x/2;
  }

  estado2 = digitalRead(boton2); 
  if (estado2 == 0)     {
      digitalWrite(led, HIGH);
      delay (x);
      digitalWrite(led, LOW);
      delay (x);
  }
  
  if (estado1 == 0 && estado2 == 0){
      x = 0;
      Serial.print("x = ");
      Serial.println(x);
  }
}

Ahora va otra versión usando millis() que no te va a demorar hasta que presiones los pulsadores.

const byte boton   = 2;
const byte boton2  = 3;
const byte led     = 13;
unsigned int y;
unsigned int x = 0;
bool estado1;
bool estado2;
unsigned long start;
byte ledstatus = 0;


void setup (){
  pinMode (boton, INPUT);
  pinMode (boton2, INPUT);
  pinMode (led, OUTPUT);
  Serial.begin (9600);
}


void loop (){

  estado1 = digitalRead(boton); 

  if (estado1 == 0) { // boton a GND?
      x += 20;
      Serial.print("x = ");
      Serial.println(x);
      y = x/2;
  }

  estado2 = digitalRead(boton2); 

  if (estado2 == 0)     {
      switch (ledstatus) {
          case 0: digitalWrite(led, HIGH);
                  ledstatus = 1;
                  start = millis() + x; 
                  break;
          case 1: if (millis() > start) {
                      digitalWrite(led, LOW);
                      ledstatus = 2;
                      start = millis() + x; 
                  }
                  break;
          case 2: if (millis() > start) {
                      ledstatus = 0;
                  }
                  break;
          default : break;
      }    
  }
  
  if (estado1 == 0 && estado2 == 0){
      x         = 0;
      ledstatus = 0;
      Serial.print("x = ");
      Serial.println(x);
  }
}

Cuenta que tal funcionan!!

Buenas tardes señor surbyte me funciono tu código perfectamente muchas gracias de verdad.

Solo tengo una duda, ¿En el primer if donde esta y= x/2 esta función esta trabajando como un delay?

Gracias por tu colaboración.

Quita esto y = x/2; porque en un primer momento pensé que el tiempo elegido se debía dividir en dos y luego me di cuenta que no. Asi que la variable y no hace falta.

Si señor ya lo hice, de hecho le puse un delay de 500

Cuando uses un código sin delay no agregues uno con nada.