Diferencia entre revisiones de «While statement conditional»

De ArduWiki
Saltar a: navegación, buscar
(Código)
(Vea también)
 
(No se muestran 2 ediciones intermedias del mismo usuario)
Línea 1: Línea 1:
 +
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 ==
 
== Placa aplicable ==
Línea 10: Línea 15:
  
 
//Valores sensor
 
//Valores sensor
int min = 1023;
+
int min = 511;
int max = 0;
+
int max = 512;
int actual = 0;
 
  
 
void setup() {
 
void setup() {
Línea 21: Línea 25:
  
 
void calibra() {
 
void calibra() {
  // turn on the indicator LED to indicate that calibration is happening:
+
   digitalWrite(LED_BUILTIN, HIGH); //Prende modo calibracion
   digitalWrite(LED_BUILTIN, HIGH);
+
   int actual = analogRead(sensor);  //Lee sensor:
   actual = analogRead(sensor);  //Lee sensor:
 
 
   //Guarda maximo
 
   //Guarda maximo
 
   if (actual > max) {
 
   if (actual > max) {
Línea 39: Línea 42:
 
       calibra();
 
       calibra();
 
   }
 
   }
   digitalWrite(LED_BUILTIN, LOW);  //Fin de calibracion
+
   digitalWrite(LED_BUILTIN, LOW);  //Fin modo calibración
 
+
   int actual = analogRead(sensor); //Lee sensor
   sensorValue = analogRead(sensorPin); //Lee sensor
+
   //Aplica calibración de sensor
 
 
   //Aplica calibracion de sensor
 
 
   sensorValue = map(actual, min, max, 0, 255);
 
   sensorValue = map(actual, min, max, 0, 255);
 
+
   sensorValue = constrain(sensorValue, 0, 255); //Restringe rango
  // in case the sensor value is outside the range seen during calibration
 
   sensorValue = constrain(sensorValue, 0, 255);
 
 
 
 
   analogWrite(led, sensorValue);  //PWM al LED externo
 
   analogWrite(led, sensorValue);  //PWM al LED externo
 
}
 
}
Línea 56: Línea 54:
  
 
== Vea también ==
 
== Vea también ==
* [[Arrays]]
+
<categorytree mode=all>Estructuras de control</categorytree>
* [[If statement conditional]]
 
* [[Switch case 1]]
 
* [[Switch case 2]]
 
* [[For loop iteraction]]
 
  
 
== Referencias ==
 
== Referencias ==

Revisión actual del 22:18 6 may 2019

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 = 511;
int max = 512;

void setup() {
  pinMode(LED_BUILTIN, OUTPUT);
  pinMode(led, OUTPUT);
  pinMode(pulsador, INPUT_PULLUP);
}

void calibra() {
   digitalWrite(LED_BUILTIN, HIGH);  //Prende modo calibracion
   int 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 modo calibración
   int actual = analogRead(sensor); //Lee sensor
   //Aplica calibración de sensor
   sensorValue = map(actual, min, max, 0, 255);
   sensorValue = constrain(sensorValue, 0, 255);  //Restringe rango
   analogWrite(led, sensorValue);  //PWM al LED externo
}

Comentarios

Vea también


Referencias