{"id":1241,"date":"2018-05-12T08:12:46","date_gmt":"2018-05-12T13:12:46","guid":{"rendered":"http:\/\/blog.espol.edu.ec\/edelros\/?p=1241"},"modified":"2021-05-19T12:12:18","modified_gmt":"2021-05-19T17:12:18","slug":"funciones-personalizadas-entradasalida-serie","status":"publish","type":"post","link":"https:\/\/blog.espol.edu.ec\/edelros\/funciones-personalizadas-entradasalida-serie\/","title":{"rendered":"Funciones personalizadas en Arduino, Entrada\/salida serie"},"content":{"rendered":"<p><strong>Componentes<\/strong>: Arduino, cable USB.<\/p>\n<p>Una forma de usar funciones personalizadas para c\u00e1lculo en arduino, consiste en serparar las instrucciones de c\u00e1lculo como una funci\u00f3n separada del bloque\/lazo principal.<\/p>\n<p>Por ejemplo, se puede usar la forma polin\u00f3mica de la <strong><a href=\"http:\/\/blog.espol.edu.ec\/matg1013\/taylor-serie-ejercicio01\/\">serie de Taylor<\/a><\/strong> para una funci\u00f3n no disponible de c\u00e1lculos con la precisi\u00f3n deseada.<\/p>\n<p>La operatividad se muestra usando como ejemplo la funci\u00f3n <code>factorial()<\/code>,\u00a0\u00a0 enviando y recibiendo los valores por medio de la conexi\u00f3n por USB y el \"monitor serie\". Ejemplo:<\/p>\n<p><a href=\"http:\/\/blog.espol.edu.ec\/edelros\/files\/2018\/05\/funcionFactorialSerial.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1242\" src=\"http:\/\/blog.espol.edu.ec\/edelros\/files\/2018\/05\/funcionFactorialSerial.png\" alt=\"\" width=\"574\" height=\"383\" srcset=\"https:\/\/blog.espol.edu.ec\/edelros\/files\/2018\/05\/funcionFactorialSerial.png 574w, https:\/\/blog.espol.edu.ec\/edelros\/files\/2018\/05\/funcionFactorialSerial-300x200.png 300w, https:\/\/blog.espol.edu.ec\/edelros\/files\/2018\/05\/funcionFactorialSerial-272x182.png 272w\" sizes=\"auto, (max-width: 574px) 100vw, 574px\" \/><\/a><\/p>\n<p>Observe que se encuentra habilitado el uso de \"nueva l\u00ednea\" y \"cambio de l\u00ednea\" (NL &amp; CR) , para que al presionar \"ENTER\" se considera ingresado todos los d\u00edgitos del n\u00famero.<\/p>\n<h2>Funciones para c\u00e1lculos<\/h2>\n<p>Para el ejemplo, se realiza el c\u00e1lculo del factorial:<\/p>\n<p style=\"text-align: center\"><strong>n<\/strong>! = 1 x 2 x 3 x ... x <strong>n<\/strong><\/p>\n<pre><span style=\"color: #00979c\">float<\/span> factorial(<span style=\"color: #00979c\">float<\/span> n){\r\n    <span style=\"color: #00979c\">float<\/span> resultado = 1;\r\n    <span style=\"color: #00979c\">int<\/span> i = 2;\r\n    <span style=\"color: #5e6d03\">for<\/span> (i = 2; i<span style=\"color: #434f54\">&lt;=<\/span>n; i<span style=\"color: #434f54\">++<\/span>){\r\n        resultado = resultado<span style=\"color: #434f54\">*<\/span>i;\r\n    }\r\n    <span style=\"color: #5e6d03\">return<\/span> resultado;\r\n}\r\n<\/pre>\n<p>En el <strong>resultado<\/strong>, la cantidad de d\u00edgitos\u00a0 se extiende usando el tipo real (<em>float<\/em>). Como pr\u00e1ctica,\u00a0 cambie la variable resultado a tipo entero (<em>int<\/em>), actualice el programa en el arduino, y calcule para n\u00fameros mayores\u00a0 a 7; observe y explique el resultado.<\/p>\n<h2>Env\u00edo y recepci\u00f3n de datos con \"monitor Serie\"<\/h2>\n<p>La prueba de la funci\u00f3n se simplifica enviando y recibiendo datos por la conexi\u00f3n USB. La variable <strong>mensaje\u00a0<\/strong>almacena <strong>un caracter<\/strong> enviado al arduino, validando que sea un d\u00edgito entre 0 y 9. Al presionar \"ENTER\" se cierra el <strong>mensaje<\/strong>, se cambia el valor a <strong>n\u00famero<\/strong> a entero y se procede a usar la funci\u00f3n factorial para mostrar el <strong>resultado<\/strong>.<\/p>\n<pre><span style=\"color: #434f54\">\/\/ funciones personalizadas para c\u00e1lculo<\/span>\r\n<span style=\"color: #434f54\">\/\/ ingreso y salida por 'monitor serial'<\/span>\r\n<span style=\"color: #434f54\">\/\/ el mensaje se procesa por d\u00edgitos hasta presional ENTER<\/span>\r\n<span style=\"color: #434f54\">\/\/    y se convierte a n\u00famero<\/span>\r\n\r\n<span style=\"color: #00979c\">String<\/span> mensaje = <span style=\"color: #005c5f\">\"\"<\/span>;\r\n<span style=\"color: #00979c\">void<\/span> <span style=\"color: #5e6d03\">setup<\/span>() {\r\n    <b><span style=\"color: #d35400\">Serial<\/span><\/b><span style=\"color: #434f54\">.<\/span><span style=\"color: #d35400\">begin<\/span>(<span style=\"color: #000000\">9600<\/span>);\r\n    <span style=\"color: #434f54\">\/\/ espera por conexion serial-USB<\/span>\r\n    <span style=\"color: #5e6d03\">while<\/span> (<span style=\"color: #434f54\">!<\/span><b><span style=\"color: #d35400\">Serial<\/span><\/b>) {}\r\n    <b><span style=\"color: #d35400\">Serial<\/span><\/b><span style=\"color: #434f54\">.<\/span><span style=\"color: #d35400\">println<\/span>(<span style=\"color: #005c5f\">\"\\n calcular funcion(): \\n\"<\/span>);\r\n}\r\n<span style=\"color: #00979c\">void<\/span> <span style=\"color: #5e6d03\">loop<\/span>() {\r\n    <span style=\"color: #00979c\">int<\/span> uncaracter = 0;\r\n    <span style=\"color: #00979c\">float<\/span> numero = 0;\r\n    <span style=\"color: #00979c\">float<\/span> resultado = 0.0;\r\n    <span style=\"color: #5e6d03\">while<\/span> (<b><span style=\"color: #d35400\">Serial<\/span><\/b><span style=\"color: #434f54\">.<\/span><span style=\"color: #d35400\">available<\/span>() <span style=\"color: #434f54\">&gt;<\/span> 0) {\r\n        uncaracter = <b><span style=\"color: #d35400\">Serial<\/span><\/b><span style=\"color: #434f54\">.<\/span><span style=\"color: #d35400\">read<\/span>();\r\n        <span style=\"color: #5e6d03\">if<\/span> (<span style=\"color: #d35400\">isDigit<\/span>(uncaracter)) {\r\n            mensaje = mensaje <span style=\"color: #434f54\">+<\/span> (<span style=\"color: #00979c\">char<\/span>)uncaracter;\r\n        }\r\n        <span style=\"color: #5e6d03\">if<\/span> (uncaracter <span style=\"color: #434f54\">==<\/span> <span style=\"color: #00979c\">'.'<\/span>) {\r\n            mensaje = mensaje <span style=\"color: #434f54\">+<\/span> (<span style=\"color: #00979c\">char<\/span>)uncaracter;\r\n        }\r\n        <span style=\"color: #5e6d03\">if<\/span> (uncaracter <span style=\"color: #434f54\">==<\/span> <span style=\"color: #00979c\">'\\n'<\/span>) {\r\n            numero = mensaje<span style=\"color: #434f54\">.<\/span><span style=\"color: #d35400\">toInt<\/span>();\r\n            <b><span style=\"color: #d35400\">Serial<\/span><\/b><span style=\"color: #434f54\">.<\/span><span style=\"color: #d35400\">print<\/span>(<span style=\"color: #005c5f\">\"mensaje: \"<\/span>);\r\n            <b><span style=\"color: #d35400\">Serial<\/span><\/b><span style=\"color: #434f54\">.<\/span><span style=\"color: #d35400\">println<\/span>(mensaje);\r\n            <b><span style=\"color: #d35400\">Serial<\/span><\/b><span style=\"color: #434f54\">.<\/span><span style=\"color: #d35400\">print<\/span>(<span style=\"color: #005c5f\">\"numero es: \"<\/span>);\r\n            <b><span style=\"color: #d35400\">Serial<\/span><\/b><span style=\"color: #434f54\">.<\/span><span style=\"color: #d35400\">println<\/span>(numero);\r\n\r\n            <span style=\"color: #434f54\">\/\/ bloque de funci\u00f3n matematica<\/span>\r\n            resultado = factorial(numero);\r\n            <b><span style=\"color: #d35400\">Serial<\/span><\/b><span style=\"color: #434f54\">.<\/span><span style=\"color: #d35400\">print<\/span>(<span style=\"color: #005c5f\">\"factorial(numero): \"<\/span>);\r\n            <b><span style=\"color: #d35400\">Serial<\/span><\/b><span style=\"color: #434f54\">.<\/span><span style=\"color: #d35400\">println<\/span>(resultado);\r\n            mensaje = <span style=\"color: #005c5f\">\"\"<\/span>;\r\n        }\r\n    }\r\n}\r\n\r\n<span style=\"color: #00979c\">float<\/span> factorial(<span style=\"color: #00979c\">float<\/span> n){\r\n    <span style=\"color: #00979c\">float<\/span> resultado = 1;\r\n    <span style=\"color: #00979c\">int<\/span> i = 2;\r\n    <span style=\"color: #5e6d03\">for<\/span> (i = 2; i<span style=\"color: #434f54\">&lt;=<\/span>n; i<span style=\"color: #434f54\">++<\/span>){\r\n        resultado = resultado<span style=\"color: #434f54\">*<\/span>i;\r\n    }\r\n    <span style=\"color: #5e6d03\">return<\/span> resultado;\r\n}\r\n<\/pre>\n<p>Para probar otras funciones, modifique los mensajes siguiendo el contexto del problema a resolver.<\/p>\n<hr \/>\n<h2>Funciones con n\u00fameros reales<\/h2>\n<p>Siguiendo el ejemplo de Polinomio de Taylor para el coseno(), en este caso el n\u00famero de ingreso y salida son es reales (float). El esquema de la funci\u00f3n es muy semejante.<\/p>\n<p><a href=\"http:\/\/blog.espol.edu.ec\/analisisnumerico\/1-4-taylor-polinomio-ejemplo01\/\">1.4 Taylor-polinomio Ejemplo01<\/a><\/p>\n<pre><span style=\"color: #434f54\">\/\/ funciones personalizadas para c\u00e1lculo<\/span>\r\n<span style=\"color: #434f54\">\/\/ ingreso y salida por 'monitor serial'<\/span>\r\n<span style=\"color: #434f54\">\/\/ el mensaje se procesa por d\u00edgitos n\u00famero hasta presional ENTER<\/span>\r\n<span style=\"color: #434f54\">\/\/    y se convierte a n\u00famero, para usar la funci\u00f3n<\/span>\r\n\r\n<span style=\"color: #00979c\">String<\/span> mensaje <span style=\"color: #434f54\">=<\/span> <span style=\"color: #005c5f\">\"\"<\/span>;\r\n<span style=\"color: #00979c\">void<\/span> <span style=\"color: #5e6d03\">setup<\/span>() {\r\n    <b><span style=\"color: #d35400\">Serial<\/span><\/b><span style=\"color: #434f54\">.<\/span><span style=\"color: #d35400\">begin<\/span>(<span style=\"color: #000000\">9600<\/span>);\r\n    <span style=\"color: #434f54\">\/\/ espera por conexion serial-USB<\/span>\r\n    <span style=\"color: #5e6d03\">while<\/span> (<span style=\"color: #434f54\">!<\/span><b><span style=\"color: #d35400\">Serial<\/span><\/b>) {}\r\n    <b><span style=\"color: #d35400\">Serial<\/span><\/b><span style=\"color: #434f54\">.<\/span><span style=\"color: #d35400\">println<\/span>(<span style=\"color: #005c5f\">\"\\n calcular funcion(): \\n\"<\/span>);\r\n}\r\n<span style=\"color: #00979c\">void<\/span> <span style=\"color: #5e6d03\">loop<\/span>() {\r\n    <span style=\"color: #00979c\">int<\/span> uncaracter <span style=\"color: #434f54\">=<\/span> 0;\r\n    <span style=\"color: #00979c\">float<\/span> numero <span style=\"color: #434f54\">=<\/span> 0.0;\r\n    <span style=\"color: #00979c\">double<\/span> resultado <span style=\"color: #434f54\">=<\/span> 0.0;\r\n    <span style=\"color: #5e6d03\">while<\/span> (<b><span style=\"color: #d35400\">Serial<\/span><\/b><span style=\"color: #434f54\">.<\/span><span style=\"color: #d35400\">available<\/span>() <span style=\"color: #434f54\">&gt;<\/span> 0) {\r\n        uncaracter <span style=\"color: #434f54\">=<\/span> <b><span style=\"color: #d35400\">Serial<\/span><\/b><span style=\"color: #434f54\">.<\/span><span style=\"color: #d35400\">read<\/span>();\r\n        <span style=\"color: #5e6d03\">if<\/span> (<span style=\"color: #d35400\">isDigit<\/span>(uncaracter)) {\r\n            mensaje <span style=\"color: #434f54\">=<\/span> mensaje <span style=\"color: #434f54\">+<\/span> (<span style=\"color: #00979c\">char<\/span>)uncaracter;\r\n        }\r\n        <span style=\"color: #5e6d03\">if<\/span> (uncaracter <span style=\"color: #434f54\">==<\/span> <span style=\"color: #00979c\">'.'<\/span>) {\r\n            mensaje <span style=\"color: #434f54\">=<\/span> mensaje <span style=\"color: #434f54\">+<\/span> (<span style=\"color: #00979c\">char<\/span>)uncaracter;\r\n        }\r\n        <span style=\"color: #5e6d03\">if<\/span> (uncaracter <span style=\"color: #434f54\">==<\/span> <span style=\"color: #00979c\">'\\n'<\/span>) {\r\n            numero <span style=\"color: #434f54\">=<\/span> mensaje<span style=\"color: #434f54\">.<\/span><span style=\"color: #000000\">toFloat<\/span>();\r\n            <b><span style=\"color: #d35400\">Serial<\/span><\/b><span style=\"color: #434f54\">.<\/span><span style=\"color: #d35400\">print<\/span>(<span style=\"color: #005c5f\">\"mensaje: \"<\/span>);\r\n            <b><span style=\"color: #d35400\">Serial<\/span><\/b><span style=\"color: #434f54\">.<\/span><span style=\"color: #d35400\">println<\/span>(mensaje);\r\n            <b><span style=\"color: #d35400\">Serial<\/span><\/b><span style=\"color: #434f54\">.<\/span><span style=\"color: #d35400\">print<\/span>(<span style=\"color: #005c5f\">\"numero es: \"<\/span>);\r\n            <b><span style=\"color: #d35400\">Serial<\/span><\/b><span style=\"color: #434f54\">.<\/span><span style=\"color: #d35400\">println<\/span>(numero);\r\n\r\n            <span style=\"color: #434f54\">\/\/ bloque de funci\u00f3n matematica<\/span>\r\n            resultado <span style=\"color: #434f54\">=<\/span> poliTaylor(numero);\r\n            <b><span style=\"color: #d35400\">Serial<\/span><\/b><span style=\"color: #434f54\">.<\/span><span style=\"color: #d35400\">print<\/span>(<span style=\"color: #005c5f\">\"poliTaylor(numero): \"<\/span>);\r\n            <b><span style=\"color: #d35400\">Serial<\/span><\/b><span style=\"color: #434f54\">.<\/span><span style=\"color: #d35400\">println<\/span>(resultado<span style=\"color: #434f54\">,<\/span><span style=\"color: #000000\">4<\/span>);\r\n            <b><span style=\"color: #d35400\">Serial<\/span><\/b><span style=\"color: #434f54\">.<\/span><span style=\"color: #d35400\">println<\/span>(<span style=\"color: #d35400\">cos<\/span>(numero)<span style=\"color: #434f54\">,<\/span><span style=\"color: #000000\">4<\/span>);\r\n            mensaje <span style=\"color: #434f54\">=<\/span> <span style=\"color: #005c5f\">\"\"<\/span>;\r\n        }\r\n    }\r\n}\r\n\r\n<span style=\"color: #00979c\">float<\/span> poliTaylor(<span style=\"color: #00979c\">float<\/span> <span style=\"color: #000000\">x<\/span>){\r\n    <span style=\"color: #00979c\">float<\/span> resultado;\r\n    <span style=\"color: #00979c\">float<\/span> <span style=\"color: #000000\">x0<\/span><span style=\"color: #434f54\">=<\/span>0.0;\r\n    resultado <span style=\"color: #434f54\">=<\/span> 1 <span style=\"color: #434f54\">-<\/span> <span style=\"color: #000000\">0.5<\/span><span style=\"color: #434f54\">*<\/span>(<span style=\"color: #000000\">x<\/span><span style=\"color: #434f54\">-<\/span><span style=\"color: #000000\">x0<\/span>)<span style=\"color: #434f54\">*<\/span>(<span style=\"color: #000000\">x<\/span><span style=\"color: #434f54\">-<\/span><span style=\"color: #000000\">x0<\/span>); \r\n    <span style=\"color: #5e6d03\">return<\/span> resultado;\r\n}\r\n<\/pre>\n<p><em><strong>Referencias<\/strong><\/em>:<\/p>\n<p><a href=\"https:\/\/playground.arduino.cc\/ArduinoNotebookTraduccion\/Serial\">Arduino Serial read<\/a> , <a href=\"https:\/\/www.arduino.cc\/reference\/en\/\">Arduino lista de funciones b\u00e1sicas<\/a>\u00a0.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Componentes: Arduino, cable USB. Una forma de usar funciones personalizadas para c\u00e1lculo en arduino, consiste en serparar las instrucciones de c\u00e1lculo como una funci\u00f3n separada del bloque\/lazo principal. Por ejemplo, se puede usar la forma polin\u00f3mica de la serie de Taylor para una funci\u00f3n no disponible de c\u00e1lculos con la precisi\u00f3n deseada. La operatividad se &hellip; <a href=\"https:\/\/blog.espol.edu.ec\/edelros\/funciones-personalizadas-entradasalida-serie\/\" class=\"more-link\">Sigue leyendo <span class=\"screen-reader-text\">Funciones personalizadas en Arduino, Entrada\/salida serie<\/span><\/a><\/p>\n","protected":false},"author":8043,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[422376],"tags":[],"class_list":["post-1241","post","type-post","status-publish","format-standard","hentry","category-calculadora-cientifica"],"_links":{"self":[{"href":"https:\/\/blog.espol.edu.ec\/edelros\/wp-json\/wp\/v2\/posts\/1241","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.espol.edu.ec\/edelros\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.espol.edu.ec\/edelros\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/edelros\/wp-json\/wp\/v2\/users\/8043"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/edelros\/wp-json\/wp\/v2\/comments?post=1241"}],"version-history":[{"count":4,"href":"https:\/\/blog.espol.edu.ec\/edelros\/wp-json\/wp\/v2\/posts\/1241\/revisions"}],"predecessor-version":[{"id":2285,"href":"https:\/\/blog.espol.edu.ec\/edelros\/wp-json\/wp\/v2\/posts\/1241\/revisions\/2285"}],"wp:attachment":[{"href":"https:\/\/blog.espol.edu.ec\/edelros\/wp-json\/wp\/v2\/media?parent=1241"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/edelros\/wp-json\/wp\/v2\/categories?post=1241"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/edelros\/wp-json\/wp\/v2\/tags?post=1241"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}