Apunte de Arduino Hecho Por Ronald Parte 5
Apunte de Arduino Hecho Por Ronald Parte 5
5.Control Structures
If Statement (Conditional): How to use an if statement to change output conditions based on
changing input conditions.
For Loop: Controlling multiple LEDs with a for loop and.
Array: A variation on the For Loop example that demonstrates how to use an array.
While Loop: How to use a while loop to calibrate a sensor while a button is being read.
Switch Case: How to choose between a discrete number of values. Equivalent to multiple If
statements. This example shows how to divide a sensor's range into a set of four bands and to
take four different actions depending on which band the result is in.
Switch Case 2: A second switch-case example, showing how to take different actions based in
characters received in the serial port.
La declaración if() es la más básica de todas las estructuras de control de programación. Se le permite
hacer que algo suceda o no en función de sí una determinada condición es verdadera o no. De ésta
forma:
if (someCondition) {
// hacer tal cosa si la condición es verdadera
}
También está el caso de else-if, donde se puede comprobar una segunda condición si la primera es
falsa:
if (someCondition) {
// hacer tal cosa sí la condición es verdadera
} else if (anotherCondition) {
// hacer tal cosa sólo si la primera condición es falsa
// y si la segunda condición es verdadera
}
Vamos a usar la sentencia if todo el tiempo. En el ejemplo de abajo se enciende un LED en el pin 13 sí
el valor leído en una entrada analógica pasa por encima de un determinado umbral.
Hardware Required
Arduino Board
(1) Potentiometer or variable resistor
(1) 220 ohm resistor
(1) LED
hook-up wire
Schematic
En el siguiente código, una variable llamada analogValue se utiliza para almacenar los datos recogidos
de un potenciómetro conectado a la placa Arduino en analogPin 0. Estos datos se comparan entonces
con un valor umbral. Si el valor analógico se encuentra por encima del umbral establecido el LED
conectado al pin digital 13 se encenderá. Si analogValue se encuentra por debajo del umbral, el LED
permanece apagado.
void setup() {
pinMode(ledPin, OUTPUT); // inicializamos el LED pin como una salida
Serial.begin(9600); // inicializamos la comunicación serial
}
void loop() {
int analogValue = analogRead(analogPin); // leemos el valor del potenciómetro
if (analogValue > threshold) { // sí el valor analógico es mayor que el umbral (threshold)
digitalWrite(ledPin, HIGH); // encendemos el LED
}
else {
digitalWrite(ledPin, LOW); // de otra forma apagamos el LED
}
A menudo se desea iterar sobre una serie de pines y hacer algo en cada uno de ellos. En este ejemplo
haremos parpadea 6 LEDs conectados a la placa Arduino utilizando un bucle for () para desplazarse
hacia adelante y hacia atrás, a través de los pines digitales 2-7. Los LED se encenderán y se apagarán,
en secuencia, utilizando tanto las funciones digitalWrite() y delay().
Hardware Required
Arduino Board
(6) 220 ohm resistors
(6) LEDs
hook-up wire
breadboard
Schematic
int timer = 100; // cuanto mayor sea el número, más lenta será la sincronización
void setup() {
for (int thisPin = 2; thisPin < 8; thisPin++) { // utilizamos un bucle para inicializar
// cada pin como una salida
pinMode(thisPin, OUTPUT);
}
}
void loop() {
for (int thisPin = 2; thisPin < 8; thisPin++) { //bucle desde el pin más bajo hasta el más alto
digitalWrite(thisPin, HIGH); // encendemos el pin correspondiente
delay(timer);
digitalWrite(thisPin, LOW); // apagamos el pin correspondiente
}
for (int thisPin = 7; thisPin >= 2; thisPin--) { // bucle desde el pin más alto hasta el más bajo
digitalWrite(thisPin, HIGH); // encendemos el pin correspondiente
delay(timer);
digitalWrite(thisPin, LOW); // apagamos el pin correspondiente
}
}
Esta variación sobre el ejemplo anterior muestra cómo utilizar una matriz (array). Una matriz es una
variable con múltiples partes. Si pensamos en una variable como un vaso que contiene valores, es
posible pensar en una matriz como una bandeja de cubitos de hielo. Es como una serie de tazas
relacionadas, las cuales todas pueden contener el mismo valor máximo.
En ejemplo anterior se muestra cómo se enciende una serie de LEDs conectados a los pines del
Arduino, desde el 2 al 7, con ciertas limitaciones (los pines han sido enumerados de forma consecutiva,
y los LED se encienden en forma secuencia).
Este ejemplo muestra cómo se puede activar una secuencia de pines cuyos números no son ni
consecutivos ni necesariamente secuencial. Para ello vamos a poner los números de pin en una matriz
y luego usar bucles for para iterar sobre la matriz.
En este ejemplo haremos uso de 6 LEDs conectados a los pines 2-7 en el tablero utilizando resistencias
220 Ohm, al igual que en el ejemplo anterior. Sin embargo, aquí el orden de los LEDs se determina por
su orden en la matriz, no por su orden físico.
Esta técnica de poner los pines en una matriz es muy práctico. Ya que no es necesario tener los pines
en forma secuencial, e incluso en el mismo orden. Además, podemos cambiar la posición según nos
parezca conveniente.
Hardware Required
Arduino Board
(6) 220 ohm resistors
(6) LEDs
hook-up wire
breadboard
Schematic
int timer = 100; // cuanto mayor sea el número, más lenta será la sincronización.
int ledPins[] = {
2, 7, 4, 6, 5, 3 }; // matriz de números de pines que están conectados a los LEDs
int pinCount = 6; // El número de pines (es decir, la longitud de la matriz)
void setup() {
// Los elementos de la matriz se numeran desde 0 a (pinCount - 1).
for (int thisPin = 2; thisPin < 8; thisPin++) { // Utilizamos un bucle for para
pinMode(thisPin, OUTPUT); // inicializar cada pin como salida
}
}
void loop() {
for (int thisPin = 0; thisPin < pinCount; thisPin++) { //bucle desde el pin más bajo hasta el más alto
digitalWrite(ledPins[thisPin], HIGH); // encendemos el pin correspondiente
delay(timer);
digitalWrite(ledPins[thisPin], LOW); // apagamos el pin correspondiente
}
for (int thisPin = pinCount - 1; thisPin >= 0; thisPin--) { // bucle desde el pin más alto
// hasta el más bajo
digitalWrite(ledPins[thisPin], HIGH); // encendemos el pin correspondiente
delay(timer);
digitalWrite(ledPins[thisPin], LOW); // apagamos el pin correspondiente
}
}
A veces todo lo que queremos en un programa es que se detenga mientras una condición dada es
verdadera. Podemos hacer esto mediante un bucle while (). Este ejemplo muestra cómo utilizar un
bucle while () para calibrar el valor de un sensor analógico.
En el bucle principal, el sketch de abajo lee el valor de una fotorresistencia en el pin analógico 0 y lo
utiliza para desvanecer un LED en el pin 9. Pero cuando se pulsa el pulsador conectado al pin digital 2,
el programa ejecuta una función llamada de calibración(), que busca los valores más altos y más bajos
del sensor analógico, para luego realizar la calibración. Al soltar el botón, el sketch continúa con el
bucle principal.
Esta técnica le permite actualizar los valores máximos y mínimos para la fotorresistencia cuando las
condiciones de iluminación cambian.
Hardware Required
Arduino Board
(1) digital pushbutton or switch
(1) photocell, or analog sensor
(2) 10k ohm resistors
breadboard
Circuit
Conectamos un sensor analógico (por ej. un potenciómetro, o un fotosensor) en la entrada analógica
0 con una resistencia de 10K pull-down a tierra. luego conectamos un LED al pin 9, a través de una
resistencia de 220 ohm en serie. y por último conectamos el pulsador a la entrada digital 2 con una
resistencia de 10K pull-down a tierra.
void setup() {
pinMode(indicatorLedPin, OUTPUT); // configuramos el pin del LED 9 como una salida
pinMode (ledPin, OUTPUT); // configuramos el pin del LED 13 como una salida
pinMode (buttonPin, INPUT); // configuramos el pin del pulsador como una entrada
}
void loop() {
// mientras (while) el pulsador es presionado, realizamos la calibración:
while (digitalRead(buttonPin) == HIGH) {
calibrate();
}
// en caso de que el valor del sensor está fuera del rango visto durante la calibración lo acotamos
sensorValue = constrain(sensorValue, 0, 255);
void calibrate() {
// Encendemos el LED interno conectado en 13 para indicar que la calibración está ocurriendo:
digitalWrite(indicatorLedPin, HIGH);
Una sentencia if () nos permite elegir entre dos opciones discretas, verdadero o falso. Cuando hay más
de dos opciones, podemos utilizar múltiples sentencias if (), o podemos utilizar la sentencia switch().
Switch() nos permite elegir entre varias opciones discretas. Este tutorial nos muestra cómo la utilizar
la sentencia switch() para cambiar entre cuatro estados deseados que posea el fotoresistor: muy
oscuro, oscuro, medio y brillante.
Este programa primero lee la fotorresistencia. A continuación, utiliza la función de map() para mapear
su salida a uno de cuatro valores: 0, 1, 2, o 3. Y por último, se utiliza la instrucción switch() para imprimir
uno de los cuatro mensajes que se envían de vuelta a la computadora, dependiendo de cuál de los
cuatro valores se devuelve.
Hardware Required
Arduino Board
(1) photocell, or analog sensor
(1) 10k ohm resistors
breadboard
hook-up wire
Circuit
La fotorresistencia está conectada al pin analógico 0 formando un circuito divisor de corriente con una
resistencia 10K Ohm. La función analogRead() devuelve un valor entre 0 a 600 aproximadamente 0 a
600 en un espacio interior razonablemente iluminado.
Code
void setup() {
Serial.begin(9600); // iniciamos la comunicación serial
}
void loop() {
int sensorReading = analogRead(A0); // leemos los datos del sensor
Nombre switch ()
Ejemplo int num = 1;
switch (num) {
case 0:
Serial.println("Zero"); // No se ejecuta
break;
case 1:
Serial.println("One"); // Imprime "One"
break;
}
Nombre case
Ejemplo char letter = 'B';
switch (letter) {
case 'A':
Serial.println("Alpha"); // No se ejecuta
break;
case 'B':
Serial.println("Bravo"); // Imprime Bravo
break;
default:
Serial.println("Zulu"); // No se ejecuta
break;
}
Descripción Denota las etiquetas principales a ser evaluadas con el parámetro en la
estructura switch().
Sintaxis case Etiqueta: Declaración
Parámetros Etiqueta byte, char, o int
Declaraciones una o más instrucciones válidas
Nombre break
Ejemplo char letter = 'B';
switch (letter) {
case 'A':
Serial.println("Alpha"); // No se ejecuta
break;
case 'B':
Serial.println("Bravo"); // Imprime Bravo
break;
default:
Serial.println("Zulu"); // No se ejecuta
break;
}
Ing. Ronald N. Kopp Página 19
Arduino
Descripción Finaliza la ejecución de estructuras como switch(), for(), o wile() y continua a la
siguiente instrucción
Sintaxis break
Una sentencia if () nos permite elegir entre dos opciones discretas, VERDADERO o FALSO. Cuando hay
más de dos opciones, se puede utilizar múltiples sentencias if (), o se puede utilizar la sentencia
switch(). Switch() permite elegir entre varias opciones discretas.
Este tutorial muestra cómo utilizar switch() para encender un LED diferentes de varios, basado en un
byte de dato recibidos a través del puerto serie. El sketch lee la entrada a través del puerto serie, y
enciende un LED diferente en función del carácter recibido a, b, c, d, y e.
Hardware Required
Arduino Board
(5) LEDs
(5) 220 ohm resistors
breadboard
hook-up wire
Circuit
Cinco LEDs están asociadas a los pines digitales 2, 3, 4, 5, y 6 en serie a través de una resistencia de
220 ohmios.
Para hacer este Sketch, nuestro Arduino debe estar conectado a nuestro ordenador. Abrimos el
monitor serial, y enviamos los caracteres a, b, c, d y e.
for (int thisPin = 2; thisPin < 7; thisPin++) { // Iniciamos los pines conectados los LED como salidas
pinMode(thisPin, OUTPUT);
}
}
void loop() {
if (Serial.available() > 0) { // leemos los datos del sensor
int inByte = Serial.read();
switch (inByte) {
case 'a':
digitalWrite(2, HIGH);
break;
case 'b':
digitalWrite(3, HIGH);
break;
case 'c':
digitalWrite(4, HIGH);
break;
case 'd':
digitalWrite(5, HIGH);
break;
case 'e':
digitalWrite(6, HIGH);
break;
default:
for (int thisPin = 2; thisPin < 7; thisPin++) { // apagamos todos los LEDs
digitalWrite(thisPin, LOW);
}
}
}
}
switch (letter) {
case 'A':
Serial.println("Alpha"); // No se ejecuta
break;
case 'B':
Serial.println("Bravo"); // No se ejecuta
break;
default:
Serial.println("Zulu"); // Imprime Zulu
break;
}
Descripción Palabra reservada para definir la condición por defecto de un switch(). Si no se
cumple ninguna de las etiquetas de los casos que corresponden con el parámetro
del switch(), se ejecutan las instrucciones después del default. La estructura switch()
no requiere un caso default
Sintaxis default: Declaración
Parámetros Etiqueta byte, char, o int
Declaraciones una o más instrucciones válidas a ser ejecutadas