Wikilibros eswikibooks https://es.wikibooks.org/wiki/Portada MediaWiki 1.45.0-wmf.8 first-letter Medio Especial Discusión Usuario Usuario discusión Wikilibros Wikilibros discusión Archivo Archivo discusión MediaWiki MediaWiki discusión Plantilla Plantilla discusión Ayuda Ayuda discusión Categoría Categoría discusión TimedText TimedText talk Módulo Módulo discusión Lenguaje de programación Arduino 0 56168 423004 369652 2025-07-02T04:35:50Z 157.100.143.146 /* Sintaxis básica */ 423004 wikitext text/x-wiki == Lenguaje de programación Arduino == La plataforma Arduino se programa mediante el uso de un lenguaje propio basado en el lenguaje de programación de alto nivel [[Processing]] que es similar a C++. === Funciones básicas y operadores === Arduino está basado en C y soporta todas las funciones del estándar C y algunas de C++.<ref name="referenceext">{{cita web|url=http://arduino.cc/en/Reference/Extended|título=Language Reference|fechaacceso=22 de diciembre de 2013|obra=http://arduino.cc|idioma=inglés}}</ref> A continuación se muestra un resumen con la estructura y sintaxis del lenguaje Arduino: ==== Sintaxis básica ==== * Delimitadores:;, {} * Comentarios: //, /* */ * Cabeceras: #define * Operadores aritméticos: +, -, *, /, % * Asignación: = * Operadores de comparación: ==, !=, <, >, <=, >= * Operadores Booleanos: &&, ||, ! * Operadores de acceso a punteros: *, & * Operadores de bits: &, |, ^, ~, <<, >> * Operadores compuestos: ** Incremento y decremento de variables: ++, -- ** Asignación y operación: +=, -=, *=, /=, &=, |= ==== Estructuras de control ==== * Condicionales: if, if...else, switch case * Bucles: for, while, do. while * Bifurcaciones y saltos: break, continue, return, goto ==== Variables ==== En cuanto al tratamiento de las variables también comparte un gran parecido con el lenguaje C. ===== Constantes ===== * HIGH/LOW: representan los niveles alto y bajo de las señales de entrada y salida. Los niveles altos son aquellos de 3 voltios o más. * INPUT/OUTPUT: entrada o salida. * false (falso): Señal que representa al cero lógico. A diferencia de las señales HIGH/LOW, su nombre se escribe en letra minúscula. * true (verdadero): Señal cuya definición es más amplia que la de ''false''. Cualquier número entero diferente de cero es "verdadero", según el [[álgebra de Boole]], como en el caso de -200, -1 o 1. Si es cero, es "falso". ===== Tipos de datos ===== * void, boolean, char, unsigned char, byte, int, unsigned int, word, long, unsigned long, float, double, string, array. ===== Conversión entre tipos ===== Estas funciones reciben como argumento una variable de cualquier tipo y devuelven una variable convertida en el tipo deseado. * char(), byte(), int(), word(), long(), float() ===== Cualificadores y ámbito de las variables ===== * static, volatile, const. ===== Utilidades ===== * sizeof() ==== Funciones básicas ==== ===== E/S digital ===== * pinMode(pin, modo); * digitalWrite(pin, valor). * int digitalRead(pin). ===== E/S analógica ===== * analogReference(tipo) * int analogRead(pin) * analogWrite(pin, valor) ===== E/S avanzada ===== * shiftOut(dataPin, clockPin, bitOrder, valor) * unsigned long pulseIn(pin, valor) ===== Tiempo ===== * unsigned long millis() * unsigned long micros() * delay(ms) * delayMicroseconds(microsegundos) ===== Matemáticas ===== * min(x, y), max(x, y), abs(x), constrain(x, a, b), map(valor, fromLow, fromHigh, toLow, toHigh), pow(base, exponente), sqrt(x) ===== Trigonometría ===== * sin(rad), cos(rad), tan(rad) ===== Números aleatorios ===== * randomSeed(semilla), long random(máx), long random(mín, máx) ===== Bits y Bytes ===== * lowByte(), highByte(), bitRead(), bitWrite(), bitSet(), bitClear(), bit() ===== Interrupciones externas ===== * attachInterrupt(interrupción, función, modo) * detachInterrupt(interrupción) ===== Interrupciones ===== * interrupts(), noInterrupts() ===== Comunicación por puerto serie ===== Las funciones de manejo del puerto serie deben ir precedidas de la palabra "Serial" aunque no necesitan ninguna declaración en la cabecera del programa. Por esto se consideran funciones base del lenguaje.<ref>{{cita web |url=http://arduino.cc/en/Reference/Serial|título=Serial|fechaacceso=22 de diciembre de 2013|obra=http://www.arduino.cc|idioma=inglés}} </ref> Estas son las funciones para transmisión serial: * begin(), available(), read(), flush(), print(), println(), write() ==== Manipulación de puertos ==== Los registros de puertos permiten la manipulación a más bajo nivel y de forma más rápida de los contactos de entrada/salida del microcontrolador de las placas Arduino.<ref>{{cita web|url=http://arduino.cc/en/Reference/PortManipulation|título=Port Registers |fechaacceso= 22 de diciembre de 2013|obra=http://www.arduino.cc|idioma=inglés}}</ref> Los contactos eléctricos de las placas Arduino están repartidos entre los registros B(0-7), C (analógicos) y D(8-13). Mediante estas variables se observa y se modificada su estado: * DDR[B/C/D]: Data Direction Register (o dirección del registro de datos) del puerto B, C ó D. Es una variable de Lectura/Escritura que sirve para especificar cuales contactos serán usados como entrada y salida. * PORT[B/C/D]: Data Register (o registro de datos) del puerto B, C ó D. Es una variable de Lectura/Escritura. * PIN[B/C/D]: Input Pins Register (o registro de pines de entrada) del puerto B, C ó D. Variable de sólo lectura. Por ejemplo, para especificar los contactos 9 a 13 como salidas y el 8 como entrada (puesto que el puerto D usa los pines de la placa Arduino 8 al 13 digitales) bastaría utilizar la siguiente asignación: <source lang="c">DDRD = B11111110;</source> Como se ha podido comprobar, el conocimiento del lenguaje C, permite la programación en Arduino debido a la similitud entre este y el lenguaje nativo del proyecto, lo que implica el aprendizaje de algunas funciones específicas de que dispone el lenguaje del proyecto para manejar los diferentes parámetros. Se pueden construir aplicaciones de cierta complejidad sin necesidad de muchos conceptos previos. === AVR Libc === Los programas compilados con Arduino (salvo en las placas con CorteX M3) se enlazan contra AVR Libc<ref name="referenceext"/> por lo que tienen acceso a algunas de sus funciones. AVR Libc es un proyecto de software libre con el objetivo de proporcionar una [[biblioteca (informática)|biblioteca]] C de alta calidad para utilizarse con el compilador GCC sobre microcontroladores Atmel AVR. Se compone de 3 partes: * avr-binutils * avr-gcc * avr-libc La mayoría del lenguaje de programación Arduino está escrita con constantes y funciones de AVR y ciertas funcionalidades sólo se pueden obtener haciendo uso de AVR.<ref>{{cita web|url=http://www.arduino.cc/playground/Main/AVR|título=AVR Code|fechaacceso= 22 de diciembre de 2013 | obra=http://www.arduino.cc|idioma=inglés}}</ref> ==== Interrupciones ==== Las señales de interrupción son las siguientes: * cli(): desactiva las interrupciones globales * sei(): activa las interrupciones Esto afectará al temporizador y a la comunicación serial. La función delayMicroseconds() desactiva las interrupciones cuando se ejecuta. ==== Temporizadores ==== La función delayMicroseconds() crea el menor retardo posible del lenguaje Arduino que ronda los 2μs. Para retardos más pequeños se debe utilizar la llamada de ensamblador 'nop' (no operación). Cada sentencia 'nop' se ejecutará en un ciclo de máquina (16 MHz) de aproximadamente 62,5ns. ==== Manipulación de puertos ==== La manipulación de puertos con código AVR es más rápida que utilizar la función digitalWrite() de Arduino. ==== Establecer Bits en variables ==== cbi y sbi son mecanismos estándar (AVR) para establecer o limpiar bits en PORT y otras variables. === Diferencias con Processing === La sintaxis del lenguaje de programación Arduino es una versión simplificada de C/C++ y tiene algunas diferencias respecto de Processing.<ref>{{cita web |url= http://arduino.cc/en/Reference/Comparison?from=Main.ComparisonProcessing|título=Arduino/Processing Language Comparison|fechaacceso= 22 de diciembre de 2013|obra=http://www.arduino.cc |idioma=inglés}}</ref><ref>{{cita web |url= http://processing.org/reference/|título=Language Reference(API)/Processing 2+|fechaacceso= 22 de diciembre de 2013|obra=http://processing.org/|idioma=inglés}}"</ref> Debido a que Arduino está basado en C/C++ mientras que Processing se basa en Java, existen varias diferencias en cuanto a la sintaxis de ambos lenguajes y el modo en que se programa: ==== Arreglos ==== {| class="wikitable" |- ! Arduino !! Processing |- | <source lang="c">int bar[8]; bar[0] = 1;</source> | <source lang="c">int[] bar = new int[8]; bar[0] = 1;</source> |- | <source lang="c">int foo[] = { 0, 1, 2 }; </source> |<source lang="c"> int foo[] = { 0, 1, 2 };</source> o bien <br /> <source lang="c"> int[] foo = { 0, 1, 2 };</source> |} ==== Impresión de cadenas ==== {| class="wikitable" |- ! Arduino !! Processing |- | <source lang="c">Serial.println("hello world");</source> | <source lang="c">println("hello world");</source> |- | <source lang="c">int i = 5; Serial.println(i);</source> | <source lang="c">int i = 5; println(i);</source> |- | <source lang="c">int i = 5; Serial.print("i = "); Serial.print(i); Serial.println();</source> | <source lang="c">int i="5"; println("i =" + i);</source> |} === Ejemplo sencillo de programación en Arduino === El primer paso antes de comprobar que la instalación es correcta y empezar a trabajar con Arduino, es usar ejemplos prácticos que vienen disponibles con el dispositivo. Se recomienda abrir el ejemplo “led_blink” el cual crea una intermitencia por segundo en un led conectado en el pin 13. El código necesario es el siguiente: <source lang="c"> # define LED_PIN 13 void setup () { // Activado del contacto 13 para salida digital pinMode (LED_PIN, OUTPUT); } // Bucle infinito void loop () { // Encendido del diodo LED enviando una señal alta digitalWrite (LED_PIN, HIGH); // Tiempo de espera de 1 segundo (1000 ms) delay (1000); // Apagado del diodo LED enviando una señal baja. digitalWrite (LED_PIN, LOW); // Tiempo de espera de 1 segundo delay (1000); } </source> === Bibliografía === * {{cita libro|nombre1=Jonathan|apellido1=Oxer|nombre2=Hugh|apellido2=Blemings|fecha=28 de diciembre de 2009|título=Practical Arduino: Cool Projects for Open Source Hardware|edición=1ª|editorial=[[Apress]]|páginas=500|isbn=1430224770|url=http://www.apress.com/book/view/9781430224778}} * {{cita libro|nombre1=Joshua|apellido1=Noble|fecha=15 de julio de 2009|título=Programming Interactivity: A Designer's Guide to Processing, Arduino, and openFramework|edición=1ª|editorial=[[O'Reilly Media]]|páginas=768|isbn=0596154143|url=http://oreilly.com/catalog/9780596800581/}} * {{cita libro|nombre1=Massimo|apellido1=Banzi|fecha=24 de marzo de 2009|título=Getting Started with Arduino|edición=1ª|editorial=[[Make Books]]|páginas=128|isbn=9781449363291|url=https://books.google.com.ar/books?id=Xd3SBQAAQBAJ&printsec=frontcover&hl=es&source=gbs_atb#v=onepage&q&f=false|idioma=en}} * {{cita libro|nombre1=Ernesto|apellido1=Martínez de Carvajal Hedrich|fecha=1 de abril de 2016|título=100 Proyectos de Robótica con Bitbloq y Arduino|edición=2ª|editorial=[[Martínez de Carvajal Hedrich]]|páginas=386|isbn=978-8460843177}} * {{cita libro|nombre1=Ernesto|apellido1=Martínez de Carvajal Hedrich|fecha=10 de octubre de 2016|título=50 Proyectos Tecnológicos - Robótica e Impresión 3D|edición=2ª|editorial=[[Martínez de Carvajal Hedrich]]|páginas=296|isbn=978-8460890447}} * {{cita libro|nombre1=Ernesto|apellido1=Martínez de Carvajal Hedrich|fecha=15 de diciembre de 2016|título=Tuneando a Zowi - Proyectos de Robótica y Actividades docentes|edición=1ª|editorial=[[Martínez de Carvajal Hedrich]]|páginas=218|isbn=978-8461774098}} * {{cita libro|nombre1=Ernesto|apellido1=Martínez de Carvajal Hedrich|fecha=15 de agosto de 2017|título=Robótica Educativa con mBot y Arduino|edición=1ª|editorial=[[Martínez de Carvajal Hedrich]]|páginas=282|isbn=978-8469749326}} bm45y2uxj071uc89ucupo4v49pd0zfx Usuario discusión:Зорана Филиповић 3 63558 423003 2025-07-01T12:50:32Z Зорана Филиповић 125354 Página creada con «== Напомена == Ово је додатни налог главног налога [[m:User:Filipović Zoran|Filipović Zoran]] који је од 19. августа 2024. године на трајном вики-одмору. ~~~~» 423003 wikitext text/x-wiki == Напомена == Ово је додатни налог главног налога [[m:User:Filipović Zoran|Filipović Zoran]] који је од 19. августа 2024. године на трајном вики-одмору. [[Usuario:Зорана Филиповић|Зорана Филиповић]] ([[Usuario discusión:Зорана Филиповић|discusión]]) 12:50 1 jul 2025 (UTC) mnc8ls8ajsdmh1fqxmznoztw0quebqt