Movimiento de un led mediante un joystick [SOLUCIONADO]

Muy buenas

Estoy jugueteando con el sensor joystick para familiarizarme con su uso y no consigo hacer una cosa en el último ejemplo que he intentado hacer. A ver si alguien me puede echar un cable y decirme dónde estoy fallando.

Juego solo con el eje de las X. Hago que se enciendan y apaguen los leds en una u otra dirección según se mueve en mando en una u otra dirección. Hasta ahí bien.

No sé como escribir que cuando pase del led 11 que es el último led, se apague este y se encienda el 8 que es el primero. y viceversa que salte del 8 al 11. Lo he intentado pero parece que “x” cogiese valores muy por encima de 11, pues si lo mantendo pulsado hacia un lado y se va la luz por ese lado, al girar el mando hacia el otro lado, tarda un rato en verse el movimiento de regreso desde el lado por el que se fue la luz. No sé como ponerle la instrucción ni en qué lugar (en el sitio donde la he puesto en el cógido, parece no tener efecto)

La otra pregunta es porqué no arranca con el led8 encendido. En alguno de los últimos cambios hasta llegar hasta aquí, sí lo hacía, pero revisando el código ahora, no veo porqué ha dejado de arrancar con el led 8 encendido. (creo que es con alguno de los últimos cambios intentando hacer que salte del 11 al 8 y del 8 al 11)

int led8 = 8; // definición de pines
int led9 = 9;
int led10 = 10;
int led11 = 11;
long ejex = A1;
float ejey = A2;

int valorx =0;// definición de variables
int x=8;// hace referencia al led 8, al pin 8, será el led de partida que se encenderá por defecto
int y=x-=1;
void setup() {

  pinMode(8, OUTPUT);
  pinMode(9, OUTPUT); 
  pinMode(10, OUTPUT);
  pinMode(11, OUTPUT);

  pinMode (ejex, INPUT);
  pinMode (ejey, INPUT);

}
void loop() 
{

valorx = analogRead (ejex);  //valor del eje x de 0 a 1023

digitalWrite(x,HIGH);  // enciende por defecto el led 8, el led de partida
if (valorx >= 1000)  //valor cercano al final de joystick, no hace falta siquiera llegar al final
 {x++;   //incremento el valor de x, que lo asociaré a los leds
 if (x>11)
 {
  x==8;
 }
digitalWrite(x,HIGH); //enciendo un led nuevo en sentido creciente
delay(50);
digitalWrite(x-1,LOW); //apago el led anterior para dar sensación de movimeinto

delay(50);
;
 }
 if(valorx<=100)// caso contrario, si el joystick lo muevo al inicio de su recorrido los leds se encienden y apagan en sentido contrario
 {x--;
  if(x<8);
 {
  x==11;
  }digitalWrite(x,HIGH);
delay(50);
digitalWrite(x+1,LOW);}


 delay(100);
}

Muchas gracias por anticipado

Habitualmente caemos en el error contrario, pero en este caso estás confundiendo el operador de comparación con el de asignación. Sustituye los dobles (==) por sencillos (=), porque estás asignando, no comparando. Luego supongo que quedará un pequeño error de no apagado de los led de los extremos, pero confío en que seas capaz de arreglarlo. Saludos.

Muchas gracias noter, es cierto que en ocasiones confundo esos signos, es uno de mis varios problemas :wink:

Me ha llevado un buen ratito luego corregir el apagado de las luces pero finalmente el código hace lo que quiero. No de una forma muy limpia, pero lo hace.
Gracias de nuevo.

Adjunto código por si a alguien le interesa

int led8 = 8; // definición de pines
int led9 = 9;
int led10 = 10;
int led11 = 11;
long ejex = A1;
float ejey = A2;

int valorx =0;// definición de variables
int x=8;// hace referencia al led 8, al pin 8, será el led de partida que se encenderá por defecto
int y=x-=1;
void setup() {
Serial.begin(9600);
  pinMode(8, OUTPUT);
  pinMode(9, OUTPUT); 
  pinMode(10, OUTPUT);
  pinMode(11, OUTPUT);

  pinMode (ejex, INPUT);
  pinMode (ejey, INPUT);
x=8;

}
void loop() 
{

valorx = analogRead (ejex);  //valor del eje x de 0 a 1023
Serial.print(valorx); // para comprobar en serial monitor que los valores del eje se mueven
Serial.println();

// ahora planteo que el eje se mueva a un lado o a otro
// A derecha

 if(valorx>=1000)// caso contrario, si el joystick lo muevo al inicio de su recorrido los leds se encienden en sentido contrario
 {x++;
if (x>11){
  x=8;
}
digitalWrite(11,LOW);
digitalWrite(x,HIGH);
delay(200);
digitalWrite(x-1,LOW);}
delay(100);

//A izquierda

 if(valorx<=200)// caso contrario, si el joystick lo muevo al inicio de su recorrido los leds se encienden en sentido contrario
 {x--;
if (x<8){
  x=11;
}
digitalWrite(8,LOW);
digitalWrite(x,HIGH);
delay(200);
digitalWrite(x+1,LOW);}
delay(100);
}