dilluns, 24 de novembre del 2014

Diagramas de flujo y estructuras de control.




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:
 
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:
  1. Secuenciales (se ejecutan las instrucciones en bucle)
  2. Iteractivas (dependiendo de las entradas se ejecutan de una forma o de otra)
  3. 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
Subrutinas.
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 );
}

Llamamos a la funcion blink que produce un parpadeo del led en el pin1 con un retrado de 1 segundo.
Al terminar la subrutina, el programa sigue su curso normal.


Links: