While statement conditional
Algunas veces quiere que todo en el boceto se detenga mientras una condición dada es verdadera. Puedes hacer esto usando un bucle while. Este ejemplo muestra cómo usar un bucle while para calibrar el valor de un sensor analógico.
En el bucle principal, del siguiente boceto lee el valor de una fotorresistencia en el pin analógico A0 y lo usa para prender un LED en el pin 9. Pero mientras se presiona un botón conectado al pin digital 2, el boceto ejecuta una funcion de usuario llamado calibra() que busca los valores más altos y más bajos del sensor analógico. Cuando sueltas el botón, el boceto continúa con el ciclo principal.
Nota: Esta técnica le permite actualizar los valores máximos y mínimos para el fotoresistor cuando cambian las condiciones de iluminación.
Placa aplicable
Todas.
Código
const byte sensor = A0;
const byte pulsador = 2;
const byte led = 9;
//Valores sensor
int min = 1023;
int max = 0;
int actual = 0;
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
pinMode(led, OUTPUT);
pinMode(pulsador, INPUT_PULLUP);
}
void calibra() {
// turn on the indicator LED to indicate that calibration is happening:
digitalWrite(LED_BUILTIN, HIGH);
actual = analogRead(sensor); //Lee sensor:
//Guarda maximo
if (actual > max) {
max = actual;
}
//Guarda minimo
if (actual < min) {
min = actual;
}
}
void loop() {
//Mientras esta pulsado calibramos sensor
while (digitalRead(pulsador) == LOW) {
calibra();
}
digitalWrite(LED_BUILTIN, LOW); //Fin de calibracion
sensorValue = analogRead(sensorPin); //Lee sensor
//Aplica calibracion de sensor
sensorValue = map(actual, min, max, 0, 255);
// in case the sensor value is outside the range seen during calibration
sensorValue = constrain(sensorValue, 0, 255);
analogWrite(led, sensorValue); //PWM al LED externo
}