Introducción al lenguaje de programación Arduino

¿Cómo se pueden escribir programas para la placa Arduino? Arduino admite de forma nativa un lenguaje que llamamos lenguaje de programación Arduino o lenguaje Arduino.
¿Cómo puedes escribir programas para tu placa Arduino?
Arduino, de forma nativa, soporta un lenguaje que llamamos Lenguaje de Programación Arduino, o Lenguaje Arduino.
Este lenguaje se basa en la plataforma de desarrollo Wiring , que a su vez se basa en Processing , que, si no lo conoces, es en lo que se basa p5.js. Es una larga historia de proyectos que se basan en otros proyectos, de una manera muy Open Source. El IDE de Arduino se basa en el IDE de Processing y el IDE de Wiring, que se basa en él.
Cuando trabajamos con Arduino comúnmente utilizamos el Arduino IDE (Integrated Development Environment), un software disponible para todas las principales plataformas de escritorio (macOS, Linux, Windows), que nos brinda 2 cosas: un editor de programación con soporte de librerías integradas, y una forma de compilar y cargar fácilmente nuestros programas Arduino a una placa conectada al computador.
El lenguaje de programación Arduino es básicamente un marco construido sobre C++. Se podría argumentar que no es un lenguaje de programación real en el sentido tradicional, pero creo que esto ayuda a evitar confusiones para los principiantes.
Un programa escrito en el lenguaje de programación Arduino se llama sketch . Normalmente, un sketch se guarda con la .inoextensión (de Ardu ino).
La principal diferencia con el C o C++ “normal” es que todo el código se envuelve en dos funciones principales. Por supuesto, se pueden tener más de dos, pero cualquier programa Arduino debe proporcionar al menos esas dos.
Uno se llama setup(), el otro se llama loop(). El primero se llama una vez, cuando se inicia el programa, el segundo se llama repetidamente mientras se ejecuta el programa.
No tenemos una main()función como la que se usa habitualmente en C/C++ como punto de entrada para un programa. Una vez que compilas tu boceto, el IDE se asegurará de que el resultado final sea un programa C++ correcto y básicamente agregará el pegamento faltante al preprocesarlo.
Todo lo demás es código C++ normal, y como C++ es un superconjunto de C, cualquier C válido también es código Arduino válido.
Una diferencia que podría causarle problemas es que, si bien puede generar su programa en varios archivos, todos esos archivos deben estar en la misma carpeta. Puede ser una limitación que lo desestime si su programa va a crecer mucho, pero en ese punto será fácil pasar a una configuración nativa de C++, lo cual es posible.
Parte del lenguaje de programación Arduino son las bibliotecas integradas que le permiten integrarse fácilmente con la funcionalidad proporcionada por la placa Arduino larutadelosorigenes.es.
Seguramente tu primer programa con Arduino consistirá en hacer que un LED se encienda y luego se apague. Para ello, utilizarás las funciones pinMode(), delay()y digitalWrite(), junto con algunas constantes como HIGH, LOW, OUTPUT.
Así, el primer proyecto canónico de Arduino (el “¡Hola, mundo!”):
#define LED_PIN 13void setup() { // Configure pin 13 to be a digital output pinMode(LED_PIN, OUTPUT);}void loop() { // Turn on the LED digitalWrite(LED_PIN, HIGH); // Wait 1 second (1000 milliseconds) delay(1000); // Turn off the LED digitalWrite(LED_PIN, LOW); // Wait 1 second delay(1000);} Todo esto es parte del lenguaje de programación Arduino, o mejor dicho, lo llamaríamos suite o biblioteca .
Como recordatorio, quiero señalar que no estás limitado a usar este lenguaje e IDE para programar un Arduino. Existen proyectos, entre otros, que te permiten ejecutar código Node.js en él usando el proyecto Johnny Five , código Python usando pyserial y código Go con Gobot , pero el lenguaje de programación Arduino es definitivamente en el que verás la mayoría de los tutoriales, ya que es la forma nativa y canónica de trabajar con estos dispositivos.
Arduino establece dos constantes que podemos usar para
HIGHEquivale a un alto nivel de voltaje, que puede variar según el hardware (2 V en placas de 3,3 V como Arduino Nano, 3 V en placas de 5 V como Arduino Uno) LOWequivale a un bajo nivel de voltaje. Nuevamente, el valor exacto depende de la placa utilizada
Luego tenemos 3 constantes que podemos usar en combinación con la pinMode()función:
INPUTEstablece el pin como pin de entradaOUTPUTEstablece el pin como pin de salidaINPUT_PULLUPEstablece el pin como una resistencia pull-up interna
La otra constante que tenemos es LED_BUILTIN, que apunta al número del pin integrado, que generalmente equivale al número 13.
Además de esto, tenemos las constantes C/C++ truey false.
M_PIla constante pi (3.14159265358979323846)M_Ela constante eM_LN10el logaritmo natural del número 10.M_LN2el logaritmo natural del número 2.M_LOG10Eel logaritmo de la e en base 10.M_LOG2Eel logaritmo de e en base 2.M_SQRT2la raíz cuadrada de 2.NANla constante NAN (no es un número).
En esta sección voy a hacer una referencia a las funciones integradas que proporciona el lenguaje de programación Arduino.
Ciclo de vida del programa
setup()Esta función se llama una vez, cuando se inicia el programa y cuando se apaga y reinicia el Arduino.loop()Esta función se llama repetidamente mientras se ejecuta el programa Arduino.
Manejo de E/S
Las siguientes funciones ayudan a manejar la entrada y salida de su dispositivo Arduino.
E/S digital
digitalRead()Lee el valor de un pin digital. Acepta un número de pin como parámetro y devuelve la constanteHIGHoLOW.digitalWrite()Escribe un valorHIGHoLOWen un pin de salida digital. Pasas el número de pin yHIGHoLOWcomo parámetros.pinMode()Establece un pin como entrada o salida. Pasa el número de pin y el valorINPUTo como parámetros.OUTPUTpulseIn()Lee un pulso digital deLOWaHIGHy luego deLOWnuevo a, o deHIGHaLOWy deHIGHnuevo a en un pin. El programa se bloqueará hasta que se detecte el pulso. Especifica el número de pin y el tipo de pulso que quieres detectar (LHL o HLH). Puedes especificar un tiempo de espera opcional para dejar de esperar ese pulso.pulseInLong()es igual quepulseIn(), excepto que se implementa de manera diferente y no se puede usar si las interrupciones están desactivadas. Las interrupciones se desactivan comúnmente para obtener un resultado más preciso.shiftIn()Lee un byte de datos bit a bit desde un pin.shiftOut()escribe un byte de datos, bit a bit, en un pin.tone()Envía una onda cuadrada a un pin, que se utiliza para que los zumbadores o altavoces reproduzcan tonos. Puedes especificar el pin y la frecuencia. Funciona tanto con pines digitales como analógicos.noTone()detiene latone()onda generada en un pin.
Entrada/salida analógica
analogRead()Lee el valor de un pin analógico.analogReference()configura el valor utilizado para el rango de entrada superior en la entrada analógica, por defecto 5 V en placas de 5 V y 3,3 V en placas de 3,3 V.analogWrite()escribe un valor analógico en un pinanalogReadResolution()Permite cambiar la resolución de bits analógicos predeterminada paraanalogRead(), por defecto 10 bits. Solo funciona en dispositivos específicos (Arduino Due, Zero y MKR)analogWriteResolution()Permite cambiar la resolución de bits analógicos predeterminada paraanalogWrite(), por defecto 10 bits. Solo funciona en dispositivos específicos (Arduino Due, Zero y MKR)
delay()pausa el programa durante un número de milisegundos especificado como parámetrodelayMicroseconds()pausa el programa durante un número de microsegundos especificado como parámetromicros()El número de microsegundos transcurridos desde el inicio del programa. Se reinicia después de ~70 minutos debido a un desbordamiento.millis()El número de milisegundos transcurridos desde el inicio del programa. Se reinicia después de ~50 días debido al desbordamiento.
abs()el valor absoluto de un númeroconstrain()restringe un número para que esté dentro de un rango, ver usomap()reasigna un número de un rango a otro, ver usomax()el máximo de dos númerosmin()el mínimo de dos númerospow()el valor de un número elevado a una potenciasq()el cuadrado de un numerosqrt()la raíz cuadrada de un númerocos()el coseno de un ángulosin()el seno de un ángulotan()la tangente de un ángulo
Nota: hay más funciones matemáticas integradas si las necesita, documentadas aquí .
isAlpha()Comprueba si un carácter es alfa (una letra)isAlphaNumeric()Comprueba si un carácter es alfanumérico (una letra o un número)isAscii()Comprueba si un carácter es un carácter ASCIIisControl()Comprueba si un carácter es un carácter de control.isDigit()Comprueba si un carácter es un númeroisGraph()Comprueba si un carácter es un carácter ASCII imprimible y contiene contenido (no es un espacio, por ejemplo)isHexadecimalDigit()Comprueba si un carácter es un dígito hexadecimal (AF 0-9)isLowerCase()Comprueba si un carácter es una letra en minúscula.isPrintable()Comprueba si un carácter es un carácter ASCII imprimible.isPunct()Comprueba si un carácter es un signo de puntuación (una coma, un punto y coma, un signo de exclamación, etc.)isSpace()Comprueba si un carácter es un espacio, un avance de páginaf, una nueva línean, un retorno de carror, una tabulación horizontalto una tabulación verticalv.isUpperCase()Comprueba si un carácter es una letra en mayúsculaisWhitespace()Comprueba si un carácter es un carácter de espacio o una tabulación horizontal.t
random()generar un número pseudoaleatoriorandomSeed()Inicializar el generador de números pseudoaleatorios con un número inicial arbitrario
En Arduino, como en la mayoría de lenguajes, es imposible obtener números realmente aleatorios, y la secuencia es siempre la misma, por lo que se inicia con la hora actual o (en el caso de Arduino) se puede leer la entrada desde un puerto analógico .
bit()calcula el valor de un bit (0 = 1, 1 = 2, 2 = 4, 3 = 8…)bitClear()Limpia (establece en 0) un bit de una variable numérica. Acepta un número y el número del bit comenzando desde la derecha.bitRead()Lee un bit de un número. Acepta un número y el número del bit comenzando desde la derecha.bitSet()Establece en 1 un bit de un número. Acepta un número y el número del bit comenzando desde la derecha.bitWrite()escribe 1 o 0 en un bit específico de un número Acepta un número, el número del bit comenzando desde la derecha y el valor a escribir (0 o 1)highByte()obtener el byte de orden superior (más a la izquierda) de una variable de palabra (que tiene 2 bytes)lowByte()obtener el byte de orden bajo (más a la derecha) de una variable de palabra (que tiene 2 bytes)
noInterrupts()Desactiva las interrupcionesinterrupts()Vuelve a habilitar las interrupciones después de que hayan sido deshabilitadas.attachInterrupt()Permite que un pin de entrada digital sea una interrupción. Las distintas placas tienen distintos pines permitidos. Consulta la documentación oficial .detachInterrupt()deshabilita una interrupción habilitada medianteattachInterrupt()
Tal vez te puede interesar:
- Introducción a React
- Agregar evento de clic a los elementos DOM devueltos desde querySelectorAll
- Cómo cambiar el valor de un nodo DOM
- Cómo comprobar si un elemento DOM tiene una clase
Créditos de la imagen http://dbbeebom