Debería funcionar este código? matriz + joystick

Buenas, he hecho un programa en que con el joystick encender los leds de la matriz. No estoy seguro si es correcto lo que hecho. El pulsador del joystick lo quiero utilizar para encender el led de la posición de ese momento y que permanezca encendido ¿Debería funcionar correctamente el siguiente código?

int ValorY = 0;
int ValorX = 0; 
#include "LedControl.h" //  library
LedControl lc=LedControl(13,12,11,1); 


void setup() {
  Serial.begin(9600);

  pinMode(8, INPUT); 
  lc.shutdown(0,false);
  lc.setIntensity(0,8);
  lc.clearDisplay(0);

}

void loop() {
  ValorY = analogRead(A1);
  ValorX = analogRead(A0);
  char x_translate = map(ValorX, 1021, 0, 7, 0); 
  char y_translate = map(ValorY, 1021, 0, 0, 7);
  
  Serial.print(", LR = ");
  Serial.print(ValorX, DEC);
   Serial.print("UD = ");
  Serial.print(ValorY, DEC);
  Serial.print(", x = ");
  Serial.println(y_translate, DEC);
  Serial.print(", x = ");
  Serial.print(x_translate, DEC); 
  Serial.print(", y = ");
    lc.clearDisplay(0);
    lc.setLed(0,x_translate,y_translate,true);  
  delay(150); 

  if ( digitalRead (8)== HIGH){               
    delay (500);
    lc.setLed(0,x_translate,y_translate,true);
    }
  
}

Para comenzar si tomas acción sobre algo no demoras 500 mseg y luego lo aplicas, lo aplicas y luego pon el delay(500).

Ok gracias, además de esto ves algún otro error o incoherencia?

Incoherencias puedo imaginarme pero tu explicación es muy superficial como para que yo u otro sin concimiento de tu joystick podamos aportar.
primero porque pones
map(ValorX, 1021, 0, 7, 0);
porque 1021? un Adc lee de 0 a 1023 de modo que 1021 esta errado. Reemplaza
y luego todo para cambiar a 8 posiciones? simplemente has
char x_translate =ValorX/8;
y listo.
Otra mas, para que usas
[code]Serial.println(y_translate, DEC);[/code]
x e y_translate siempre daran positivos y números enteros no hace falta poner DEC.
Serial.println(y_translate);
alcanza con esto.
Finalmente no entiendo el sentido de delay (500)?

Ok gracias. Si tienes razón el valor máximo del joystick es 1023 en vez de 1021, el DEC no es necesario y el delay 500 que he puesto al final tampoco es necesario. Pero no entiendo una cosa, dices que reemplace el
char x_translate = map(ValorX, 1021, 0, 7, 0);
por
char x_translate =ValorX/8;

Si lo que digo es que map hace demasiadas cuentas cuando lo unico que necesitas es lo que te he dicho.
Lo tienes invertido es porque asi da los valores el joystick? digo de 1023 a 0 y lo mismo con la salida de 7 a 0.

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.