Introducción al lenguaje de programación Arduino

¿Cómo puedes escribir programas para tu placa Arduino? Arduino, de forma nativa, admite 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, admite un lenguaje que llamamos lenguaje de programación Arduino o lenguaje Arduino.

Este lenguaje se basa en elAlambradoplataforma de desarrollo, que a su vez se basa enProcesando, que si no está familiarizado, es lo quep5.jsse basa en. 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 procesamiento y el IDE de cableado que se basa en él.

Cuando trabajamos con Arduino, usamos comúnmente 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 para bibliotecas integradas y un manera de compilar y cargar fácilmente nuestros programas Arduino en una placa conectada a la computadora.

El lenguaje de programación Arduino es básicamente un marco construido sobre C ++. Puede argumentar que no es un lenguaje de programación real en el término tradicional, pero creo que esto ayuda a evitar confusiones para los principiantes.

Un programa escrito en el lenguaje de programación Arduino se llamabosquejo. Normalmente, un boceto se guarda con la.inoextensión (de Arduino).

La principal diferencia con lo "normal"Co C ++ es que envuelve todo su código en 2 funciones principales. Puede tener más de 2, por supuesto, pero cualquier programa Arduino debe proporcionar al menos esos 2.

Uno se llamasetup(), el otro se llamaloop(). El primero se llama una vez, cuando se inicia el programa, el segundo se llama repetidamente mientras se ejecuta el programa.

No tenemos unmain()funciona como está acostumbrado en C / C ++ como punto de entrada para un programa. Una vez que compile su boceto, el IDE se asegurará de que el resultado final sea un programa C ++ correcto y básicamente agregará el pegamento faltante preprocesándolo.

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, esos archivos deben estar todos en la misma carpeta. Podría ser una limitación que rompa el trato si su programa crece mucho, pero en ese momento 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.

Su primer programa Arduino seguramente implicará hacer que un led encienda la luz y luego se apague. Para hacerlo, utilizará elpinMode(),delay()ydigitalWrite()funciones, junto con algunas constantes comoHIGH,LOW,OUTPUT.

Así, el primer proyecto canónico de Arduino (el "¡Hola, mundo!"):

#define LED_PIN 13

void 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 será mejor que lo llamemossuiteoBiblioteca.

Soporte para otro idioma

Como recordatorio, quiero señalar que no está limitado a usar este lenguaje e IDE para programar un Arduino. Existen proyectos, entre otros, para permitirle ejecutar código Node.js en él usando elJohnny cincoproyecto, código Python usandopyserialy Go code conGobot, pero el lenguaje de programación Arduino es definitivamente en el que verá la mayoría de los tutoriales, ya que es la forma nativa y canónica de trabajar con estos dispositivos.

Las constantes integradas del lenguaje de programación Arduino

Arduino establece dos constantes que podemos usar para

HIGHequivale a un alto nivel de voltaje, que puede diferir según el hardware (> 2V en placas de 3.3V como Arduino Nano,> 3V en placas de 5V como Arduino Uno)LOWequivale a un nivel bajo de voltaje. Nuevamente, el valor exacto depende de la placa utilizada.

Entonces tenemos 3 constantes que podemos usar en combinación con elpinMode()función:

  • INPUTestablece el pin como pin de entrada
  • OUTPUTestablece el pin como pin de salida
  • INPUT_PULLUPestablece el pin como una resistencia pull-up interna

La otra constante que tenemos esLED_BUILTIN, que apunta al número del pin integrado, que normalmente equivale al número13.

Además de esto, tenemos las constantes C / C ++trueyfalse.

Constantes matemáticas de Arduino

  • M_PIla constante pi3.14159265358979323846)
  • M_Ela constante e
  • M_LN10 the natural logarithm of the number 10.
  • M_LN2 the natural logarithm of the number 2.
  • M_LOG10E the logarithm of the e to base 10.
  • M_LOG2E the logarithm of the e to base 2.
  • M_SQRT2 the square root of 2.
  • NANla constante NAN (no un número).

Funciones integradas del lenguaje de programación Arduino

