{"id":5977,"date":"2018-10-14T00:36:28","date_gmt":"2018-10-14T00:36:28","guid":{"rendered":"http:\/\/betaweblog.education\/?p=5977"},"modified":"2021-11-10T12:09:17","modified_gmt":"2021-11-10T15:09:17","slug":"los-ojos-de-mi-robota-utilizar-funciones-en-el-arduino-ide","status":"publish","type":"post","link":"https:\/\/irisfernandez.com.ar\/betaweblog\/index.php\/2018\/10\/14\/los-ojos-de-mi-robota-utilizar-funciones-en-el-arduino-ide\/","title":{"rendered":"Los ojos de mi robota: Utilizar funciones en el Arduino IDE"},"content":{"rendered":"<p>Una funci\u00f3n es un fragmento de c\u00f3digo que realiza una tarea espec\u00edfica, a la que llamamos cada vez que necesitamos que se realice esta tarea.<\/p>\n<p>En mi ejemplo, tengo una <a href=\"https:\/\/irisfernandez.com.ar\/betaweblog\/index.php\/2018\/12\/23\/felices-fiestas-con-cuatro-matrices-max7219cng\/\">matriz de leds\u00a0MAX7219CNG<\/a>\u00a0que utilizo como ojos y boca de mi robota humanoide. Entonces program\u00e9 cuatro funciones:<\/p>\n<ul>\n<li>Mirar para adelante: <strong>ojosdefrente()<\/strong><\/li>\n<li>Pesta\u00f1ear: <strong>pestaneo()<\/strong><\/li>\n<li>Mirar para la izquierda:\u00a0<strong>mirar_izquierda();<\/strong><\/li>\n<li>Mirar para la derecha:\u00a0<strong>mirar_derecha();<\/strong><\/li>\n<\/ul>\n<p>En este primer ejemplo s\u00f3lo utilizaremos funciones que no devuelven ning\u00fan valor, por eso comienzan con <strong>void<\/strong>, igual que las ya conocidas <strong>void setup()<\/strong> y <strong>void loop().<\/strong><\/p>\n<p>Si una funci\u00f3n va a devolver un valor, en lugar de\u00a0<strong>void\u00a0<\/strong>debe comenzar con el tipo de dato que tendr\u00e1 lo que devuelva, por ejemplo\u00a0<strong>int.\u00a0<\/strong>En ese caso, la \u00faltima l\u00ednea de la funci\u00f3n ser\u00e1\u00a0<strong>return<\/strong> y el valor que debe devolver.<\/p>\n<p>Voy a tomar como ejemplo la funci\u00f3n &#8220;mirar_izquierda&#8221;. Comienza con\u00a0<strong>void<\/strong> porque no devuelve ning\u00fan valor, pero entre par\u00e9ntesis declara la variable\u00a0<strong>tiempo<\/strong>. Esa variable tomar\u00e1 el valor que nosotros le enviemos al llamar a la funci\u00f3n:<\/p>\n<p style=\"padding-left: 30px;\"><strong>void<\/strong> mirar_izquierda(int tiempo)<\/p>\n<p>Luego, entre llaves, se escriben todas las acciones de esa funci\u00f3n. En este caso todas las l\u00edneas de c\u00f3digo dibujan la cara mirando a la izquierda:<\/p>\n<p style=\"padding-left: 30px;\">{ lc.setColumn (0, 7, B11100111);<br \/>\nlc.setColumn (0, 6, B00000000);<br \/>\nlc.setColumn (0, 5, B00010001);<br \/>\nlc.setColumn (0, 4, B00110011);<br \/>\nlc.setColumn (0, 3, B00000000);<br \/>\nlc.setColumn (0, 2, B00111100);<br \/>\nlc.setColumn (0, 1, B01000010);<br \/>\nlc.setColumn (0, 0, B00111100);<\/p>\n<p>En la \u00faltima l\u00ednea se utiliza la variable que se pas\u00f3 como par\u00e1metro, con un delay:<\/p>\n<p style=\"padding-left: 30px;\">delay(tiempo); }<\/p>\n<p>Entonces, cada vez que yo necesite que la carita mire hacia la izquierda, puedo escribir simplemente el nombre de la funci\u00f3n, y entre par\u00e9ntesis indicarle el tiempo en milisegundos:<\/p>\n<p style=\"padding-left: 30px;\">mirar_izquierda(1000)<\/p>\n<p>Aqu\u00ed el c\u00f3digo completo para la carita:<\/p>\n<pre>#include \"LedControlMS.h\"\n#define NumMatrix 1 \/\/ Cuantas matrices vamos a usar\nLedControl lc = LedControl(12, 11, 10, NumMatrix); \/\/ Creamos una instancia de LedControl\n\n<strong>void<\/strong> setup() {\n\/\/matriz de leds\nfor (int i = 0; i &lt; NumMatrix ; i++)\n  {\n   lc.shutdown(i, false); \/\/ Activar matrices, por si hay m\u00e1s de una\n   lc.setIntensity(i, 0); \/\/ Poner el brillo a un valor bajo\n   lc.clearDisplay(i); \/\/ Borrar todo\n  }\n}\n\n<strong>void<\/strong> loop() {\n   ojosdefrente(500); \n   mirar_derecha(1000);\n   mirar_izquierda(500);\n   ojosdefrente(100);\n}\n\n<strong>void<\/strong> ojosdefrente(int tiempo) {\n   lc.setColumn (0, 7, B11100111);\n   lc.setColumn (0, 6, B00000000);\n   lc.setColumn (0, 5, B01000100);\n   lc.setColumn (0, 4, B01100110);\n   lc.setColumn (0, 3, B00000000);\n   lc.setColumn (0, 2, B00000000);\n   lc.setColumn (0, 1, B01000010);\n   lc.setColumn (0, 0, B00111100);\n   delay(tiempo);\n   numeroalazar = random(100); \/\/ escribe un n\u00famero aleatorio de 0 a 300 en la variable 'numAleatorio'\n   Serial.println(numeroalazar);\n   if (numeroalazar == 10) { pestaneo(); }\n}\n\n<strong>void<\/strong> pestaneo() {\n   lc.setColumn (0, 7, B00000000);\n   lc.setColumn (0, 6, B11100111);\n   lc.setColumn (0, 5, B00000000);\n   lc.setColumn (0, 4, B00000000);\n   lc.setColumn (0, 3, B11101110);\n   lc.setColumn (0, 2, B01000100);\n   lc.setColumn (0, 1, B00000000);\n   lc.setColumn (0, 0, B00111100);\n   delay(100);\n   lc.setColumn (0, 7, B00000000);\n   lc.setColumn (0, 6, B00000000);\n   lc.setColumn (0, 5, B11100111);\n   lc.setColumn (0, 4, B00000000);\n   lc.setColumn (0, 3, B00000000);\n   lc.setColumn (0, 2, B01100110);\n   lc.setColumn (0, 1, B00000000);\n   lc.setColumn (0, 0, B00111100);\n   delay(100);\n}\n\n<strong>void<\/strong> mirar_derecha(int tiempo) {\n   lc.setColumn (0, 7, B11100111);\n   lc.setColumn (0, 6, B00000000);\n   lc.setColumn (0, 5, B10001000);\n   lc.setColumn (0, 4, B11001100);\n   lc.setColumn (0, 3, B00000000);\n   lc.setColumn (0, 2, B00111100);\n   lc.setColumn (0, 1, B01000010);\n   lc.setColumn (0, 0, B00111100);\n   delay(tiempo);\n}\n\n\n<strong>void<\/strong> mirar_izquierda(int tiempo) {\n   lc.setColumn (0, 7, B11100111);\n   lc.setColumn (0, 6, B00000000);\n   lc.setColumn (0, 5, B00010001);\n   lc.setColumn (0, 4, B00110011);\n   lc.setColumn (0, 3, B00000000);\n   lc.setColumn (0, 2, B00111100);\n   lc.setColumn (0, 1, B01000010);\n   lc.setColumn (0, 0, B00111100);\n   delay(tiempo);\n}<\/pre>\n<p>Gracias a Prometec por <a href=\"https:\/\/www.prometec.net\/8x8-max7219\/\">este tutorial en que me bas\u00e9 para el uso b\u00e1sico de la matriz de leds.<\/a><\/p>\n<p>Para conocer m\u00e1s funciones de la librer\u00eda que maneja la matriz de leds, <a href=\"https:\/\/eldesvandejose.com\/2016\/04\/07\/la-libreria-ledcontrol\/\">este es un excelente lugar donde buscar referencias.<\/a><\/p>\n<p><iframe loading=\"lazy\" src=\"https:\/\/www.youtube.com\/embed\/o6CO5oDc9sY?rel=0\" width=\"560\" height=\"315\" frameborder=\"0\" allowfullscreen=\"allowfullscreen\"><\/iframe><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Una funci\u00f3n es un fragmento de c\u00f3digo que realiza una tarea espec\u00edfica, a la que llamamos cada vez que necesitamos que se realice esta tarea. En mi ejemplo, tengo una matriz de leds\u00a0MAX7219CNG\u00a0que utilizo como ojos y boca de mi robota humanoide. Entonces program\u00e9 cuatro funciones: Mirar para adelante: ojosdefrente() Pesta\u00f1ear: pestaneo() Mirar para la &hellip; <a href=\"https:\/\/irisfernandez.com.ar\/betaweblog\/index.php\/2018\/10\/14\/los-ojos-de-mi-robota-utilizar-funciones-en-el-arduino-ide\/\" class=\"more-link\">Continuar leyendo<span class=\"screen-reader-text\"> &#8220;Los ojos de mi robota: Utilizar funciones en el Arduino IDE&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[17,3],"tags":[21,25,27,28,30],"class_list":["post-5977","post","type-post","status-publish","format-standard","hentry","category-arduino","category-cultura-libre","tag-arduino","tag-funciones","tag-matriz-de-leds","tag-max7219cng","tag-parametros"],"_links":{"self":[{"href":"https:\/\/irisfernandez.com.ar\/betaweblog\/index.php\/wp-json\/wp\/v2\/posts\/5977","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/irisfernandez.com.ar\/betaweblog\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/irisfernandez.com.ar\/betaweblog\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/irisfernandez.com.ar\/betaweblog\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/irisfernandez.com.ar\/betaweblog\/index.php\/wp-json\/wp\/v2\/comments?post=5977"}],"version-history":[{"count":1,"href":"https:\/\/irisfernandez.com.ar\/betaweblog\/index.php\/wp-json\/wp\/v2\/posts\/5977\/revisions"}],"predecessor-version":[{"id":6622,"href":"https:\/\/irisfernandez.com.ar\/betaweblog\/index.php\/wp-json\/wp\/v2\/posts\/5977\/revisions\/6622"}],"wp:attachment":[{"href":"https:\/\/irisfernandez.com.ar\/betaweblog\/index.php\/wp-json\/wp\/v2\/media?parent=5977"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/irisfernandez.com.ar\/betaweblog\/index.php\/wp-json\/wp\/v2\/categories?post=5977"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/irisfernandez.com.ar\/betaweblog\/index.php\/wp-json\/wp\/v2\/tags?post=5977"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}