{"id":10,"date":"2011-10-01T19:28:15","date_gmt":"2011-10-01T19:28:15","guid":{"rendered":"http:\/\/localhost\/~pepegol\/WordPress\/?p=10"},"modified":"2020-03-29T01:55:40","modified_gmt":"2020-03-29T00:55:40","slug":"aprendiendo-a-programar","status":"publish","type":"post","link":"https:\/\/pepechorva.com\/myblog\/aprendiendo-a-programar\/","title":{"rendered":"Aprendiendo a programar"},"content":{"rendered":"<p>Saberse las funciones y\/o comandos de un lenguaje no es saber programar, es saber utilizar un lenguaje. Es como saberse el diccionario de ingl\u00e9s y no saber decir una frase, nos falta lo m\u00e1s importante, la gram\u00e1tica.<br \/>\nEn este post intentar\u00e9 explicar de forma sencilla como programar (no s\u00f3lo en Arduino, el m\u00e9todo vale para todos los lenguajes&#8230; o casi).<\/p>\n<div><!--more--><\/div>\n<p>B\u00e1sicamente, la programaci\u00f3n consiste en dar una serie de pasos al ordenador para que \u00e9ste los ejecute, de ah\u00ed la frase \u00abEl ordenador hace lo que le dices que haga y, en ocasiones, lo que quieres que haga\u00bb.<\/p>\n<p>\u00bfComo le doy los pasos? Bueno, a los pasos, los inform\u00e1ticos nos gusta llamarlos algoritmos \ud83d\ude42<br \/>\nLos algoritmos, funciones, procedimientos&#8230; todo esto nos suena a matem\u00e1ticas, es cierto, la programaci\u00f3n tiene un 90% de componente matem\u00e1tica&#8230; pero un 10% de componente art\u00edstico, que viene a ser el sello personal de cada programador.<\/p>\n<p>Vamos a poner un ejemplo de algoritmo;<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"null\">Ingredientes\n3 cebollas\naceite\n1 pizca de sal\nreceta\nPonemos el aceite a calentar en una sart\u00e9n.\nCortamos las cebollas.\nSi el aceite est\u00e1 caliente a\u00f1adimos la cebolla \na\u00f1adimos sal y lo dejamos cocinar a fuego lento durante 5 minutos.\n<\/pre>\n<p>No, no se me ha ido la olla, es una receta, s\u00ed \ud83d\ude42 a las recetas, las podemos llamar perfectamente \u00abalgoritmos\u00bb ya que un algoritmos es, ni m\u00e1s ni menos, una serie de instrucciones.<\/p>\n<p>\u00bfTe parece una comparaci\u00f3n est\u00fapida? Vamos a ver\u2026<br \/>\nEn programaci\u00f3n, se usan variables que tienen un tipo definido, en nuestro caso, las variables son Cebollas, aceite y sal.<br \/>\n\u00bfQu\u00e9 tipo definido tienen cada una?\u00bfQu\u00e9 tienen que ver las cebollas con las matem\u00e1ticas?<br \/>\nVamos por partes, las variables en programaci\u00f3n son ni m\u00e1s ni menos que un lugar en la memoria de un ordenador. Son variables porque en cualquier momento, puedes \u00abvariar\u00bb su valor, aunque no su tipo (tipo entero, tipo real&#8230; ). En nuestro caso, usamos 3 variables que definir\u00edamos as\u00ed:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"null\">int cebollas =  3; \/\/usaremos 3 cebollas enteras, no me valen medias cebollas\nfloat aceite = 0,25; \/\/no podemos usar un aceite, tomamos la cantidad bas\u00e1ndonos en el S.I. y usaremos 1\/4 de litro (0,25l)\nfloat sal; \/\/\u00bfcuanta sal necesitaremos?\u00bfcuanto es una pizca? A veces este valor no podemos saber su cantidad exacta, por lo que se averiguar\u00e1 dentro del programa.\n<\/pre>\n<p>Tenemos definidos los componentes que vamos a usar, pero&#8230; \u00bfcomo los hemos de usar? Aqu\u00ed entra en juego la recet&#8230; eeeh&#8230; el algoritmo:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"null\">receta:\nPonemos el aceite a calentar en una sart\u00e9n.\nCortamos las cebollas.\nSi el aceite est\u00e1 caliente, a\u00f1adimos la cebolla, a\u00f1adimos sal y lo dejamos cocinar a fuego lento durante 5 minutos.\n<\/pre>\n<p>Esto es muy abstracto, hay que definir mejor las cosas, tengamos en cuenta lo dicho de los computadores, yo le voy a decir lo que tiene que hacer, no lo que quiero que haga. As\u00ed pues, habr\u00e1 que aproximar los dos extremos lo m\u00e1s posible.<\/p>\n<p>Concretemos m\u00e1s la receta:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"null\">Ponemos el aceite a calentar en una sart\u00e9n. \/\/a veces, hay instrucciones que no hace falta definirlas m\u00e1s\n\nCortamos las cebollas. \/\/\u00bfCuanto?\u00bfun corte a cada cebolla? mejor as\u00ed\n-Cortamos las cebollas en pedacitos peque\u00f1os.\n\nSi el aceite est\u00e1 caliente, a\u00f1adimos la cebolla, a\u00f1adimos sal y lo dejamos cocinar a fuego lento durante 5 minutos.\n\/\/\u00bfY si el aceite no est\u00e1 todav\u00eda caliente?\n-Esperamos a que el aceite est\u00e9 caliente. \/\/ok, \u00bfy ahora?\nechamos la cebolla y a\u00f1adimos sal\n\/\/\u00bfcuanta sal?\u00bfmedio kilo?\u00bfY luego quien se come la cebolla?\nEchamos la cebolla y lo probamos.\nmientras no est\u00e1 al punto de sal, echamos una cucharadita de sal y probamos\n\/\/las m\u00e1quinas son est\u00fapidas, \u00bfy si echamos la sal en el centro y probamos su sabor en el borde?\nEchamos la cebolla y lo probamos.\n-mientras no est\u00e1 al punto de sal, echamos una cucharadita de sal, removemos la cebolla y probamos. \/\/mejor as\u00ed, \u00bfno crees?\n-Lo dejamos cocinar a fuego lento durante 5 minutos \/\/podr\u00edamos complicarlo m\u00e1s, pero lo dejamos aqu\u00ed<\/pre>\n<p>Ahora vamos con un problema de programaci\u00f3n y dejamos estar de cocina, que si no, nos entrar\u00e1 hambre \ud83d\ude42<\/p>\n<p>Queremos hacer un term\u00f3metro que, seg\u00fan la temperatura, var\u00ede el \u00e1ngulo de un brazo movido por un servo.<br \/>\nDisponemos de:<br \/>\n1 sensor de temperatura LM335<br \/>\n1 servo<br \/>\n1 arduino<\/p>\n<p>Estos elementos, para el programa no son importantes. Bueno, s\u00ed pero no, el servo y el sensor hacen su papel en este caso, pero si no metemos un algoritmo que los controle, tenemos trastos caros que no usamos para nada.<\/p>\n<p>Vamos a suponer que est\u00e1 todo cableado y calibrado, y pasamos directamente al programa, este es el montaje del term\u00f3metro:<br \/>\n<img fetchpriority=\"high\" decoding=\"async\" class=\"alignnone size-medium wp-image-342 aligncenter\" src=\"http:\/\/pepechorva.com\/myblog\/wp-content\/uploads\/2011\/10\/termometroservo_bb-300x186.png\" alt=\"\" width=\"300\" height=\"186\" srcset=\"https:\/\/pepechorva.com\/myblog\/wp-content\/uploads\/2011\/10\/termometroservo_bb-300x186.png 300w, https:\/\/pepechorva.com\/myblog\/wp-content\/uploads\/2011\/10\/termometroservo_bb-768x477.png 768w, https:\/\/pepechorva.com\/myblog\/wp-content\/uploads\/2011\/10\/termometroservo_bb-1024x636.png 1024w, https:\/\/pepechorva.com\/myblog\/wp-content\/uploads\/2011\/10\/termometroservo_bb-825x510.png 825w, https:\/\/pepechorva.com\/myblog\/wp-content\/uploads\/2011\/10\/termometroservo_bb.png 1188w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"cpp\">\/\/este programa est\u00e1 basado en el ejemplo Knob del IDE Arduino\n\/\/vamos a verlo como si fuera la receta:\n\/\/ingredientes:\n#include&nbsp; \"Servo.h\" \/\/librerias que vamos a utilizar\n\nServo miServo; \/\/aqu\u00ed definimos una variablede un objeto (de momento no liemos m\u00e1s el asunto, digamos que es un tipo de variable con propiedades), en este caso es un servo\nint temperatura; \/\/es tipo int porque la vamos a leer a trav\u00e9s del conversor A\/D\nint sensor = 0; \/\/conectaremos el sensor LM335 al pin analogico 0\n\nvoid setup() \/\/esto equivaldr\u00eda a poner el aceite a calentar, necesitamos definir ciertas cosas\n{\nmiServo.attach(9); \/\/vamos a conectar el servo al pin 9 del arduino\n}\n\nvoid loop() \/\/receta:\n{\ntemperatura = analogRead(sensor); \/\/hacemos la lectura del valor del sensor\ntemperature = map(val, 0, 1023, 0, 179); cambiamos el valor del conversor a grados para el servo\nmiServo.write(temperatura); \/\/le decimos al servo cuanto tiene que girar (para indicar la temperatura\ndelay(15); \/\/esperamos un poco para volver a empezar (desde el loop)\n}<\/pre>\n<p>Consejos para programar:<br \/>\n-Empieza poco a poco, no quieras hacer un robot dominador del mundo sin saber utilizar un servo, por ejemplo.<br \/>\n-No uses nombres aleatorios para las variables, si al sensor lo llamas s1 y al servo s2, imagina juntar 6 sensores y 6 servos, un jaleo, mejor usar nombres descriptivos, como no puedes poner nombres separados con espacios, usa may\u00fasculas en las palabras (miservo, sensorTemperatura).<br \/>\n-No tengas miedo a preguntar en foros, pero no pretendas que e resuelvan todo, la idea es tuya, as\u00ed que hazla tu.<br \/>\n-Busca ejemplos parecidos y reutiliza c\u00f3digo, a veces quieres hacer algo complejo y otros lo han resuelto de forma sencilla.<br \/>\n-Comenta el c\u00f3digo como si lo tuviera que leer tu hermanito\/hijo de 6 a\u00f1os, dentro de unos meses, al volver a leer el c\u00f3digo, lo agradecer\u00e1s.<\/p>\n<p>En este tutorial no pretendo ense\u00f1ar a hacer un term\u00f3metro, sino a ayudar a pensar en c\u00f3mo crear el programa que lo controle.<br \/>\nNo pretendo ser una ayuda a inform\u00e1ticos y\/o electr\u00f3nicos, esos ya saben programar y, de hecho, me dir\u00e1n que este tuto es una basura porque me dejo muchas cosas. Considero que para alguien que no tiene conocimientos de programaci\u00f3n, como una introducci\u00f3n a ella es m\u00e1s que suficiente.<br \/>\nTambi\u00e9n te dejo a t\u00ed, si est\u00e1s interesado en ello, que busques informaci\u00f3n en www.arduino.cc sobre las funciones, comandos y objetos que implementa Arduino.<\/p>\n<p>Este tutorial lleva una dedicatoria especial, a Gloria Martinez Vidal (Glo), profesora de la UJI y una gran amiga, fallecida en 2009. He tomado el ejemplo de pochar cebollas de una de sus clases como introducci\u00f3n.<br \/>\nTambi\u00e9n he de agradecer a Pablo, chico que conoc\u00ed en la OSHWCon 2011 que fue el que me pregunt\u00f3 c\u00f3mo programar (no es electr\u00f3nico ni inform\u00e1tico, o sea, de programar 0) y le estuve explicando con este mismo ejemplo. Gracias a ello, me he decidido a sacar este tutorial.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Saberse las funciones y\/o comandos de un lenguaje no es saber programar, es saber utilizar un lenguaje. Es como saberse el diccionario de ingl\u00e9s y no saber decir una frase, nos falta lo m\u00e1s importante, la gram\u00e1tica.<br \/>En este post intentar\u00e9 explicar de forma sencilla como programar (no s\u00f3lo en Arduino, el m\u00e9todo vale para todos los lenguajes&#8230; o casi).<\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[18],"tags":[26,34],"class_list":["post-10","post","type-post","status-publish","format-standard","hentry","category-cat-codigoc","tag-arduino","tag-s5-codigo"],"_links":{"self":[{"href":"https:\/\/pepechorva.com\/myblog\/wp-json\/wp\/v2\/posts\/10","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/pepechorva.com\/myblog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/pepechorva.com\/myblog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/pepechorva.com\/myblog\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/pepechorva.com\/myblog\/wp-json\/wp\/v2\/comments?post=10"}],"version-history":[{"count":5,"href":"https:\/\/pepechorva.com\/myblog\/wp-json\/wp\/v2\/posts\/10\/revisions"}],"predecessor-version":[{"id":403,"href":"https:\/\/pepechorva.com\/myblog\/wp-json\/wp\/v2\/posts\/10\/revisions\/403"}],"wp:attachment":[{"href":"https:\/\/pepechorva.com\/myblog\/wp-json\/wp\/v2\/media?parent=10"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/pepechorva.com\/myblog\/wp-json\/wp\/v2\/categories?post=10"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/pepechorva.com\/myblog\/wp-json\/wp\/v2\/tags?post=10"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}