Buenos días:
El objetivo del siguiente código es controlar usando un potenciómetro la frecuencia de parpadeo de un láser. Uso la función map(lectura pote, 0, 1023, 10, 80).
A través del puerto serie muestra el tiempo transcurrido entre parpadeos teóricos y reales.
El tiempo transcurrido real también está medido usando una segunda tarjeta con un fotosensor.
La lectura que da el fotosensor de la segunda tarjeta coincide con el tiempo real entre parpadeos de la primera.
Lo que no coincide es el tiempo teórico entre parpadeos y tiempo reales. El tiempo real se mantiene en 45/49ms hasta mas o menos la mitad del recorrido del potenciómetro, pasando entonces a 93/95ms hasta el final del recorrido (corroborado además con la lectura del fotosensor de la segunda tarjeta). El tiempo teórico va desde el mínimo hasta el máximo pasando por todos los valores.
¿Dónde me estoy equivocando?
Muchísimas gracias por leerme. Paso los datos:
2 Tarjetas Arduino Uno R3.
Modulo Laser Ky-008, emisor receptor.
Potenciómetro de 10K.
Código para generar parpadeos:
int intervalo;
int potenciometro = 0;
int estadoled= LOW;
unsigned long previousMillis= 0;
int laser= 8;
void setup() {
Serial.begin(9600);
pinMode(laser, OUTPUT);
digitalWrite(laser, LOW);
}
void loop() {
potenciometro = analogRead(A1);
intervalo = map(potenciometro, 0, 1023, 10, 80);
Serial.print(potenciometro);// Lectura del pote. Es correcta.
Serial.print("/");
Serial.print(intervalo);
Serial. print(" ms, ");
unsigned long currentMillis= millis();
Serial.print(" Intervalo real: ");
Serial.println(currentMillis - previousMillis); // No coincide con el intervalo marcado por el pote.
//además de saltar de 45 a 95 a mitad de recorrido.
if (currentMillis - previousMillis >= intervalo){
previousMillis = currentMillis;
flash();
}
}
void flash(){
digitalWrite(laser, HIGH);
delay(5);
digitalWrite(laser, LOW);
}
Tu código no es correcto.
El problema en tu código es que controlas si se cumple el intervalo en cada pasada de loop(), estás comprobando la duración del intervalo antes de que se cumpla, ese es el error y por eso no coinciden los tiempos.