Sie sind auf Seite 1von 33

Taller 2 Arduino

Taller Introduccin a la Ingeniera Elctrica

20 de marzo de 2013

(TallerIne)

Taller 2 Arduino

20 de marzo de 2013

1 / 29

Esquema de la presentacin

Introduccin Matrices Funciones Ejercicios para entregar la semana prxima

(TallerIne)

Taller 2 Arduino

20 de marzo de 2013

2 / 29

Esquema de la presentacin

Introduccin Matrices Funciones Ejercicios para entregar la semana prxima

(TallerIne)

Taller 2 Arduino

20 de marzo de 2013

3 / 29

Como manejar una matriz en Arduino?

(TallerIne)

Taller 2 Arduino

20 de marzo de 2013

4 / 29

Arduino Uno

Este taller tiene dos objetivos: Analizar cmo manejar en arduino una matriz en hardware y software. La utilizacin de mtodos o funciones en software.

(TallerIne)

Taller 2 Arduino

20 de marzo de 2013

5 / 29

Esquema de la presentacin

Introduccin Matrices Funciones Ejercicios para entregar la semana prxima

(TallerIne)

Taller 2 Arduino

20 de marzo de 2013

6 / 29

Matriz

En software es una estructura de datos que permite tener un conjunto de variables asociadas que se pueden referenciar por su la y columna. En hardware, puede ser utilizada de muchas maneras pero hoy veremos una representacin a travs de una matriz de leds.

(TallerIne)

Taller 2 Arduino

20 de marzo de 2013

7 / 29

Matriz

En software es una estructura de datos que permite tener un conjunto de variables asociadas que se pueden referenciar por su la y columna. En hardware, puede ser utilizada de muchas maneras pero hoy veremos una representacin a travs de una matriz de leds.

(TallerIne)

Taller 2 Arduino

20 de marzo de 2013

7 / 29

El hardware a utilizar

Imagen tomada de: http://opensourcehardwarejunkies.com/tutorial-20-multi-dimensional-arrays-aka-matrix

(TallerIne)

Taller 2 Arduino

20 de marzo de 2013

8 / 29

El hardware a utilizar

Nosotros haremos una representacin de una matriz 2x2 y no 3x3 para simplicar el cableado. Mas adelante trabajaremos con matrices 8x8 nos alcanzan las salidas del arduino?

(TallerIne)

Taller 2 Arduino

20 de marzo de 2013

9 / 29

Declaracin e Inicializacin de matrices

int pinMatrix [2][2] = { {2 , 3} , {4 , 5} }; // fin de la declaracion de la matriz void setup () { // usaremos dos bucles anidados para recorrer la matriz e indicar que los valores de la matriz corresponden a los pines del arduino e indicar que son salidas for ( int i = 0; i < 2; i ++) { for ( int j = 0; j < 2; j ++) { pinMode ( pinMatrix [ i ][ j ] , OUTPUT ) ; } // close for i } // close for j } // close setup ()

(TallerIne)

Taller 2 Arduino

20 de marzo de 2013

10 / 29

Primer ejemplo, prender y apagar toda la matriz secuencialmente

void loop () { // en este doble bucle prenderemos y apagaremos cada led recorriendo por filas la matriz for ( int i = 0; i < 2; i ++) { for ( int j = 0; j < 2; j ++) { digitalWrite ( pinMatrix [ i ][ j ] , HIGH ) ; delay (1000) ; digitalWrite ( pinMatrix [ i ][ j ] , LOW ) ; } // close for i } // close for j } // close loop ()

(TallerIne)

Taller 2 Arduino

20 de marzo de 2013

11 / 29

Ejercicio 1

a) Modicar el programa anterior para que el segundo bucle en lugar de utilizar un for se use la instruccin while b)Modicar el programa anterior para que en lugar de recorrer la matriz por las lo haga por columnas.

(TallerIne)

Taller 2 Arduino

20 de marzo de 2013

12 / 29

Esquema de la presentacin

Introduccin Matrices Funciones Ejercicios para entregar la semana prxima

(TallerIne)

Taller 2 Arduino

20 de marzo de 2013

