11. Diagramas de flujo.
Un
flujograma es una representación gráfica de un programa, se
recomienda antes de iniciar la programación, realizar el diagrama de
flujo para organizar y aclarar las ideas sobre el programa que vamos
a realizar.
Veamos
los símbolos mas comunes y algunos ejemplos.
Símbolos flujogramas.
Ejemplo:
Activar un led cuando se activa un pulsador con un retardo de un
segundo.
Activar led con pulsador.
Links:
Diagramas de flujo http://es.wikipedia.org/wiki/Diagrama_de_flujo
12. Estructuras de control.
Los
programas en Arduino se ejecutan en bucle (loop do), es decir se
ejecutan las instrucciones una detrás de otra y cuando llega al
final, empieza de nuevo.
Pero
muchas veces necesitamos modificar el flujo secuencial del programa.
Es decir se interrumpe el flujo original para realizar otras
secuencias, por ejemplo si realizamos una alarma, tendremos que
alterar la secuencia en el momento que un sensor se active para
indicarnos que ha saltado la alarma.
En
programación se utilizan de forma habitual los contadores, son
variables que se incrementan o se decrementan en función de unas
entradas. Por ejemplo si diseñamos una empaquetadora de botes y
queremos que cada caja contenga 12 elementos, necesitaremos un
contador.
Podemos
necesitar que el programa se comporte de una forma si se cumplen unas
condiciones y de otra si se cumplen otras, por ejemplo en el caso de
que la temperatura esté por encima de los 20 grados y el sensor de
luz se activa baja el toldo, y si no se cumple estas condiciones deja
el toldo subido.
También
podemos encontrarnos en el caso que se tengan que ejecutar unas
instrucciones hasta que se cumpla una condición. Por ejemplo: activa
la bomba de agua del depósito y muestra el valor del nivel del
depósito hasta que el sensor de llenado se active, en este momento
para la bomba y muestra el mensaje 'depósito lleno'.
Todas
las estructuras pueden ser:
- Secuenciales (se ejecutan las instrucciones en bucle)
- Iteractivas (dependiendo de las entradas se ejecutan de una forma o de otra)
- Estructuras avanzadas (son estructuras mas complejas)
Las
estructuras de control son fácilmente implementables con Ardublock.
Estructuras de control Ardublock.
Ardublock
y las estructuras de control.
Ardublock
|
Arduino
|
Función
|
void
setup()
{
pinMode(
1 , INPUT);
pinMode(
2 , OUTPUT);
}
void
loop()
{
if
(digitalRead(1))
{
digitalWrite(
2 , HIGH );
}
}
|
Entradas
Pin 1
Salidas
Pin 2
Si
entrada 1 se activa,pondremos la salida 2 en ON
|
|
void
setup()
{
pinMode(
1 , INPUT);
pinMode(
2 , OUTPUT);
}
void
loop()
{
if
(digitalRead(1))
{
digitalWrite(
2 , HIGH );
}
else
{
digitalWrite(
2 , LOW );
}
}
|
Entradas
Pin 1
Salidas
Pin 2
Si
entrada 1 se activa,pondremos la salida 2 en ON sino, la salida 2
en OFF
|
|
void
setup()
{
pinMode(
1 , INPUT);
pinMode(
2 , OUTPUT);
}
void
loop()
{
digitalWrite(
2 , HIGH );
while
( digitalRead(1) )
{
digitalWrite(
2 , LOW );
}
}
|
Entradas
Pin 1
Salidas
Pin 2
Activamos
la salida Pin 2, mientras esté activa la entrada 1, la salida 2
estará en OFF
(El
test se realiza antes de los comandos)
|
|
void
setup()
{
pinMode(
1 , INPUT);
pinMode(
2 , OUTPUT);
}
void
loop()
{
digitalWrite(
2 , HIGH );
do
{
digitalWrite(
2 , LOW );
}
while(digitalRead(1));
}
|
Entradas
Pin 1
Salidas
Pin 2
Activamos
la salida Pin 2, mientras esté activa la entrada 1, la salida 2
estará en OFF
(En
este caso se realiza el test después de los comandos)
|
|
int
_ABVAR_1_a;
void
setup()
{
pinMode(
1 , OUTPUT);
pinMode(
2 , OUTPUT);
}
void
loop()
{
for
(_ABVAR_1_a=1; _ABVAR_1_a<= ( 5 ); ++_ABVAR_1_a )
{
digitalWrite(
1 , HIGH );
delay(
1000 );
digitalWrite(
1 , LOW );
}
digitalWrite(
2 , HIGH );
}
|
Entradas
Pin 1
Salidas
Pin 2
Se
utiliza una variable Integer = ABVR_1_a
Se
repite 5 veces salida Pin 1 ON, Delay 1 seg Salida Pin 1 OFF,
después salida 2 ON
|
|
int
_ABVAR_1_v1 = 0 ;
void
setup()
{
pinMode(
1 , OUTPUT);
}
void
loop()
{
for
(_ABVAR_1_v1= 1; _ABVAR_1_v1<= ( 12 ); _ABVAR_1_v1++ )
{
digitalWrite(
1 , HIGH );
delay(
1000 );
digitalWrite(
1 , LOW );
delay(
1000 );
}
}
|
Salidas
Pin 1
Se
utiliza una variable Integer = ABVR_1_v1
Se
repite la secuencia Pin 1 ON, Pin 1 OFF con un retardo de 1 seg y
se incrementa la variable ABV_1_v1 cada vez. La repetición son 12
veces.
|
|
int
_ABVAR_1_v1 = 0 ;
void
setup()
{
pinMode(
1 , OUTPUT);
}
void
loop()
{
for(_ABVAR_1_v1
= 1;
1<=12?_ABVAR_1_v1
<= 12:_ABVAR_1_v1 >= 12;
1<=12?_ABVAR_1_v1
= _ABVAR_1_v1 + 2:_ABVAR_1_v1 = _ABVAR_1_v1 - 2)
{
digitalWrite(
1 , HIGH );
delay(
1000 );
digitalWrite(
1 , LOW );
delay(
1000 );
}
}
|
Salidas
Pin 1
Se
utiliza una variable Integer = ABVR_1_v1
Se
repite la secuencia Pin 1 ON, Pin 1 OFF con un retardo de 1 seg y
se incrementa la variable ABV_1_v1 cada vez. La repetición son 12
veces en pasos de 2 (6 veces en total, però la variable al final
tiene el valor 12)
|
|
Sirve
para salir de una secuencia
|
Las
subrutinas llamadas también subprogramas, procedimientos o funciones
son trozos de programa separados del bloque principal y que podemos
llamar cuando queramos, la subrutina devuelve el resultado y el
programa continua su ejecución en
el punto donde estaba.
Imaginemos
que queremos implementar un programa y que tenga una función que se
repite muchas veces, podemos llamar
a la
subrutina en
cada punto del programa que l necesitemos,
con lo que nos ahorramos teclear el código de esta función cada
vez. Sirve para estructurar y clarificar los programas.
Ardublock
|
Arduino
|
Función
|
Llamada
a la subrutina.
|
||
Subrutina
con los comandos que ejecuta.
|
||
void
blink();
void
setup()
{
pinMode(
1 , OUTPUT);
}
void
loop()
{
blink();
//llamada a la funcion
}
void
blink() //funcion
{
digitalWrite(
1 , HIGH );
delay(
1000 );
digitalWrite(
1 , LOW );
delay(
1000 );
}
|
Al
terminar la subrutina, el programa sigue su curso normal.
|
Links:
Estructuras
de control. http://es.wikipedia.org/wiki/Estructuras_de_control
Subrutinas. http://es.wikipedia.org/wiki/Subrutina
Referencia Arduino. http://arduino.cc/en/Reference/HomePage