En esta sección, voy a hacer una referencia para las funciones integradas proporcionadas por 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 el Arduino se apaga y se reinicia.
  • 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 elHIGHoLOWconstante.
  • digitalWrite()escribe unHIGHoLOWvalor a un pin de salida digital. Pasas el número pin yHIGHoLOWcomo parámetros.
  • pinMode()establece un pin para que sea una entrada o una salida. Pasas el número de pin y elINPUToOUTPUTvalor como parámetros.
  • pulseIn()lee un pulso digital deLOWaHIGHy luego aLOWde nuevo, o deHIGHaLOWy paraHIGHde nuevo en un alfiler. El programa se bloqueará hasta que se detecte el pulso. Usted especifica el número de pin y el tipo de pulso que desea detectar (LHL o HLH). Puede especificar un tiempo de espera opcional para dejar de esperar ese pulso.
  • pulseInLong()es lo mismo quepulseIn(), excepto que se implementa de manera diferente y no se puede usar si las interrupciones están desactivadas. Las interrupciones suelen desactivarse para obtener un resultado más preciso.
  • shiftIn()lee un byte de datos un bit a la vez desde un pin.
  • shiftOut()escribe un byte de datos un bit a la vez en un pin.
  • tone()envía una onda cuadrada en un pin, que se utiliza para que los timbres / altavoces reproduzcan tonos. Puede especificar el pin y la frecuencia. Funciona tanto en pines digitales como analógicos.
  • noTone()detiene eltone()onda generada en un pin.

E / S analógicas

  • 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 5V en placas de 5V y 3.3V en placas de 3.3V.
  • analogWrite()escribe un valor analógico en un pin
  • analogReadResolution()le 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()le 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)

Funciones de tiempo

  • delay()pausa el programa durante un número de milisegundos especificado como parámetro
  • delayMicroseconds()pausa el programa durante un número de microsegundos especificado como parámetro
  • micros()el número de microsegundos desde el inicio del programa. Se reinicia después de ~ 70 minutos debido a un desbordamiento
  • millis()el número de milisegundos desde el inicio del programa. Se reinicia después de ~ 50 días debido a un desbordamiento

Funciones matemáticas

  • abs()el valor absoluto de un número
  • constrain()restringe un número a estar dentro de un rango,ver uso
  • map()vuelve a mapear un número de un rango a otro,ver uso
  • max()el máximo de dos números
  • min()el mínimo de dos números
  • pow()el valor de un número elevado a una potencia
  • sq()el cuadrado de un número
  • sqrt()la raíz cuadrada de un número
  • cos()el coseno de un ángulo
  • sin()el seno de un ángulo
  • tan()la tangente de un ángulo

Nota: hay más funciones matemáticas integradas si las necesita,documentado aquí.

Trabajar con caracteres alfanuméricos

  • 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 char es un carácter ASCII
  • isControl()comprueba si un char es unpersonaje de control
  • isDigit()comprueba si un carácter es un número
  • isGraph()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 una puntuación (una coma, un punto y coma, un signo de exclamación, etc.)
  • isSpace()comprueba si un carácter es un espacio, alimentación de formulario\f, nueva línea\n, retorno de carro\r, pestaña horizontal\to pestaña vertical\v.
  • isUpperCase()comprueba si un carácter es una letra en mayúsculas
  • isWhitespace()comprueba si un carácter es un carácter de espacio o una pestaña horizontal\t

Generación de números aleatorios

  • random()generar un número pseudoaleatorio
  • randomSeed()inicializar el generador de números pseudoaleatorios con un número inicial arbitrario

En Arduino, como en la mayoría de los lenguajes, es imposible obtener números realmente aleatorios, y la secuencia es siempre la misma, así que la siembras con la hora actual o (en el caso de Arduino) puedesleer la entrada de un puerto analógico.

Trabajar con bits y bytes

  • bit()calcula el valor de un bit (0 = 1, 1 = 2, 2 = 4, 3 = 8…)
  • bitClear()borrar (establece en 0) un poco de una variable numérica. Acepta un número y el número del bit empezando por la derecha
  • bitRead()leer un poco de un número. Acepta un número y el número del bit empezando por la derecha
  • bitSet()pone a 1 un pequeño número. Acepta un número y el número del bit empezando por 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 empezando por 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 inferior (más a la derecha) de una variable de palabra (que tiene 2 bytes)

Interrupciones

  • noInterrupts()deshabilita las interrupciones
  • interrupts()vuelve a habilitar las interrupciones después de haber sido deshabilitadas
  • attachInterrupt()permitir que un pin de entrada digital sea una interrupción. Diferentes tableros tienen diferentes pines permitidos,consultar los documentos oficiales.
  • detachInterrupt()deshabilita una interrupción habilitada usandoattachInterrupt()

Más tutoriales de electrónica: