ESP32 inexplicable reposo de joistick en 740 de 1024 en lugar de 512

El siguiente codigo intenta filtrar la señal de un joistick, probado en Arduino Mega funciona perfectamente y el reposo esta en 512 a 5v, en ESP32 (pruevas en tres placas diferentes y dos joistick) el reposo esta en 740 a 3.3v, en ambos casos es a 10 bit que da 1024 valores. Los 1024 valores estan bien en el ESP pero al soltar la palanca del joistick se va a 740. Alguien podria explicarme que es lo que pasa? Uso SimpleKalmanFilter.h para filtrar el ruido de la señal.

#include <SimpleKalmanFilter.h>

SimpleKalmanFilter simpleKalmanFilter(2, 2, 0.01);

void setup() {
  Serial.begin(115200);
}

void loop() {

   //float real_value = analogRead(A0);     // Para A. Mega
  analogReadResolution(10);                // Para ESP32
  float real_value = analogRead(0);        // Para ESP32
  
  // add a noise to the reference value and use as the measured value
  float measured_value = real_value + random(-100, 100) / 100.0;

  // calculate the estimated value with Kalman Filter
  int estimated_value = simpleKalmanFilter.updateEstimate(measured_value);


    Serial.println(estimated_value);
    delay (200);

}

¿Con qué tensión estás alimentando el joystick, 5V?
Porque casualmente 740 es la lectura para un valor de unos 2.4V.

Con el Mega te da 512 porque la referencia del ADC es 5V (o sea la misma que la alimentación), pero el ESP trabaja a 3.3V (y lógicamente también su ADC) entonces debes alimentar el joystick con 3.3V.

Por otro lado, ¿Para qué "inyectas" ruido artificial en las lecturas?

Me refiero a

// add a noise to the reference value and use as the measured value 
float measured_value = real_value + random(-100,100)/100.0;

Esa línea está en el ejemplo de la librería para simular una señal "ruidosa", no debes aplicarla en una situación real.

Saludos

Gracias por responder. Alimento el joistick con 3.3v, con la palanca a un lado da 0 y al otro lado da 1023, al soltarla marca 740 en los Esp pero 512 (lo esperado) en el mega. La línea de la librería la voy a comentar pero lo probé con un simple Serial.print (analogRead(0)); y pasa exactamente lo mismo. Lo probé en las placas Lolin D32 y Heltec wifi Kit.

Creo que el ADC del ESP32 es de 12bits de resolución (4096) por defecto aunque es configurable a menores bits de resolución.

/*
* Sets the conversion resolution
* Default is 12bit (0 - 4095)
* Range is 9 - 12
* */
void analogSetWidth(uint8_t bits);

Saludos.

Hola, si lo dejo en 12b da lo esperado 0 / 4095 pero al soltar la palanca reposa en 1000 cuando debería estar en 2042. El problema persiste. Se comporta de igual forma tanto si lo configuro en 10bit como si lo dejo en 12 bit por defecto.

Ok. todos sabemos que un joystick tiene 2 potenciómetros.
Prueba con un potenciómetro a ver que ocurre. Uno externo. sando el ESP32.
Que marca en el punto central?
Porque existe la posibilidad (estoy suponiendo) que tenga cierta electrónica que no trabaje bien con 3.3V.

Nota: Por favor, no escribas joistick me provoca dolor de vista, es joystick.
Te lo han escrito bien y vuelves a ponerlo de ese modo.

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