{"id":431,"date":"2023-05-08T08:00:00","date_gmt":"2023-05-08T07:00:00","guid":{"rendered":"https:\/\/jorgeturiel.es\/?p=431"},"modified":"2023-04-16T22:04:19","modified_gmt":"2023-04-16T21:04:19","slug":"comunicando-lazarus-free-pascal-con-arduino-parte-1","status":"publish","type":"post","link":"https:\/\/jorgeturiel.es\/?p=431","title":{"rendered":"Comunicando Lazarus Free Pascal con Arduino (Parte 1)"},"content":{"rendered":"<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img decoding=\"async\" src=\"https:\/\/teisrobotics.org\/wp-content\/uploads\/2020\/03\/lazarus7-9.png\" alt=\"\" class=\"wp-image-92\"\/><figcaption class=\"wp-element-caption\">Aplicaci\u00f3n LazSerial<\/figcaption><\/figure>\n<\/div>\n\n\n<p><a href=\"https:\/\/www.arduino.cc\/\">Arduino<\/a> es un plataforma de hardware libre, quiz\u00e1s la m\u00e1s conocida dentro del movimiento maker. En otras palabras es un peque\u00f1o microprocesador que registra entradas y salidas, entre otras funcionalidades.<\/p>\n\n\n\n<!--more-->\n\n\n\n<p>Adem\u00e1s permite comunicarse con un PC por medio de su puerto serie.<\/p>\n\n\n\n<p>Lazarus dispone de la capacidad de gestionar puertos serie de una manera sencilla.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Preparando el entorno<\/h2>\n\n\n\n<p>Para hacer uso del puerto serie en Lazarus necesitamos a\u00f1adir un librer\u00eda, o componente. Para ello desde el men\u00fa <em>Paquete<\/em> seleccionamos <em>Administrador de paquetes en l\u00ednea<\/em>.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img decoding=\"async\" src=\"https:\/\/teisrobotics.org\/wp-content\/uploads\/2020\/03\/lazarus7-2.png\" alt=\"\" class=\"wp-image-93\"\/><figcaption class=\"wp-element-caption\">Administrador paquetes<\/figcaption><\/figure>\n<\/div>\n\n\n<p>Por supuesto tienes que tener conexi\u00f3n a internet. En la ventana que se abre, buscamos <em>serial<\/em> para que filtre todos los componentes que se llame as\u00ed.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img decoding=\"async\" src=\"https:\/\/teisrobotics.org\/wp-content\/uploads\/2020\/03\/lazarus7-3.png\" alt=\"\" class=\"wp-image-94\"\/><figcaption class=\"wp-element-caption\">Instalar serial <\/figcaption><\/figure>\n<\/div>\n\n\n<p>Pulsamos sobre instalar. Para que el componente est\u00e9 disponible es necesario compilarlo e instalarlo. Para ello es necesario reconstruir Lazarus.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img decoding=\"async\" src=\"https:\/\/teisrobotics.org\/wp-content\/uploads\/2020\/03\/lazarus7-5.png\" alt=\"\" class=\"wp-image-95\"\/><figcaption class=\"wp-element-caption\">Reconstruir Lazarus<\/figcaption><\/figure>\n<\/div>\n\n\n<p>Si todo fue bien, Lazarus se cerrar\u00e1 y se volver\u00e1 a abrir. Y ya tendremos nuestro componente listo para usar. En este caso se instal\u00f3 en la paleta <em>LazSerial<\/em>.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img decoding=\"async\" src=\"https:\/\/teisrobotics.org\/wp-content\/uploads\/2020\/03\/lazarus7-6.png\" alt=\"\" class=\"wp-image-96\"\/><figcaption class=\"wp-element-caption\">Componente LazSerial<\/figcaption><\/figure>\n<\/div>\n\n\n<h2 class=\"wp-block-heading\">Creando la aplicaci\u00f3n<\/h2>\n\n\n\n<p>Para comunicar con nuestro Arduino, vamos a poner una serie de componentes. Creamos una aplicaci\u00f3n nueva. A\u00f1ade un componente <em>TPanel<\/em>, y al\u00ednealo a la parte de arriba y borra el texto de su propiedad `Caption`.<\/p>\n\n\n\n<p>A\u00f1ade dos botones sobre el componente <em>TPanel<\/em>. Uno ser\u00e1 para conectar y otro para configurar el puerto serie.<\/p>\n\n\n\n<p>A\u00f1ade un componente <em>TMemo<\/em>, pon su propiedad <em>ScrollBars<\/em> con el valor <em>ssAuthoBoth<\/em>  y al\u00ednealo al cliente.<\/p>\n\n\n\n<p>Y no te olvides de a\u00f1adir el componente <em>LazSerial<\/em>. La aplicaci\u00f3n deber\u00eda quedar algo as\u00ed:<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img decoding=\"async\" src=\"https:\/\/teisrobotics.org\/wp-content\/uploads\/2020\/03\/lazarus7-7.png\" alt=\"\" class=\"wp-image-97\"\/><figcaption class=\"wp-element-caption\">Vista de la aplicaci\u00f3n <\/figcaption><\/figure>\n<\/div>\n\n\n<p>La comunicaci\u00f3n serie, se realiza por medio un puerto, y a una velocidad determinada. Esta informaci\u00f3n debe coincidir con el el nombre el puerto serie al que est\u00e1 conectado nuestro Arduino y con la velocidad que hemos programado en nuestro Arduino.<\/p>\n\n\n\n<p>Luis Llamas tiene en su Blog un excelente <a href=\"https:\/\/www.luisllamas.es\/arduino-puerto-serie\/\">art\u00edculo<\/a> sobre la comunicaci\u00f3n serie en Arduino.<\/p>\n\n\n\n<p>Para indicar a nuestro componente <em>Lazserial<\/em> como se debe comunicar, usaremos el evento Onclick del bot\u00f3n de configurar. Cuando se ejecute este evento, ejecutaremos el siguiente c\u00f3digo:<\/p>\n\n\n\n<div class=\"wp-block-urvanov-syntax-highlighter-code-block\"><pre class=\"lang:delphi decode:true \">procedure TLazSerialFrm.btConfigurarClick(Sender: TObject);\nbegin\n  LazSerial1.ShowSetupDialog;\nend;\n{% endcodeblock %}\nAhora en el evento `OnClick` del bot\u00f3n conectar escribiremos la orden de activaci\u00f3n.\n{% codeblock lang:pascal %}\nprocedure TLazSerialFrm.btConectarClick(Sender: TObject);\nbegin\n  LazSerial1.Active := True;\nend;  <\/pre><\/div>\n\n\n\n<pre class=\"wp-block-code\"><code><pre class=\"wp-block-syntaxhighlighter-code\"><\/pre><pre class=\"wp-block-syntaxhighlighter-code\"><\/pre><\/code><\/pre>\n\n\n\n<p>Bien ahora solo queda que cuando se reciban datos, escribirlos en el componente <em>TMemo<\/em>. Para ello usaremos el evento <em>RxData<\/em> del componente <em>LazSerial<\/em>.<\/p>\n\n\n\n<pre class=\"wp-block-syntaxhighlighter-code\">procedure TLazSerialFrm.LazSerial1RxData(Sender: TObject);\nbegin\n  Memo1.Lines.Add(LazSerial1.ReadData);\nend;<\/pre>\n\n\n\n<p>Antes de probar la aplicaci\u00f3n, vamos a escribir un simple programa en un Arduino.<\/p>\n\n\n\n<div class=\"wp-block-urvanov-syntax-highlighter-code-block\"><pre class=\"lang:c decode:true \">int led = 13;\nvoid setup() {\n  Serial.begin(9600);\n  pinMode (led,OUTPUT);\n}\nvoid loop() {\n  digitalWrite (led,HIGH);\n  Serial.println (\"ON\");\n  delay(1500);\n  digitalWrite(led,LOW);\n  Serial.println(\"OFF\");\n  delay(1500);\n}<\/pre><\/div>\n\n\n\n<p>Este simple programa enciende el <em>LED<\/em> del Pin 13, env\u00eda por el puerto serie la palabra <em>ON<\/em>, espera un segundo y medio, luego apaga el <em>LED<\/em>, env\u00eda por el puerto serie la palabra <em>OFF<\/em>, y espera un segundo y medio.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Probando la comunicaci\u00f3n<\/h2>\n\n\n\n<p>Ejecuta la aplicaci\u00f3n que has creado en Lazarus, y pulsa sobre el bot\u00f3n configurar. Y selecciona el puerto serie y la velocidad. El puerto depender\u00e1 de tu PC, y la velocidad es 9600 baudios, ya que es la hemos configurado en el programa del Arduino.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img decoding=\"async\" src=\"https:\/\/teisrobotics.org\/wp-content\/uploads\/2020\/03\/lazarus7-8.png\" alt=\"\" class=\"wp-image-99\"\/><figcaption class=\"wp-element-caption\">Configurando la comunicaci\u00f3n<\/figcaption><\/figure>\n<\/div>\n\n\n<p>Ahora pulsa conectar y empezaras a recibirlos la informaci\u00f3n que env\u00eda Arduino.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img decoding=\"async\" src=\"https:\/\/teisrobotics.org\/wp-content\/uploads\/2020\/03\/lazarus7-9-1.png\" alt=\"\" class=\"wp-image-100\"\/><figcaption class=\"wp-element-caption\">Funcionando nuestra aplicaci\u00f3n<\/figcaption><\/figure>\n<\/div>\n\n\n<p>Con esto ya podemos recibir la informaci\u00f3n que env\u00eda Arduino por el puerto serie.<\/p>\n\n\n\n<p>En la pr\u00f3xima entrada veremos como enviar informaci\u00f3n a nuestra placa Arduino.<\/p>\n\n\n\n<p>Saludos<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Arduino es un plataforma de hardware libre, quiz\u00e1s la m\u00e1s conocida dentro del movimiento maker. En otras palabras es un peque\u00f1o microprocesador que registra entradas y salidas, entre otras funcionalidades.<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[44,27,41,1],"tags":[45,47,23,46],"class_list":["post-431","post","type-post","status-publish","format-standard","hentry","category-arduino","category-lazarus","category-microcontroladores","category-sin-categoria","tag-arduino","tag-comunicacion","tag-lazarus","tag-microcontroladores"],"_links":{"self":[{"href":"https:\/\/jorgeturiel.es\/index.php?rest_route=\/wp\/v2\/posts\/431","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/jorgeturiel.es\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/jorgeturiel.es\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/jorgeturiel.es\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/jorgeturiel.es\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=431"}],"version-history":[{"count":2,"href":"https:\/\/jorgeturiel.es\/index.php?rest_route=\/wp\/v2\/posts\/431\/revisions"}],"predecessor-version":[{"id":435,"href":"https:\/\/jorgeturiel.es\/index.php?rest_route=\/wp\/v2\/posts\/431\/revisions\/435"}],"wp:attachment":[{"href":"https:\/\/jorgeturiel.es\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=431"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/jorgeturiel.es\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=431"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/jorgeturiel.es\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=431"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}