57
Arduino transcrita ¿Qué son las señales digitales y las señales analógicas? Podemos clasificar las señales eléctricas (ya sean voltajes o intensidades) de varias maneras según sus características físicas. Unas de las clasificaciones posibles es distinguir entre señales digitales y señales analógicas. Las señales digitales son aquellas que solo tiene un numero finito de valores posibles (lo que se suele llamar tener valores discretos) y las señales analógicas son aquellas que tienen infinitos valores posibles dentro de un rango determinado (lo que se suele llamar, tener valores continuos). La mayoría de las magnitudes físicas (temperatura, sonido, luz) son analógicas, así como también las señales eléctricas (voltaje, corriente, potencia) porque todas ellas, de forma natural, pueden sufrir variaciones continuas sin saltos. ¿Qué son las señales periódicas y las señales aperiódicas? Llamamos a señales periódicas a aquellas que se repite tras un cierto periodo de tiempo (T) y señal aperiódica es aquella que no se repite. En el caso de las primeras (las más interesantes

Arduino Transcrita

Embed Size (px)

Citation preview

Arduino transcrita Qu son las seales digitales y las seales analgicas?Podemos clasificar las seales elctricas (ya sean voltajes o intensidades) de varias maneras segn sus caractersticas fsicas. Unas de las clasificaciones posibles es distinguir entre seales digitales y seales analgicas.Las seales digitales son aquellas que solo tiene un numero finito de valores posibles (lo que se suele llamar tener valores discretos) y las seales analgicas son aquellas que tienen infinitos valores posibles dentro de un rango determinado (lo que se suele llamar, tener valores continuos). La mayora de las magnitudes fsicas (temperatura, sonido, luz) son analgicas, as como tambin las seales elctricas (voltaje, corriente, potencia) porque todas ellas, de forma natural, pueden sufrir variaciones continuas sin saltos.

Qu son las seales peridicas y las seales aperidicas?Llamamos a seales peridicas a aquellas que se repite tras un cierto periodo de tiempo (T) y seal aperidica es aquella que no se repite. En el caso de las primeras (las ms interesantes con diferencias) dependiendo de cmo vari la seal a lo largo del tiempo, esta puede tener una forma concreta (senoidal-es decir, que sigue el dibujo de la funcin seno-, cuadrada, triangular).

Qu es un sistema electrnico?Un sistema electrnico es un conjunto de: sensores, circuitera de procesamiento y control, actuadores y fuente de alimentacin. Los sensores obtienen informacin del mundo fsico externo y la transforman en una seal elctrica que puede ser manipulada por la circuitera interna de control. Existen sensores de todo tipo, de temperatura, de humedad, de movimiento, de sonido (micrfonos), etc.Los circuitos internos de un sistema electrnico procesan la seal elctrica convenientemente. La manipulan dependiendo tanto del diseo de los diferentes componentes hardware del sistema, como del conjunto lgico de instrucciones. Los actuadores transforman la seal elctrica acabada de procesar por la circuitera interna en energa que acta directamente sobre el mundo fsico externo, un ejemplo de actuadores es un motor (energa mecnica)

Qu es un microcontrolador?Un microcontrolador es un dispositivo electrnico que integra en un solo encapsulado un gran nmero de componentes que tienen las caractersticas de ser programables. Es decir, que es capaz de ejecutar de forma autnoma una serie de instrucciones previamente definidas. El diagrama anterior, representativo de un sistema electrnico, el microcontrolador sera el componente principal de la circuitera de procesamiento y control CPU (unidad central de proceso): es la parte encargada de ejecutar cada instruccin y de controlar que dicha ejecucin se realice correctamente. Normalmente, estas instrucciones hacen uso de datos disponibles previamente (los datos de entrada), y generan como resultado otros datos diferentes (los datos de salida), que podrn ser utilizados o no por la siguiente instruccin.Memorias Diferentes tipos de memorias: son en general las encargadas de alojar tanto las instrucciones como los diferentes datos que estas necesitan. De esta manera posibilitan que toda esta informacin (instrucciones y datos) est, siempre disponible para que la CPU pueda acceder y trabajar con ella en cualquier momento. Generalmente encontramos dos tipos de memorias, las que su contenido se almacena de forma permanente incluso tras cortes de alimentacin elctrica (llamadas persistentes), y las que su contenido se pierde al dejar de recibir alimentacin (llamadas voltiles).Segn las caractersticas de la informacin a guardar, esta se grabara en un tipo u otro de memoria de forma automtica, habitualmente Diferentes pastillas de E/S (entrada/salidas): son las encargadas de comunicar el microcontrolador con el exterior. En las pastillas de entrada del microcontrolador podremos conectar sensores para que este pueda recibir datos provenientes de su entorno, y en sus pastillas de salidas podremos conectar actuadores para que el microcontrolador pueda enviarles rdenes y as interactuar con el medio fsico. De todas formas, muchas pastillas de la mayora de microcontroladores no son exclusivamente de entrada o de salida, sino que pueden ser utilizados indistintamente para ambos propsitos (de ah el nombre de E/S)Qu es Arduino?Una placa hardware libre que incorpora un microcontrolador reprogramable y una serie de pines hembra(los cuales estn unidos internamente a las pastillas de E/S del microcontrolador) que permite conectar all de forma muy sencilla y cmoda diferente sensores actuadores Cuando hablamos de placa hardware nos estamos refiriendo en concreto a una PCB (del ingls printed circuit board, o sea, placa de circuito impreso). Las PCBs son superficies fabricadas de un material no conductor (normalmente resinas de fibra de vidrio reforzada, cermica o plstica) sobre las cuales aparecen pegadas pistas de material conductor (normalmente cobre). Las PCBs se utilizan para conectar elctricamente, a travs de los caminos conductores, diferentes componente electrnicos soldados a ella. Una PCB es la forma ms compacta y estable de construir un circuito electrnico (en contraposicin a una breadboard perfboard o similar) pero, al contrario que estas, una vez fabricada, su diseo es bastante difcil de modificar. As pues, la placa Arduino no es ms que una PCB que implementa un determinado diseo de circuitera interna. No obstante, cuando hablamos de placa Arduino, deberemos especificar el modelo concreto, ya que existen varias placas Arduino oficiales, cada una con diferente caracterstica. Conviene conocer esta caracterstica. Conviene conocer estas caractersticas para identificar qu placa Arduino es la que nos convendr ms en cada proyecto.La plataforma Arduino cuenta con un software que debemos instalar en nuestro ordenador y que nos permite escribir, verificar y guardar (cargar) en la memoria del microcontrolador de la placa Arduino el conjunto de instrucciones que deseamos que este empiece a ejecutar.Los proyectos Arduino pueden ser autnomo o no. Cuando los proyectos son autnomos la placa no necesita estar conectada a ningn computador y puede funcionar autnomamente si dispone de alguna fuente de alimentacin. En el caso de no ser autnomo la placa debe estar conectada de alguna forma permanente a un computador ejecutando algn tipo de software especfico que permite la comunicacin y el intercambio de datos entre el software y la placa. Este software especfico lo debemos programar generalmente nosotros mismo mediante algn lenguaje de programacin estndar como Python, C, Java, Php, y este lenguaje ser independiente completamente del entorno de desarrollo Arduino, una vez que la placa ha sido programada y est en funcionamiento. Pero hay que aclarar que lenguaje Arduino se basa internamente en cdigo C/C+ +.Que quiere decir que Arduino sea un software libreSegn la Free Software foundation organizacin encargada de fomentar el uso y desarrollo del software libre a nivel mundial, un software para ser considerado libre ha de ofrecer a cualquier persona u organizacin cuatro libertades bsicas e imprescindibles:Libertad 0: La libertad de usar el programa con cualquier propsito y en cualquier sistema informtico.Libertad 1: La libertad de estudiar cmo funciona internamente el programa, y adaptarlo a las necesidades particulares. El acceso al cdigo fuente es un requisito previo para esto.Libertad 2: La libertad de distribuir copias Libertad 3: La libertad de mejorar el programa y hacer pblica las mejoras a los dems, de modo que toda la comunidad se beneficie.El modelo del microcontrolador El microcontrolador que lleva la placa Arduino uno es el modelo ATmega328P de la marca Atmel. La Pdel final significa que este chip incorpora la tecnologa Picopawer (propietaria de Atmel), la cual permite un consumo elctrico sensiblemente menor comparndolo con el modelo equivalente sin Picopawer. De todas formas, aunque el Atmega328P pueda trabajar a un voltaje menor y consumir menos corriente que el Atmega328 (especialmente en los modos de hibernacin), ambos modelos son funcionalmente idnticos.Para conocer bien la estructura del microcontrolador es necesario conocer la disposicin concreta de las pastillas (llamadas tambin pines) de entrada/salida del microcontrolador, ya que, aunque hemos dicho anteriormente que en general todos los pines de E/S sirven para comunicar el microcontrolador con el mundo exterior, es cierto que cada pin suele tener una determinada funcin especfica. Como cada modelo de microcontrolador tiene un nmero y ubicacin de pines diferente, en nuestro caso concreto debemos tener a mano la disposicin de pines del Atmega328P. La figura siguiente muestra esta disposicin en el encapsulado de tipo DIP.

Las memorias del microcontrolador Otra cosa que hay que saber de los microcontroladores son los tipos y cantidades de memoria que alojan en su interior. En el caso del ATmega328P tenemos:Memoria flash: memoria persistente donde se almacena permanentemente el programa que ejecuta el microcontrolador (hasta una nueva reescritura si se da el caso). En el caso de ATmega328P tiene una capacidad de 32KB.Memoria SRAM: memoria voltil donde se alojan los datos que en ese instante el programa necesita crear o manipular para su correcto funcionamiento. Estos datos suelen tener un contenido variable a lo largo del tiempo de ejecucin del programa y cada uno es de un tipo concreto(es decir, un dato puede contener un valor numrico entero, otro un nmero decimal, otro un valor tipo carcter tambin pueden ser cadenas de textos fijas u otros tipos de datos ms especiales). Independientemente del tipo de dato, si valor siempre ser eliminado cuando se deje de alimentar elctricamente al microcontrolador. En el caso del ATmega328P esta memoria tiene una capacidad de 2KBMemoria EEPROM : memoria persistente donde se almacenan datos que se desea que permanezcan grabados una vez apagado el microcontrolador para poderlos usar posteriormente en siguientes reinicios. En el caso del ATmega328P esta memoria tiene una capacidad de 1KB, por lo que se puede entender como una tabla de 1024 posiciones de un byte cada una.Registros del microcontroladorLos registros son espacios de memoria existentes dentro de la propia CPU de un microcontrolador. Son muy importantes porque tienen varias funciones imprescindibles:Sirven para albergar los datos (cargados previamente desde la memoria SRAM o EEPROM) necesario para la ejecucin de las instrucciones previstas prximamente (y as tenerlos perfectamente disponibles en el momento adecuado); sirven tambin para almacenar temporalmente los resultados de las instrucciones recientemente ejecutadas (por si se necesitan algn instante posterior) y sirven adems para alojar las propias instrucciones que en ese mismo momento estn ejecutndose.Su tamao es muy reducido: tan solo tienen capacidad para almacenar unos pocos bits cada uno. Pero este factor es una de las caractersticas ms importantes de cualquier microcontrolador, ya que cuanto mayor sea el nmero de bits que quepan en sus registros, mayores sern sus prestaciones, en cuanto al poder de cmputo y velocidad de ejecucin. En efecto, es fcil ver (simplificado mucho) que un microcontrolador con registro el doble de grandes que otro podr procesar el doble de cantidad de datos y por tanto, trabaja el doble de rpido aun funcionando los dos al mismo ritmo. De hecho, es tan importante esta caracterstica que cuando escuchamos que un controlador es de 8 bits o de 32 bits, nos estamos refiriendo precisamente a este dato: al tamao de sus registros.El chip ATmega238P es de 8 bits. De hecho, todos los microcontroladores que incorporan las diferentes placas Arduino son de 8 bits.Los protocolos de comunicacin I2C/TWI y SPICuando se desea transmitir un conjunto de datos desde un componente electrnico a otro, se puede hacer de mltiples formas. Unas de ellas es estableciendo una comunicacin serie; en este tipo de comunicacin la informacin es transmitida bit a bit (uno tras otro) por un nico canal, enviando por tanto un solo bit en cada momento. Otra manera de transferir datos es mediante la llamada comunicacin paralela, en la cual se envan varios bits simultneamente, cada uno por un canal separado y sincronizado con el resto I2C (Inter- Integrated Circuit, tambin conocido con el nombre de TWI- de TWo-wlre (dos cables): es un sistema muy utilizado en la industria principalmente para comunicar circuitos integrados entre s. Su principal caracterstica es que utiliza dos lneas para transmitir la informacin: una (llamada lnea SDA) sirve para transferir los datos entre los (0s y los 1s) y la otra lnea llamada lnea SCL esta sirve para enviar seal de reloj. En realidad tambin se necesitaran dos lneas ms, una para alimentacin y otra para la tierra comn, pero estas ya se presuponen existentes en el circuito.Que es la seal de reloj La seal de reloj se entiende una seal binaria de una frecuencia peridica muy precisa que sirve para coordinar y sincronizar los elementos integrados de una comunicacin (es decir, los emisores y receptores) de forma que todos sepan cuando empiezan, cunto dura, cuando acaba la transferencia de informacin. En hojas tcnicas y diagramas, a la seal de reloj se puede encontrar como CLK (del ingls clock). Cada dispositivo conectado al bus I2C tiene una direccin nica que lo identifica respecto el resto de dispositivos, y puede estar configurado como maestro o como esclavo. Un dispositivo maestro es aquel que inicia la transmisin de datos y adems genera la seal de reloj, pero no es necesario que el maestro sea siempre el mismo dispositivo: esta caracterstica se la pueden ir intercambiando ordenadamente los dispositivos que tengan esa capacidad.SPI (Serial Peripheral Interface): al igual que el sistema I2C, el sistema de comunicacin SPI es un estndar que permite controlar (a cortas distancias) casi cualquier dispositivo electrnico digital que acepte un flujo de bits serie sincronizado(es decir, regulado por un reloj). Igualmente, un dispositivo conectado al bus SPI puede ser maestro o esclavo, donde el primero es el que inicia la transmisin de datos y genera la seal de reloj y el segundo se limita a responder.Gestor de arranque del microcontrolador Ya hemos comentado que adentro de la memoria Flash del microcontrolador incluido en las placas del Arduino viene pregrabado de fbrica un pequeo programa llamado bootlader o gestor de arranque, que resulta imprescindible para un cmodo y fcil manejo de la placa en cuestin. Este software (tambin llamado firmware, porque es un tipo de software que raramente se modifica) ocupa, en la placa Arduino UNO, 512 bytes de espacio en un apartado especial de memoria Flash, el llamado bootloader block pero en otros modelos de placas Arduino puede ocupar ms.La funcin de este firmware es gestionar de forma automtica el proceso de grabacin en la memoria Flash del programa, que queremos que el microcontrolador ejecute. Lgicamente, el bootloader realizar esta grabacin ms all del bootloader block para no sobrescribirse as mismo. El bootloader se encarga de recibir nuestro programa desde el entorno desarrollado por el Arduino (normalmente mediante una transmisin realizada a travs de una conexin USB desde el computador donde se est ejecutando dicho entorno, hasta la placa) para proceder seguidamente a su correcto almacenamiento en la memoria Flash, todo ello de forma automtica y sin que nos tengamos que preocupar de las interioridades electrnicas del proceso. Una vez realizado el proceso de grabacin. El boorloader termina su ejecucin y el microcontrolador se dispone a procesar de inmediato y de forma permanente las instrucciones recientemente grabadas. En la placa Arduino UNO, el bootliader siempre se ejecuta durante el primer segundo de cada reinicio. Durante esos instantes, el gestor de arranque se espera a recibir una serie de instrucciones concretas de parte del entorno de desarrollo para interpretarlas y realizar la correspondiente carga de un posible programa. Si esas instrucciones no llegan pasando ese tiempo, el bootliader termina su ejecucin e igualmente se empieza a procesar lo que haya en ese momento en la memoria Flash.La alimentacin El voltaje de funcionamiento de la placa Arduino (incluyendo el microcontrolador y el resto de los componentes) es de 5V. Podemos obtener esta alimentacin elctrica de varias maneras:Conectando la placa Arduino a una fuente externa: tal como una adaptador AC/DC o una pila, para el primer caso la placa dispones de un zcalo donde se puede enchufar una clavija de 2,1 milmetros de tipo Jack y Para el segundo caso los cables saliente de los bornes de la pila se pueden conectar a los pines-hembras marcados como Vin y Gnd (positivo y negativo) en la zona de la placa marcada con la etiqueta POWER. En ambos casos, la placa est preparada en teora para recibir una alimentacin de 6 a 20 voltios, aunque, realmente, el rango recomendado de voltaje de entrada (teniendo en cuenta el deseo de obtener una cierta estabilidad y seguridad elctricas en los circuitos) es menor: de 7 y 12 voltios. En cualquier caso, este voltaje de entrada ofrecido por la fuente externa siempre es rebajado a los 5V de trabajo mediante un circuito regulador de tensin que ya viene incorporado dentro de la placa.Conexin de la placa Arduino a un computador mediante un cable USB.para la conexin la placa Arduino dispones de un conector USB hembra de tipo B. la alimentacin recibida de esta manera est regulada permanentemente a los 5V de trabajo y ofrece un mximo de hasta 500 mA de corriente ( por lo tanto, la potencia consumida por la placa es en ese caso unos 2.5W). Si en algn momento por el conector USB pasa ms intensidad de la deseable, la placa Arduino est protegida mediante un poli fusible reseteable que automticamente rompe la conexin hasta que la condiciones elctricas vuelvan a la normalidad. Una consecuencia de esta proteccin contra posibles picos de corrientes es que la intensidad de corriente recibida a travs de USB puede no ser suficiente para proyectos que contengan componentes tales como motores, solenoides o matrices de LEDs, los cuales consumen mucha potencia.Si llegamos a utilizar un adaptador AC/DC, se recomienda el uso de uno con las siguientes caractersticas: El voltaje de salida ofrecido tiene que ser de 9 a 12 V DC. En realidad, el circuito regulador que lleva incorporado la placa Arduino es capaz de manejar voltajes de salida ( de entrada para la placa) de hasta 20 V , as que en teora se podran utilizar adaptadores AC/DC que generen una salida de 20 V DC. No obstante, esta no es una buena idea porque se pierde la mayora del voltaje en forma de calor (lo cual es muy ineficiente) y adems puede provocar el sobrecalentamiento del regulador y como consecuencia daar la placa La intensidad de corriente ofrecida debe ser de 250mA o ms. Si conectamos a nuestra placa Arduino muchos o unos pocos pero consumidores componentes, el adaptador debera suministrar al menos 500mA o incluso 1A. De esta manera nos aseguraremos de que tenemos suficiente corriente para que cada componente pueda funcionar de forma fiable.El adaptador debe de ser de polaridad con el positivo en el centro. Esto quiere decir que la parte externa del cilindro metlico que forma la clavija de 5,5/2,1 mm del adaptador tiene que ser del borne negativo y el hueco interior del cilindro ha de ser el borne positivo.Adems dentro de la zona etiquetado como POWER en la placa Arduino existen una serie de pines-hembras relacionados con la alimentacin elctrica como son:GND: pines-hembra conectados a tierra, estos pines son muy importantes que todos los componentes compartan una tierra en comn como referencia. Estos pines-hembra son diseados para cumplir esta funcin.Vin: este pin-hembra se puede utilizar para dos cosas diferentes: la primera es que si la placa est conectada mediante la clavija de 2,1 mm a alguna fuente externa que aporte un voltaje dentro de los mrgenes de seguridad, podemos conectar a este pin hembra cualquier componente electrnico para alimentarlo directamente con el nivel de voltaje que est aportando la fuente en ese momento. Si la placa est alimentada mediante USB, entonces ese pin hembra aportar 5V regulados. En cualquier caso, la intensidad de corriente mxima aportada es de 40 mA (esto hay que tener en cuenta cuando se conecten diferentes dispositivo que consuman mucha corriente) tambin podemos usar el pin hembra Vin para alimentar la propia placa directamente desde alguna fuente de alimentacin externa sin utilizar ni la clavija ni el cable USB. Esto se hace conectndole un borne positivo de la fuente y conectando el borne negativo al pin tierra. Si se usa este montaje, el regulador de tensin que incorpora la placa, reducir el voltaje recibido de la pila al voltaje de trabajo de la placa.5V : este pin hembra se puede utilizar para dos cosas diferentes tanto si la placa est alimentada mediante el cable USB como si est alimentada por una fuente externa que aporte un voltaje dentro de los mrgenes de seguridad, podemos conectar a este pin hembra cualquier componente para que pueda recibir 5V regulados. En cualquier caso, la intensidad de corriente mxima generada ser de 40 mA. Pero tambin podemos usar este pin hembra para alimentar la propia placa desde una fuente de alimentacin externa previamente regulada a 5V sin utilizar el cable USB ni la clavija de 2,1 mm.3,3 V: este pin hembra ofrece un voltaje de 3,3 voltios. Este voltaje se obtiene a partir del recibido indistintamente a travs del cable USB o de la clavija de 2.1 mm, y est regulado (con un margen de error de 1%) por un circuito especifico incorporado en la placa, en este caso particular la corriente mxima generada es de 50 mA. Al igual que con los pines anteriores, podremos usar este pin para alimentar componentes de nuestro circuitos que requieran dicho voltaje, pero en cambio no podremos conectar ninguna fuente externa aqu porque el voltaje es demasiado limitado para poder alimentar la placa.Chip Atmega16U2 La conexin USB de la placa Arduino, adems de servir como alimentacin elctrica, sobre todo es un medio para poder transmitir datos entre nuestro computador y la placa, y viceversa. Este trfico de informacin que se realiza entre ambos aparatos se logra gracias al uso del protocolo USB, un protocolo de tipo serie que tanto nuestro computador como la placa Arduino son capaces de entender y manejar. No obstante, el protocolo USB internamente es demasiado complejo para que el microcontrolador Atmega328P pueda comprenderlo por s mismo sin ayuda, ya que el tan solo puede comunicarse con el exterior mediante protocolos muchos ms sencillos tcnicamente como son el I2C o el SPI. Por lo tanto es necesario que la placa disponga de un elemento traductor, que facilite al Atmega328P la manipulacin de la informacin transferida por USB sin que este tenga que conocer los entresijos de dicho protocolo.Las entradas y salidas digitales La placa Arduino dispone de 14 pines hembras de entradas o salidas digitales (segn lo que convenga), numeradas desde la 0 hasta la 13. Es aqu donde se pueden conectar sensores para que la placa pueda recibir datos del entorno, y donde tambin se pueden conectar actuadores para que la placa pueda enviarles las ordenes pertinentes, adems de poder conectar cualquier otro componente que necesite comunicarse con la placa de alguna manera. A veces a estos pines hembra digitales de propsito general se les llama pines GPIO (General Purpose Input/Output). Todos estos pines hembra digitales funcionan a 5V, pueden proveer o recibir un mximo de 40 mA y disponer de una resistencia pull up interna de entre 20 k y 50k que inicialmente est desconectada. Hay que tener en cuenta, que aunque cada pin individual pueda proporcionar hasta 40 mA como mximo, en realidad la placa agrupa los pines digitales de tal forma que tan solo pueden aportar 100 mA a la vez al conjunto de los pines n 0, 1, 2,3 y 4 y 100 mA al resto de los pines (del 5 al 13). Esto quiere decir que como mucho podramos tener 10 pines ofreciendo 20 mA a la vez.Las entradas analgicas La placa Arduino dispone de 6 entrada analgicas (en forma de pines hembra etiquetados como A0, A1 hasta A5) que pueden recibir voltajes dentro de un rango de valores continuos de entre 0 y 5 V. No obstante, la electrnica de la placa solo puede trabajar con valores digitales, por lo que es necesaria una conversin previa del valor analgico recibido a un valor digital lo ms aproximado posible. Esta se realiza mediante un circuito conversor analgico/digital incorporado en la propia placa. El circuito conversor es de 6 canales (uno por cada entrada) y cada canal dispone de 10 bits (los llamados bits de resolucin) para guardar el valor del voltaje convertido digitalmente.Los pines hembra de entrada analgicos tienen tambin toda la funcionalidad de los pines de entrada-salida digitales. Es decir, que si en algn momento necesitamos ms pines hembra digitales ms all de los 14 que la placa Arduino ofrece(del 0al 13), los 6 pines hembra analgicos pueden ser usados como unos pines hembra digitales (numerndose entonces del 14 al 19) sin ninguna distincin.Las salidas analgicas (PWM)En los proyectos a menudo necesitamos enviar al entorno seales analgicas, por ejemplo, para variar progresivamente la velocidad de un motor, la frecuencia de un sonido emitido por un zumbador o la intensidad con la que luce un LED. No basta con simples seales digitales, tenemos que generar seales que varen continuamente. La placa Arduino no dispones de pines hembra de salida analgica (porque su sistema electrnico interno no es capaz de manejar este tipo de seales), sino que utiliza algunos pines hembras de salida digitales concretos para simular un comportamiento analgico. Los pines hembra digitales que son capaces de trabajar en este modo no son todos, solo son los marcados con la etiqueta PWM. En concreto para el modelo Arduino UNO son los pines nmeros 3, 5, 6, 9 ,10 y 11.Las siglas PWM vienen de Pulse Width Modulation lo que significa modulacin de ancho de pulso. Lo que hace este tipo de seal es emitir, en lugar de una seal continua, una seal cuadrada formada por pulsos de frecuencia constante (aproximadamente de 490 HZ). La gracia est en que al variar la duracin de estos pulsos, estaremos variando proporcionalmente la tensin promedio resultante. Es decir cuanto ms corto sean los pulsos y ms distante entre s en el tiempo, menor ser la tensin promedio de salida, y cuantos ms largos sean los pulsos y ms juntos en el tiempo estn, mayor ser dicha tensin. El caso extremo lo tendramos cuando la duracin del pulso coincidiera con el periodo de la seal, momento en el cual de hecho no habra distancie entre pulso y pulso (sera una seal de un valor constante) y la tensin promedio de salida sera la mxima posible, que son 5 V. la duracin del pulso la podemos cambiar en cualquier momento mientras la seal se est emitiendo, por lo que como consecuencia la tensin promedio puede ir variando a lo largo del tiempo de forma continua. Las siguientes figuras ilustran de mejor manera lo que se acaba de explicar

Otros usos de los pines hembra de la placa Existen determinados pines hembra de entrada/salida digitales, que adems de su funcin estndar, tienen otras funciones especializadas y son los siguientes.Pin 0(RX) y pin 1(TX): permite que el microcontrolador ATmega328P pueda recibir directamente datos en serie (por el pin RX) o transmitirlos (por el pin TX) sin pasar por la conversin USB-Serie que realiza el chip ATmega16U2. Es decir, estos pines posibilitan la comunicacin sin intermediarios de dispositivos externos con la receptor/transmisor serie (de tipo TTL-UART) que incorpora el propio ATmega328P. De todas maneras, estos pines estn internamente conectados (mediante resistencias de 1K) al chipe ATmega16U2, por lo que los datos disponibles en el USB tambin lo estarn en estos pines. Hay que aclarar que en la placa estn incrustados un par de LEDs etiquetados como RX y TX, pero que, a pesar de su nombre, no se encienden cuando se reciben o transmiten datos provenientes de la conexin USB a travs del chip ATmega16U2.Pines 2 y 3: se pueden usar, con la ayuda de programacin del software, para gestionar interrupciones.Pines 10(SS), 11(MOSI), 12(MISO) y 13(SCK): se puede usar para conectar algn dispositivo con el que se quiera llevar a cabo comunicaciones mediante el protocolo SPI. Pin 13: este pin est conectado directamente a un LED incrustado en la placa (identificado con la letra L) de forma que si el valor de voltaje recibido por el pin es ALTO (HIGH), el LED encender, si dicho valor es BAJO (LOW), el LED se apagar. Es una manera sencilla, y rpida de detectar seales de entradas externas sin necesidad de disponer de ningn componente extra.Pines A4 (SDA) y A4 (SCL): se pueden usar para conectar algn dispositivo con el que se quiera llevar a cabo comunicaciones mediante el protocolo I2C/TWI. La placa Arduino ofrece (por una simple cuestin de comodidad y ergonoma) una duplicacin de estos dos pines hembra, los cuales estn sin etiquetar porque no hay ms espacio fsico.Pin AREF: ofrece un voltaje de referencia externo para poder aumentar la precisin de las entradas analgicas.Pin RESET: si el voltaje de este pin se estable a valor BAJO (LOW), el microcontrolador se reiniciar y se pondr en marcha el bootloader. Para realizar esta misma funcin, la placa Arduino ya dispones de un botn, pero este pin ofrece la posibilidad de aadir otro botn de reinicio a placas supletorias(es decir ampliarla y complementarla), las cuales por su colocacin puedan ocultar o bloquear el botn de la placa Arduino.Pin IOREF: en realidad este pin es una duplicacin regulada del pin Vin. Su funcin es indicar a las placas supletorias conectadas a nuestra placa Arduino el voltaje al que trabajan los pines de entrada/salidas de esta, para que las placas supletorias se adapten automticamente a ese voltaje de trabajo Pin sin utilizar: justo el pin de a continuacin de IOREF, ese pin no se usa para nada pero se reserva para un posible uso futuro. El conector ICSP Las siglas ICSP (cuyo significado es In Circuit Serial Programming) se refieren a un mtodo para programar directamente microcontroladores de tipo AVR, PIC y Parallax Propeller que no tienen el boorloader preinstalado. Ya sabemos que la funcin de un bootloader es permitir cargar nuestros programas al microcontrolador conectando a la placa a un computador mediante un cable USB estndar, pero si el micro controlador no tiene grabado ningn bootloader, la escritura de su memoria no se puede realizar de esta forma tan sencilla y debemos utilizar otros mtodos, como el ICSP.El botn de Reset La placa Arduino UNO dispone de un botn de reinicio (Reset) que permite una vez pulsado, enviar una seal LOW al pin RESET de la placa para detener y volver a arrancar el microcontrolador, siempre se activa la ejecucin del bootloader. El botn de reinicio se suele utilizar para permitir la carga de un nuevo programa en la memoria Flash del microcontrolador eliminando el que estuviera grabado anteriormente y su posterior puesta en marcha. En la placa UNO no es necesario prcticamente nunca pulsar el botn Reset antes de cada carga, ya que la placa UNO est diseada de tal manera que permite la activacin del bootloader directamente desde el entorno de desarrollo instalado en nuestro computador.Software Arduino Qu es un IDE?Un programa es un conjunto concreto de instrucciones que pretenden obtener un resultado determinado, mediante instrucciones, ordenadas y agrupadas de forma adecuada y sin ambigedades.Un microcontrolador es programable, ya que permite grabar en su memoria interna de forma repetitiva, hasta que regrabemos el programa de nuevo si es necesario. Si no le introducimos ningn programa en la memoria del microcontrolador, este no sabr que hacer.Las siglas IDE vienen de Entorno de Desarrollo Integrado. Esto es simplemente una forma de llamar al conjunto de herramienta que permite a los programadores poder desarrollar sus propios programas con comodidad. En el caso de la placa Arduino, necesitamos un IDE que nos permita escribir y editar nuestro programa, que lo llamaremos sketch. IDE nos permite comprobar que no hayamos cometido ningn error en la programacin, estando seguro que el sketch este correcto, el IDE graba en la memoria del microcontrolador de la placa Arduino el programa desarrollado. Para desarrollar los sketches debemos instalar en nuestro computador el IDE que nos proporciona el proyecto Arduino. Para ello seguiremos algunos pasos que indicaremos a continuacinInstalacin del IDE Arduino.Para instalar el IDE de Arduino, debemos ir a la pgina web oficial de descarga de Arduino y descargar el archivo comprimido, una vez ejecutado el instalador debemos incorporar los driver necesario para poder reconocer la placa Arduino en el momento que se conecte al computador va USB.MS ALL DEL LENGUAJE ARDUINO: EL LENGUAJE C/C++En prrafos anteriores hemos hablado de la palabra compilacin, pero no hemos explicado su significado. Compilar en este caso significa convertir un cdigo escrito en IDE a un cdigo ejecutable por el microcontrolador, que no es ms que un inmenso conjunto de bits (1s y 0s) conocido como cdigo binario o cdigo mquina. Este cdigo mquina no es ms que un conjunto de impulsos elctricos (1s pasa corriente y 0s no pasa corriente), esto es lo nico que realmente saben procesar el circuito electrnico. Un cdigo binario, resultante de la compilacin de un sketch Arduino podra ser similar a 1001011101010101101Es evidente que es imposible escribir un programa directamente en cdigo mquina, por eso existen los compiladores. Hay que saber que el cdigo mquina vlido para un microcontrolador no ser el mismo para otro microcontrolador, debido a su diferente construccin electrnica interna. Por lo tanto, un mismo programa se tendr que codificar en diferentes cdigos mquinas para diferentes modelos de microcontroladores.La placa Arduino incorpora microcontroladores de arquitectura AVR, es lgico pensar que el compilador incluido en el entorno del programa de Arduino, es uno especfico para generar cdigo binario compatible con este tipo de chips. Sin embargo dicha herramienta llamada (GCC-ARV) no compila cdigo escrito en lenguaje Arduino a cdigo binario AVR, si no que compila cdigo escrito en lenguaje C/C++ a cdigo binario AVR. Porque realmente, el lenguaje Arduino no es un lenguaje estricto, es simplemente un conjunto de instrucciones C y C++ camuflada, diseada para simplificar el desarrollo de programa para microcontroladores AVR.El lenguaje C y C++ son dos de los lenguajes ms importantes y extendidos del mundo por varias razones: porque son lenguajes muy potentes y a la vez ligeros y flexibles, porque poseen un ecosistema amplsimo de libreras que los dotan de funcionalidad que otros lenguajes no ofrecen, porque los programas escritos y compilados en estos lenguajes son tremendamente eficiente y rpido, y porque existen compiladores para prcticamente cualquier tipo de hardware.Tal vez para una persona que se inicia en el mundo de la programacin, los lenguajes C/C++ no son muy amigables. Por eso existen el lenguaje Arduino, para que una persona sin conocimientos de desarrollo de aplicaciones pueda escribir rpidamente un sketch Arduino, sin tener que aprender todo un lenguaje de programacin completo como lo es C/C++.Estructura general de un sketch Un programa diseado para que se ejecute sobre la plataforma Arduino (un sketch) siempre se compone de tres secciones:Declaraciones de variables globales: ubicada directamente al principio del sketch. La seccin llamada void setup (): delimitada por llaves de apertura y cierre.La seccin llamada void loop (): delimitada por llaves de apertura y cierre. La primera seccin del sketch est reservada para escribir, tal como su nombre lo indica, las diferentes declaraciones de variables que necesitemos.En el interior (dentro de sus dos llaves) de las otras dos secciones debemos escribir las instrucciones que deseamos ejecutar en nuestra placa, teniendo en cuenta lo siguiente:Las instrucciones escrita dentro de las seccin void setup () se ejecutan una nica vez, en el momento de encender o resetear la placa Arduino.Las instrucciones escrita dentro de la seccin void loop () se ejecutan (despus de las de seccin anterior) infinitas veces hasta que la placa se apague o se resetee. Es decir se ejecuta desde la primera instruccin hasta la ltima, para seguidamente ejecutar desde la primera hasta la ltima instruccin, as una y otra vez. Por lo tanto las instrucciones escrita en la seccin void setup () normalmente sirve para realizar ciertas pre configuraciones iniciales y las instrucciones del interior de void loop () son, el programas en s que est funcionando continuamente.Sobre las maysculas, tabulaciones y punto y comasConviene aclarar pequeos detalles que deberemos tener en cuenta a la hora de escribir nuestros sketches es necesario que el lenguaje Arduino es muy sensible, ya que es totalmente diferente escribir una letra mayscula que una minscula. Adems las tabulaciones de las instrucciones contenidas dentro de las secciones void setup () y void loop () del sketch. No son en absoluto necesarias para que la compilacin del sketch se produzca con xito. Otro detalle de las instrucciones que todas acaban con un punto y coma. Es indispensable aadir signos para no tener errores de compilacin, ya que el compilador necesita localizarlos para poder detectar el final de cada instruccin escrita Comentarios Es un texto escrito intercalado con el cdigo del sketch que se utiliza para informar sobre cmo funciona ese cdigo a la persona que en algn momento lo est leyendo. Los comentarios son textos de ayuda para los seres humanos que explica el cdigo asociado y ayudan a entenderlo y recordar su funcin, pero estos comentarios son completamente ignorados y desechados por el compilador.Variables Una variable es un elemento de nuestro sketch que guarda un determinado contenido, este contenido es el valor de la variable, este valor de la variable se podr modificar en cualquier momento de la ejecucin del sketch, de ah proviene el nombre de variable. Las variables son muy importantes, ya que todos los sketches hacen uso de ellas para alojar los valores que necesitan para funcionar. El valor de una variable puede obtenerse de diversas maneras, puede ser asignado literalmente pero tambin puede ser un dato de algn sensor o resultado de algn clculo. Declaracin e inicializacin de una variable.Antes de poder empezar a utilizar cualquier variable en nuestro sketch, primero debemos crearla, al crear una variable se le suele llamar declaracin de una variable. En el lenguaje Arduino, cuando se declara una variable es imprescindible especificar su tipo, este tipo de variable la elegiremos segn el tipo de datos que queramos almacenar en nuestra variable (nmeros enteros, nmeros decimales, cadenas de caracteres). Cada variable puede guardar solamente valores de un determinado tipo, por lo que debemos decidir en su declaracin que tipo de variable es la que nos interesa, segn el tipo de datos que queremos almacenar. Opcionalmente, a la vez que se declara la variable, se puede establecer un valor inicial a esto se le llama inicializar una variable. Inicializar una variable, cuando se declara no es obligatorio, pero muy recomendable.Por otro lado, a la hora de declarar las variables, se recomienda nombrar las variables con nombres descriptivos, para hacer el cdigo de nuestro sketch ms legible. Por ejemplo, nombres como sensorDistancia o botnEncendido ayudarn a entender mejor lo que esas variables representan. Para nombrar una variable se puede utilizar cualquier palabra, siempre que esta no sea una palabra reservada del lenguaje Arduino y que no empiece por un dgito.Asignacin de valores a una variable.Las asignaciones de valores a una variable pueden ser muy variadas. Un caso bastante habitual es asignar a una variable un valor que dependa de otra variable. Por ejemplo, si tenemos una variable llamada Y y otraX, podramos escribir . La clave aqu est en entender que el smbolo = no es el de la igualdad matemtica sino el de la asignacin. mbito de una variable Otro concepto importante en relacin con las variables es el de mbito de una variable. Una variable puede ser global o local, que sea de un mbito o de otro depender en qu lugar de nuestro sketch se declare la variable.Variable global: se ha de declarar al principio de nuestro sketch, (antes y fuera) de las secciones void setup y void loop. Una variable global es aquella que puede ser utilizada y manipulada desde cualquier punto de sketch.Variable local: se ha de declarar en el interior de alguna de las secciones de nuestro sketch. Una variable local es aquella que solo puede ser utilizada y manipulada por las instrucciones escrita dentro de las secciones donde se ha declarado. Este tipo de variable es til en sketches largo y complejos para asegurar de que solo una seccin tiene acceso a sus propias variables.Tipos posibles de una variable Los tipos de variables que el lenguaje Arduino admite son:Boolean: se utilizan para almacenar un estado con dos posibles casos, y as hacer que el sketch reaccione segn detecte uno u otro. Las variables de este tipo solo pueden tener dos valores posibles, verdaderos o falsos.Char: el valor que pueda tener una variable de este tipo es siempre un solo carcter (una letra, un digito, un signo de puntuacin). Para asignar un determinado valor explcitamente a una variable de tipo char, debemos tener la precaucin de escribir ese carcter entre comillas simples. Para saber a qu nmero interno corresponde un determinado carcter, y viceversa la placa Arduino utiliza la llamada tabla ASCII, la cual es una simple lista de equivalencias que asocia cada carcter con un nmero determinado. El hecho, para que los caracteres sean reconocidos como numero permite realizar operaciones aritmticas. Ejemplo, si realizamos la operacin A+1 obtendramos el valor 66, ya que la tabla ASCII el valor numrico del carcter A es 65.Byte: el valor que puede tener una variable de este tipo es siempre un nmero entero entre 0 y 255. Estas variables utilizan 8 bits para almacenar su valor, por lo tanto tiene el mismo nmero de combinaciones numricas posibles diferente (256), pero los valores de una variable byte no pueden ser valores negativos.Int: el valor que puede tener una variable de este tipo es un nmero entero entre -32768 y 32767, gracias a que utilizan dos bytes (16bits) de memoria para almacenar.Word: el valor que puede tener este tipo de variables es el mismo que en de tipo Int, pero con la diferencia que los valores no pueden ser negativos.Long: el valor que puede tener una variable de este tipo es un nmero entero entre -2.147.483.648 y 2.147.483.647 esto es posible ya que utilizan 4 bytes (32 bits) de memoria para almacenar.Unsigned long: el valor que puede tener una variable de este tipo son nmeros entero entre 0 y 4.294.967.295. Al igual de los tipos Word estos tipos no pueden tener valores negativos.Float: el valor que puede tener una variable de este tipo es un numero decimal. Los valores float posibles pueden ir desde el nmero hasta debido a su grandsimo rango de valores posibles, los numero decimales son usados frecuentemente para aproximar valores analgicos continuos. No obstante estos valores solo tiene 6 o 7 dgitos en total de precisin y por lo tanto no son exactos y pueden producir resultados inesperados.Double: es muy parecido al de tipo float con la diferencia que este tipo entrega el doble de precisin en comparacin a los de tipo float. Array: un array es una coleccin de variables de un tipo concreto que tienen todo el mismo y un nico nombre, pero que pueden distinguirse entre s por un nmero a modo de ndice. Es decir, en vez de tener diferentes variables (cvarCHAR1,varCHAR2,varCHAR3) podemos tener un nico array que las agrupe todas bajo un mismo nombre (varCHAR) , y que permita que cada variable pueda manipularse por separado gracias a que dentro del array cada una est identificada mediante un numero ndice numrico escrito entre corchetes (varCHAR[0], varCHAR[1],varCHAR[2]). Los array sirven para ganar claridad y simplicidad en el cdigo y adems facilitan la programacin.Podemos declarar un array de las siguientes maneras:Int varInt [6];declarar un array de 6 elementos (es decir, variables individuales) sin inicializar ninguno Int varInt [ ] = {2, 5, 6,7}; declara un array sin especificar el nmero de elementos. No obstante se asignan los valores directamente a los elementos individuales, por lo que el compilador es capaz de deducir el nmero de elementos total del array.Int varInt [8] = {2, 5, 6, 7}; declara un array de 8 elementos e inicializa algunos de ellos, dejando el resto sin inicializar. Lgicamente, si se inicializan ms elementos que lo permite el tamao del array.Cambios de tipo de datos (numricos) No se puede modificar el tipo de una variable, si esta se declar, seguir siendo de ese tipo a lo largo de todo el sketch. Pero lo que s se puede hacer es cambiar en un momento concreto el tipo del valor que contiene. Esto se llama casting, y puede ser til cuando se quiere utilizar ese valor en clculos que requieran un tipo diferente del original.Constantes Es posible declarar una variable de tal forma que consigamos que su valor permanezca siempre inalterado. A este tipo de variables ya no se les llama as por motivos obvios, si no se les llamara contantes. Las contantes se pueden utilizar como cualquier variable de su mismo tipo, pero si se intenta cambiar su valor, el compilador lanzar un error.Parmetros de una instruccin Antes de empezar a aprender y a utilizar las diferentes instrucciones que ofrece el lenguaje Arduino, debemos tener claro un concepto fundamental, los parmetros de una instruccin. En el sketch al final del nombre de cada instruccin utilizada siempre aparecen unos parntesis, estos parntesis pueden estar vacos pero tambin pueden incluir en su interior un numero /letra o palabra, cada uno de estos valores es lo que se le denomina parmetro. Los parmetros sirven para modificar el comportamiento de la instruccin en algn aspecto determinado.Valor de retorno de una instruccin Otro concepto fundamental relacionado con las instrucciones del lenguaje Arduino es el de valor de retorno. Las instrucciones, adems de recibir parmetros de entrada, y aparte de hacer la tarea que tienen que hacer, normalmente tambin devuelven un valor de salida. Un valor de salida es un dato que podemos obtener en nuestro sketch como resulta de la ejecucin de la instruccin. La comunicacin serie con la placa Arduino Ya hemos explicado anteriormente que el microcontrolador ATmega328P dispone de un receptor/transmisor serie de tipo TTL-UART que permite comunicar la placa Arduino UNO con otros dispositivos, para as poder transferir datos entre ambos. El canal fsico de comunicacin en estos casos suele ser el cable USB, pero tambin puede ser los pines digitales 0 (RX) y 1(TX) de la placa. Si se usan estos dos pines para comunicar la placa Arduino con un dispositivo externo, tendremos que conectar el pin TX de la placa con el pin RX del dispositivo, el RX de la placa con el TX del dispositivo y compartir la tierra de la placa con la tierra del dispositivo.Dentro de nuestros sketches podemos hacer uso de este recepto/transmisor TTL-UART para enviar datos al microcontrolador (o recibirlos de l) gracias al elemento del lenguaje Arduino llamado serial. En realidad serial es lo que llamamos un objeto del lenguaje. El concepto de objeto es algo abstracto, pero para entenderlo mejor, simplemente supondremos que son contenedores que agrupan diferentes instrucciones con alguna relacin entre ellas. Por ejemplo, el objeto serial representa por s mismo una comunicacin serie establecida con la placa, y en nuestro sketch podremos hacer uso de un conjunto de instrucciones disponible dentro de l que sirven para manipular dicha comunicacin serie.Las instrucciones existentes dentro de un objeto (no todas las instrucciones del lenguaje Arduino pertenecen a un objeto) se escribe siguiendo la sintaxis nombreObjeto.nombreInstruccion (), a continuacin, explicaremos la sintaxis, funcionamiento y utilidad de las instrucciones incluidas en el objeto serial.Serial.begin (): abre el canal serie para que pueda empezar la comunicacin por l. Por tanto, su ejecucin es imprescindible antes de realizar cualquier transmisin por dicho canal. Por eso normalmente se suele escribir dentro de la seccin void setup. Adems mediante su nico parmetro, especifica la velocidad en bits/s a la que se producir la transferencia serie de los datos. Lo que es importante es que el valor escrito como parmetro coincida con el que se especifica en el desplegable que aparece en el serial monito del IDE de Arduino, o si no la comunicacin no estar bien sincronizada y se mostrarn smbolo sin sentido. Esta instruccin no tiene valor de retorno.Tambin existe la instruccin Serial.end (), la cual no tiene ningn argumento ni devuelve nada, y que se encarga de cerrar el canal serie. De esta manera, la comunicacin serie se deshabilita y los pines RX y TX vuelven a estar disponible para entrada y salidas general.Instrucciones para enviar datos desde la placa al exterior Serial.print (): enviar a travs del canal serie un dato (especificado como parmetro) desde el microcontrolador hacia el exterior. Ese dato puede ser de cualquier tipo. Si el dato se especifica explcitamente (en vez de a travs de una variable), hay que recordar que los caracteres se han de escribir entre comillas simples y las cadenas entre comillas dobles.La transmisin de los datos realizada por serial.print () es asncrona. Eso significa que nuestro sketch pasar a la siguiente instruccin y seguir ejecutndose son esperar a que empiece a realizarse l envi de datos.Serial.println (): hace exactamente lo mismo que serial.print (), pero adems aade automticamente al final de los datos enviados dos caracteres extra, el retorno de carro (cdigo ASCII n 13) y el de la nueva lnea (cdigo ASCII n 10).Serial.write (): enva a travs del canal serie un dato (especificado como parmetro) desde el microcontrolador hacia el exterior. Pero a diferencia de Serial.print (), el dato a enviar solo puede ocupar un byte. Por lo tanto, ha de ser bsicamente de tipo char o byte.Instrucciones para recibir datos del exterior Como ya hemos visto, enviar datos a la placa es muy sencillo no hay ms que escribir lo que queramos en la caja de texto y pulsar el botn send. No obstante, si el sketch que se est ejecutando en la placa no est preparado para recibir y procesar estos datos, esa transmisin no llegara a ningn sitio. Por tanto, necesitamos recibir convenientemente en nuestro sketches los datos que lleguen a la placa va comunicacin serie. Para ello, disponemos de dos instrucciones bsicas.Serial.available (): devuelve el nmero de bytes (caracteres) disponibles para ser ledo que proviene del exterior a travs del canal serie (va USB). Estos bytes ya han llegado al microcontrolador y permanecen almacenados temporalmente en una pequea memoria de 64 bytes que tiene el chip TTL-UART llamada (buffer) hasta que sean procesados mediante la instruccin serial.read (). Si no hay bytes para leer tampoco tendr parmetros y esta instruccin devolver a cero.Serial.read (): devuelve el primer byte an no ledo de los que estn almacenados en el buffer de entrada del chip TTL-UART. Al hacerlo, lo elimina de ese buffer. Para volver a leer el siguiente byte, se ha de volver a ejecutar el serial.read (). Y hacer as hasta que se hayan ledo todos.Serial.findUntil (): lee datos del buffer de entrada hasta que se encuentre la cadena de caracteres (o un carcter individual) especificada como primer parmetro, o bien se llegue a una marca de final de bsqueda (la cual es la cadena o carcter especificada como segundo parmetro).la instruccin devuelve a true si se encuentra la cadena a buscar antes que la marca de final de bsqueda o false si no.Serial.readBytes (): lee del buffer de entrada (eliminndolos de all) la cantidad de bytes especificada como segundo parmetro (o bien si no llegan suficiente bytes, hasta que se hayan superado el tiempo especificado por serial.setTimeout (). En cualquier caso, los bytes ledos se almacenan en un array de tipo char especificando como primer parmetro.Serial.readBytesUntil (): lee del buffer de entrada (eliminndolos de all) la cantidad de bytes especificada como tercer parmetro, o bien, si se encuentra antes una cadena de caracteres o carcter individual especificada como primer parmetro que hace de marca de final, o bien si no llegan suficientes bytes ni se encuentra la marca de final, hasta que superado el tiempo especificado por Serial.setTimeout (). En cualquier caso, los bytes ledos se almacenaran en un array de tipo char especificado como segundo parmetro. Esta instruccin devuelve el nmero de bytes ledos del buffer (por lo que un valor 0 significa que no se encontraron datos validos).Serial.setTimeout (): tiene un parmetro (de tipo long) que sirve para establecer el nmero de milisegundos mximos que las instrucciones Serial.readBytesUntil () y Serial.readBytes () esperarn a la llegada de datos al bfer de entrada serie. Si alguna de estas dos instrucciones no recibe ningn dato y se supera ese tiempo, el sketch continuar su ejecucin en la lnea siguiente. El tiempo de espera por defecto es de 1000 milisegundos. Esta instruccin se suele escribir en void setup (). No tiene valor de retorno.Serie.parseFloat (): lee del buffer de entrada (eliminndolos de all) todos los datos hasta que se encuentre con un nmero decimal. Su valor de retorno de tipo long ser entonces ese nmero decimal encontrado. Cuando detecte el primer carcter posterior no vlido, dejar, a de leer (y por tanto, no seguir eliminando datos del buffer). Esta instruccin no tiene parmetros.Serial.parselnt (): lee del buffer de entrada (eliminndolos de all) todos los datos hasta que se encuentre con un nmero entero. Su valor de retorno de tipo long ser entonces ese nmero entero encontrado. Cuando detecte el primer carcter posterior no vlido, dejar de leer (y por tanto, no seguir eliminando datos buffer). Esta instruccin no tiene parmetros.Instrucciones de gestin del tiempo Millis (): devuelve el nmero de milisegundos (ms) desde que la placa Arduino empez a ejecutar el sketch actual. Este nmero se resetear aproximadamente despus de 50 das.Micros (): devuelve el nmero de microsegundos (s) desde que la placa Arduino empez a ejecutar el sketch actual. Este nmero de tipo unsigned long se resetear, aproximadamente despus de 70 minutos Delay (): pausa el sketch durante la cantidad de milisegundos especificados como parmetro de tipo unisigned long. No tiene valor de retorno Delaymicroseconds (): pausa el sketch durante la cantidad de microsegundos especificados como parmetro de tipo unsigned long. Actualmente el mximo valor que se puede utilizar con precisin es de 16383. Para esperas mayores que esta, se recomienda usar la instruccin delay (). El mnimo valor que se puede utilizar con precisin es de 3 (s). No tiene valor de retorno.Instrucciones matemticas, trigonomtricas y de pseudoaleatoriedad.El lenguaje Arduino dispone de una serie de instrucciones matemticas y de pseudoaleatoriedad que nos pueden venir bien en nuestros proyectos.Abs (): devuelve el valor absoluto de un nmero pasado por parmetros (el cual puede ser tanto entero como decimal). Si el nmero es positivo o cero, lo devuelve sin alterar su valor; si es negativo, lo devuelve pero convertido en positivo.Min (): devuelve el mnimo de dos nmero pasados por parmetros (los cuales pueden ser tanto enteros como decimales).Max (): devuelve el mximo de dos nmeros pasados por parmetros (los cuales pueden ser tanto enteros como decimales).Constrain () : recalcula el valor pasado como primer parmetro (llammosle x) dependiendo de si est dentro o fuera del rango delimitado por los valores pasados como segundo y tercer parmetro (llammoslos a y b respectivamente, donde a siempre ha de ser menor que b).los parmetros pueden ser tanto enteros como decimales. Ejemplo. Si x est entre a y b, constrain () devolver x sin modificar.Si x es menor que a, constrain () devolver aSi x es mayor que b, constrain () devolver bUna instruccin algo ms compleja que las anteriores es la instruccin map (). Esta instruccin es utilizada en multitudes de proyectos para adecuar las seales de entradas obtenidas por diferentes sensores a un rango numrico ptimo para trabajar.Pow (): devuelve el valor resultante de elevar el nmero pasado como primer parmetro (la base) al nmero pasado como segundo parmetro (el exponente, el cual puede ser incluso una fraccin). Un ejemplo simple si vemos un resultado= (2,5); la variable resultado valdr 32 (). Ambos parmetros son de tipo float, y el valor devuelto es de tipo doublSqrt (): devuelve la raz cuadrada del nmero pasado como parmetro (que puede ser entero o decimal). El valor devuelto es de tipo doublInstrucciones trigonomtricas.Sin (): devuelve el seno de un ngulo especificado como parmetro en radianes. Este parmetro es de tipo float. Su retorno puede ser un valor entre -1 y 1 y es de tipo double.Cos (): devuelve el coseno de un ngulo especificado como parmetro en radianes. Este parmetro es de tipo float. Su retorno puede ser un valor entre -1 y 1 es de tipo doubleTan (): devuelve la tangente de un ngulo especificado como parmetro en radianes. Este parmetro es de tipo float. Su retorno puede ser un valor entre - y y es de tipo doubleTambin podemos utilizar nmeros pseudoaleatorios en nuestro sketches Arduino. Un nmero pseudoaleatorio no es estrictamente un nmero aleatorio segn la definicin matemtica rigurosa.Randomseed (): inicializa el generador de nmero pseudoaleatorio.se suele ejecutar en la seccin setup (). Esta instruccin tiene un parmetro de tipo int o long llamado semilla que indica el valor a partir del cual empezara la secuencia de nmeros. Semillas iguales generan secuencias iguales, as que interesara en mltiples ejecuciones de randomSeed (), utiliza valores diferente de semillas para aumentar la aleatoriedad. Tambin nos puede interesar a veces lo contrario, fijar la semilla para que la secuencia de nmeros aleatorios se repita exactamente. No tiene ningn valor de retorno.Random (): una vez iniciado el generador de nmeros pseudoaleatorio con randomseed (), esta instruccin retorna un nmero pseudoaleatorio de tipo long comprendido entre un valor mnimo (especificado como primer parmetro) y un valor mximo (especificado como segundo parmetro) menos uno. Si no se especifica el primer parmetro, el valor mnimo por defecto es 0. El tipo de ambos parmetros puede ser cualquiera mientras sea entero. Operadores aritmticos (+) Operador suma, (-) operador resta, (*) operador multiplicacin, (/) operador divisin, (%) operador modulo.Creacin de instrucciones (funciones) propias.Al crear nuestras propias funciones, escribimos cdigo mucho ms legible y fcil de mantener. Segmentar el cdigo en diferentes funciones permite al programador crear piezas modulares de cdigo que realizan una tarea definida. Al crear nuestras propias funciones, esto tiene diversas ventajas como por ejemplo, que las funciones ayudan al programador a ser organizado, codifican una accin en un lugar de manera que una funcin solo ha de ser pensada y escrita una vez y hacen ms fcil la reutilizacin de cdigo en otro programas (provocando que esto sean ms pequeos, modulares y legibles)Tipo retorno: es un tipo ya conocidos (byte, int, float) e indican el tipo de valor que la funcin devolver al sketch principal una vez ejecutada. Este valor devuelto se podr guardar en una variable para ser usada en el sketch principal, o simplemente puede ser ignorado.Tipo param1, tipo param2: son las declaraciones de los parmetros de la funcin, que no son ms que variables internas cuta existencia solo perdura mientras el cdigo de esta se est ejecutando. El valor inicial de estos parmetros se asigna explcitamente en la llamada a la funcin (esto es cuando es invocada dentro de sketch principal), pero este valor puede variar dentro de un cdigo interno. Al finalizar la ejecucin de la funcin, todos los parmetros son destruidos de la memoria del microcontrolador.Bloques condicionalesLos bloques if y if/elseUn bloque if sirve para comprobar si una condicin determinada es cierta (true, 1) o falsa (false, 0). Si la condicin es cierta, se ejecutara las instrucciones escrita en su interior (es decir, dentro de las llaves de apertura y cierre). Si no se cumple puede no pasar nada o bien, si existe tras bloque if un bloque else, se ejecutara las instrucciones escritas en el interior de ese bloque else. Si solo escribimos el bloque if, el sketch tendr respuesta solamente para cuando si se cumple la condicin, pero si adems escribimos un bloque else, el sketch tendr respuesta par cuando s se cumple la condicin y para cuando no se cumple tambin.Ahora que ya sabemos las diferentes sintaxis del bloque if, veamos qu tipo de condiciones podemos definir entre los parntesis del if. Lo primero que debemos saber es que para escribir correctamente en nuestro sketch estas condiciones necesitamos utilizar los llamados operadores de comparacin. Operadores de comparacin (==) Comparacin de igualdad (!=) Comparacin de diferencia (>) Comparacin de mayor que (>=) Comparacin de mayor o igual que (