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.
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.
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.