13 / 29

Funciones

Una funcin es un conjunto de declaraciones, deniciones, expresiones y sentencias que realizan una tarea especca. El formato general de una funcin es: EespecicadorDeTipo nombreFuncion( listaParmetros )
{

variables locales codigo de la funcion


}

(TallerIne)

Taller 2 Arduino

20 de marzo de 2013

14 / 29

Funciones - Un ejemplo simple

float encontprom ( int num1 , int num2 ) { float promedio ; promedio = ( num1 + num2 ) / 2.0; return ( promedio ) ;

// Desde otro programa o funcion se llama a la funcion k = encontprom (4 , 5) ;

(TallerIne)

Taller 2 Arduino

20 de marzo de 2013

15 / 29

Funciones

Ya las hemos usado, pero porqu se deben utilizar? porqu conviene segmentar el cdigo en funciones? El caso tpico para crear un funcin es cuando uno necesita realizar la misma accin mltiples veces dentro de un mismo programa. Las funciones ayudan al programador a ser organizado. Adems ayudan a conceptualizar el programa. Las funciones codican una accin en un lugar, as que slo deben ser depuradas de errores una vez. Reducen las posibilidades de error.

(TallerIne)

Taller 2 Arduino

20 de marzo de 2013

16 / 29

Funciones

Ya las hemos usado, pero porqu se deben utilizar? porqu conviene segmentar el cdigo en funciones? El caso tpico para crear un funcin es cuando uno necesita realizar la misma accin mltiples veces dentro de un mismo programa. Las funciones ayudan al programador a ser organizado. Adems ayudan a conceptualizar el programa. Las funciones codican una accin en un lugar, as que slo deben ser depuradas de errores una vez. Reducen las posibilidades de error.

(TallerIne)

Taller 2 Arduino

20 de marzo de 2013

16 / 29

Funciones

Ya las hemos usado, pero porqu se deben utilizar? porqu conviene segmentar el cdigo en funciones? El caso tpico para crear un funcin es cuando uno necesita realizar la misma accin mltiples veces dentro de un mismo programa. Las funciones ayudan al programador a ser organizado. Adems ayudan a conceptualizar el programa. Las funciones codican una accin en un lugar, as que slo deben ser depuradas de errores una vez. Reducen las posibilidades de error.

(TallerIne)

Taller 2 Arduino

20 de marzo de 2013

16 / 29

Funciones

Ya las hemos usado, pero porqu se deben utilizar? porqu conviene segmentar el cdigo en funciones? El caso tpico para crear un funcin es cuando uno necesita realizar la misma accin mltiples veces dentro de un mismo programa. Las funciones ayudan al programador a ser organizado. Adems ayudan a conceptualizar el programa. Las funciones codican una accin en un lugar, as que slo deben ser depuradas de errores una vez. Reducen las posibilidades de error.

(TallerIne)

Taller 2 Arduino

20 de marzo de 2013

16 / 29

Funciones y Arduino

Hay dos funciones necesarias en un sketch de Arduino: setup() y loop(). El resto de funciones debe ser denido fuera de las llaves de estas dos funciones. Hay funciones denidas en bibliotecas de funciones de arduino. delay(x) que Uds. invocaron en el cdigo es una funcin implementada por el arduino

(TallerIne)

Taller 2 Arduino

20 de marzo de 2013

17 / 29

Funciones - Un ejemplo simple

Como usar la funcin anterior en el Arduino:


void setup () { Serial . begin (9600) ; // la biblioteca Serial la veremos con detalle en el proximo taller . // permite enviar datos al PC a traves del puerto USB y mostralas en un monitor } void loop { int i = 2; int j = 3; float k ; k = encontprom (i , j ) ; // k ahora contiene 2.5 Serial . println ( k ) ; // envia el valor de k al PC . delay (5000) ; } float encontprom ( int num1 , int num2 ) { float promedio ; promedio = ( num1 + num2 ) / 2.0; return ( promedio ) ; }
(TallerIne) Taller 2 Arduino 20 de marzo de 2013

18 / 29

Funciones - Ejemplo

El cdigo anterior que vimos para prender y apagar la matriz de leds se puede reescribir as:
void loop () { int pinMatrix [2][2] = { {2 , 3} , {5 , 6} }; secuenciarMatriz ( pinMatrix ); // llama a la funcion definida mas abajo } // esta funcion en particular no devuelve nada solamente secuncia los leds de la matriz void secuenciarMatriz ( int matriz [2][2]) { for ( int i = 0; i < 2; i ++) { for ( int j = 0; j < 2; j ++) { digitalWrite ( matriz [ i ][ j] , HIGH ) ; delay (1000) ; digitalWrite ( matriz [ i ][ j] , LOW ) ; } } }
(TallerIne) Taller 2 Arduino 20 de marzo de 2013 19 / 29

Funciones - Ejemplo

La siguiente funcion muestra en el PC los valores de una matriz 3X3. No veremos en esta clase los detalles de la biblioteca serial. Lo que nos importa es que Serial.print envia lo que se le pase como parmetro al monitor del IDE de Arduino.
void imprimir_matriz ( int matriz [3][3]) { int i , j ; Serial . print ( " \ t " ) ; for ( i =0; i <3; i ++) { for ( j =0; j <3; j ++) { Serial . print ( matriz [ i ][ j ]) ; Serial . print ( " \ t " ) ; // introduce un tabulador entre las columnas } Serial . println () ; // cambia de linea al cambiar de fila Serial . print ( " \ t " ) ; } }

(TallerIne)

Taller 2 Arduino

20 de marzo de 2013

20 / 29

Ejercicio 2

Escribir un programa en el arduino que en la funcin loop dena dos matrices 3x3. Luego llame a una funcin que sume las dos matrices (elemento a elemento) y desde esa funcin imprima la matriz resultante. Cmo se hace para retornar la matriz resultante?

(TallerIne)

Taller 2 Arduino

20 de marzo de 2013

21 / 29

Funciones - retornar mas de un valor o una matriz

Solucin: Retornar valores pasados como parmetros. Es necesario cuando se quiere devolver ms de un valor o devolver vectores o matrices El siguiente ejemplo busca en la matriz la primera vez que aparece un valor y devuelve la la y la columna en que se encuentra.
void encontrar_valor ( int matriz [3][3] , int valor_encontrar , int & fila_encontrada , int & col_encontrada ) { int i , j ; fila_encontrada = -1; col_encontrada = -1; for ( i =0; i <3; i ++) { for ( j =0; j <3; j ++) { if ( matriz [ i ][ j ]== valor_encontrar ) { fila_encontrada = i ; col_encontrada = j ; return ; } } } }
(TallerIne) Taller 2 Arduino 20 de marzo de 2013 22 / 29

Funciones - devover una matriz

Busca en una matriz los valores mayores que un parametro y pone en la matriz de retorno 1 si es mayor y 0 si es menor o igual.
void encontrar_valor_mayor_que ( int matriz [3][3] , int valor_encontrar , int matrizRetorno [3][3]) { int i , j ; for ( i =0; i <3; i ++) { for ( j =0; j <3; j ++) { if ( matriz [ i ][ j ] > valor_encontrar ) { matrizRetorno [ i ][ j ]=1; } else { matrizRetorno [ i ][ j ]=0; } } } }

(TallerIne)

Taller 2 Arduino

20 de marzo de 2013

23 / 29

Funciones - devover una matriz

Uso de la funcion anterior:


void loop () { int pinMatrix [3][3] = { {2 , 3 , 4} , {5 , 6 , 7} , {8 , 9 , 10} }; int matrizSalida [3][3]; encontrar_valor_mayor_que ( pinMatrix ,6 , matrizSalida ) ; // en fila y columna devuelve si encontro el valor imprimir_matriz ( matrizSalida ) ; delay (10000) ; }

(TallerIne)

Taller 2 Arduino

20 de marzo de 2013

24 / 29

Ejercicios para el taller

1. Implementar en el arduino los ejercicios 1 y 2. 2. Hacer una funcin que recorra la diagonal de una matriz 5x5 de elementos positivos y devuelva el menor valor de la diagonal. Hacerlo de dos maneras diferentes: una utilizando for y otra while . En la funcin loop se debe denir la matriz, llamar a la funcin e imprimir el valor que retorna la funcin. 3. Hacer una funcion que a partir de un elemento dado como parmetro (la, columna) de la diagonal de la matriz y una matriz 5x5, recorra la matriz por la diagonal descendente y encuentre el mayor valor desde el elemento indicado hasta el borde de la matriz en la diagonal. En la funcin loop se debe denir la matriz, llamar a la funcin e imprimir el valor que retorna la funcin.

(TallerIne)

Taller 2 Arduino

20 de marzo de 2013

25 / 29

Esquema de la presentacin

Introduccin Matrices Funciones Ejercicios para entregar la semana prxima

(TallerIne)

Taller 2 Arduino

20 de marzo de 2013

26 / 29

Ejercicio 4

Dada una matriz 8x8 escribir una funcin


void sustituirsubMatriz ( int fila , int columna , int matriz [8][8])

que recibe como parmetro un lugar de la matriz (la y columna) y una matriz. Esta funcin cambia todos los valores del entorno del lugar que recibi como parmetro por el valor que tiene el lugar que recibi como parmetro. Una vez realizada esta modicacin de mostrar en el PC como era la matriz antes de llamar esta funcin y como ha quedado la matriz luego de esta funcin. Para esto deben modicar la funcin imprimir_matriz para que muestre una matriz 8x8. En general debe recorrer desde la-1 a la +1 y desde columna -1 a columna +1. Sin embargo, hay que tener cuidado con las condiciones de borde, es decir por ejemplo si el lugar es una esquina tiene 3 lugares en su entorno, si est en un lado tiene 5 valores en su entorno. Si no est en un borde tiene 8.
(TallerIne) Taller 2 Arduino 20 de marzo de 2013 27 / 29

Ejercicio 5

Dada una matriz 8x8 escribir una funcin


void buscarDireccion ( int fila , int columna , int matriz [8][8] , int dir_fila , int dir_col , int valor , int & fila_encontrada , int & columna_encontrada )

que recibe como parmetro un lugar de la matriz (la y columna), una matriz, una direccion de movimiento (dir_la, dir_col) y un valor. Las valores dir_la y dir_col podrn tomar cada uno de ellos solo los valores -1,0,1. Si dir_la =0 y dir_col = 1 indicar que se mueve por la misma la hacia la derecha. Si dir_la = -1 y dir_col = -1 se mover por la diagonal hacia la izquierda y hacia arriba, etc. Esta funcin debe buscar a partir de la posicin dada (la,columna) y en la direccin dada si en la matriz aparece el valor pasado como parmetro. Si aparece, debe devolver en la_encontrada y columna_encontrada la posicin donde apareci el valor. Si se llega a un borde de la matriz y no apareci en valor se debe devolver -1, -1. Se debe mostrar en la pantalla del PC la matriz utilizada y la la y la columna desde la cual se busc el valor, el valor, la direccin y la la y columna encontrada.
(TallerIne) Taller 2 Arduino 20 de marzo de 2013 28 / 29

Ejercicio 6

Leer en internet informacin sobre aritmtica binaria e informacin sobre el sistema hexadecimal. Tambin leer en la pgina de arduino la especicacin de los siguientes tipos: http://arduino.cc/en/Reference/UnsignedInt http://arduino.cc/en/Reference/Int http://arduino.cc/en/Reference/Long http://arduino.cc/en/Reference/Byte Responder a las siguientes preguntas: a) Cul es el nmero binario que encontraremos en la memoria del Arduino si denimos los siguientes datos con sus correspondientes tipos? int a = 255; unsigned int b = 255; long c= 255; byte d = 255; int e = -7; int f = -9; int g =0; int h = 32767 int i = -32768 b) Sume en binario e + f y verique que le da el valor correcto. cul es el resultado de sumarle uno a h? c) porqu puede es de inters utilizar el sistema hexadecimal para representar datos en una computadora?
(TallerIne) Taller 2 Arduino 20 de marzo de 2013 29 / 29

Das könnte Ihnen auch gefallen