Tengo una variable 'x' que lee constantemente en loop, el valor de AnalogRead y la muestra en el monitor serial. El conjunto de valores que me aporta es una curva cóncava gracias a un elemento externo conectado al Arduino (genera valores aleatorios constantemente, y a veces curvas cóncavas -forma de montaña-). De este modo, los valores no siempre son los mismos. Lo que busco es que se ejecute serial.print de estos valores desde que se comience a formar la curva hasta 2 segundos más tarde; sabiendo que el comienzo de la curva viene dado cuando existe un incremento de la variable 'x' del orden de 1.
Muéstranos un ejemplo
(Una variación de 1 en analogRead() puede ocurrir fácilmente debido a la poca precisión del ADC y al voltaje de referencia variable)
Básicamente lo que tengo es un elemento generador de corriente que genera curvas cóncavas (de modo que son aleatorias, no se producen cada cierto tiempo). Como se puede ver en la imagen, la generación de estas curvas es aleatoria, y el valor máximo que toman también.
De este modo pretendo:
-Que los valores que se impriman sean desde que comienza la curva (x) hasta una posición x+n'.
FACTORES A TENER EN CUENTA:
No siempre comienza en el mismo valor, como se puede ver en la imagen.
De una posición x a una posición x+n hay una variación grande de valores, de modo que se podría detectar el comienzo de la curva por ese incremento de los valores más grande de lo normal. (si de x a x+n aumenta tanto, se cumple el fenómeno)
El fin de la impresión, que sería en una posición x+n', en función de donde comience la x (que para cada curva es diferente), se da o bien tras un tiempo después de que imprima el valor x o cuando se llegue a la posición x+n'.
El código que he hecho imprime los valores solamente cuando son mayores que 1v y cada 10ms, pero no es lo que busco.. Dejo a continuación el código:
Serial.begin(115200);
}
void loop() {
int sensor_value = analogRead(A1);
float voltage = sensor_value * 5.0 / 1024;
if ((voltage) > 1) {
Serial.println(voltage);
}
}
Es simple, imprimes cuando una lectura es mayor a la anterior (te aconsejo que la diferencia sea mayor a 1 porque 1 está dentro del error del ADC) y si es igual o menor no la imprimes.
Muchas gracias, lo único es que no imprimiría valores que van desde x+n a x+n' no? Esos valores son decrecientes. Sería imprimir:
O bien los valores durante los 2 próximos segundos a que se imprimiera x+n
O un número de valores n' desde que se imprime x+n (6 por ejemplo)