Introduction au langage de programmation Arduino

Comment pouvez-vous écrire des programmes pour votre carte Arduino? Arduino, nativement, prend en charge un langage que nous appelons le langage de programmation Arduino, ou langage Arduino.

Comment pouvez-vous écrire des programmes pour votre carte Arduino?

Arduino, nativement, prend en charge un langage que nous appelons le langage de programmation Arduino, ou langage Arduino.

Ce langage est basé sur leCâblageplate-forme de développement, qui à son tour est basée surTraitement, qui si vous n'êtes pas familier avec, est cep5.jsest basé sur. C'est une longue histoire de projets s'appuyant sur d'autres projets, de manière très Open Source. L'IDE Arduino est basé sur l'IDE de traitement et l'IDE de câblage qui se base dessus.

Lorsque nous travaillons avec Arduino, nous utilisons couramment l'IDE Arduino (environnement de développement intégré), un logiciel disponible pour toutes les principales plates-formes de bureau (macOS, Linux, Windows), ce qui nous donne 2 choses: un éditeur de programmation avec prise en charge des bibliothèques intégrées, et un moyen de compiler et de charger facilement nos programmes Arduino sur une carte connectée à l'ordinateur.

Le langage de programmation Arduino est essentiellement un cadre construit sur C ++. Vous pouvez affirmer que ce n'est pas un vrai langage de programmation dans le terme traditionnel, mais je pense que cela permet d'éviter la confusion pour les débutants.

Un programme écrit dans le langage de programmation Arduino est appeléesquisser. Une esquisse est normalement enregistrée avec le.inoextension (depuis Arduino).

La principale différence avec «normal»Cou C ++ est que vous enveloppez tout votre code dans 2 fonctions principales. Vous pouvez bien sûr en avoir plus de 2, mais tout programme Arduino doit en fournir au moins 2.

L'un s'appellesetup(), l'autre s'appelleloop(). Le premier est appelé une fois, lorsque le programme démarre, le second est appelé à plusieurs reprises pendant que votre programme est en cours d'exécution.

Nous n'avons pas demain()fonction comme vous en avez l'habitude en C / C ++ comme point d'entrée d'un programme. Une fois que vous compilez votre croquis, l'EDI s'assurera que le résultat final est un programme C ++ correct et ajoutera essentiellement la colle manquante en le prétraitant.

Tout le reste est du code C ++ normal, et comme C ++ est un sur-ensemble de C, tout C valide est également un code Arduino valide.

Une différence qui pourrait vous causer des problèmes est que même si vous pouvez générer votre programme sur plusieurs fichiers, ces fichiers doivent tous se trouver dans le même dossier. Cela peut être une limitation de rupture si votre programme devient très volumineux, mais à ce stade, il sera facile de passer à une configuration C ++ native, ce qui est possible.

Les bibliothèques intégrées qui vous permettent d'intégrer facilement les fonctionnalités fournies par la carte Arduino font partie du langage de programmation Arduino.

Votre premier programme Arduino impliquera sûrement d'allumer la lumière, puis de l'éteindre. Pour ce faire, vous utiliserez lepinMode(),delay()etdigitalWrite()fonctions, ainsi que des constantes commeHIGH,LOW,OUTPUT.

Comme ça, le premier projet Arduino canonique (le «Hello, World!»):

#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); }

Tout cela fait partie du langage de programmation Arduino, ou nous ferions mieux de l'appelersuiteoubibliothèque.

Prise en charge d'une autre langue

Pour rappel, je tiens à noter que vous n'êtes pas limité à l'utilisation de ce langage et de l'IDE pour programmer un Arduino. Des projets existent, entre autres, pour vous permettre d'exécuter du code Node.js dessus en utilisant leJohnny Fiveprojet, code Python utilisantpyserialet Go code avecGobot, mais le langage de programmation Arduino est certainement celui sur lequel vous verrez la plupart des didacticiels, car c'est la manière native et canonique de travailler avec ces appareils.

Les constantes intégrées du langage de programmation Arduino

Arduino définit deux constantes que nous pouvons utiliser pour

HIGHéquivaut à un niveau de tension élevé, qui peut différer selon le matériel (> 2V sur les cartes 3.3V comme Arduino Nano,> 3V sur les cartes 5V comme Arduino Uno)LOWéquivaut à un faible niveau de tension. Encore une fois, la valeur exacte dépend de la carte utilisée

Ensuite, nous avons 3 constantes que nous pouvons utiliser en combinaison avec lepinMode()fonction:

  • INPUTdéfinit la broche comme broche d'entrée
  • OUTPUTdéfinit la broche comme broche de sortie
  • INPUT_PULLUPdéfinit la broche comme une résistance de rappel interne

L'autre constante que nous avons estLED_BUILTIN, qui indique le numéro de la broche embarquée, qui équivaut généralement au nombre13.

En plus de cela, nous avons les constantes C / C ++trueetfalse.

Constantes mathématiques Arduino

  • M_PIla constante pi (3.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 (pas un nombre).

Fonctions intégrées du langage de programmation Arduino

Dans cette section, je vais faire une référence pour les fonctions intégrées fournies par le langage de programmation Arduino.

Cycle de vie du programme

  • setup()cette fonction est appelée une fois, lorsque le programme démarre et lorsque l'Arduino est arrêté et redémarré.
  • loop()cette fonction est appelée à plusieurs reprises pendant l'exécution du programme Arduino.

Gestion des E / S

Les fonctions suivantes vous aident à gérer les entrées et les sorties de votre appareil Arduino.

E / S numériques

  • digitalRead()lit la valeur à partir d'une broche numérique. Accepte un numéro de broche comme paramètre et renvoie leHIGHouLOWconstant.
  • digitalWrite()écrit unHIGHouLOWvaleur à une broche de sortie numérique. Vous passez le code PIN etHIGHouLOWcomme paramètres.
  • pinMode()définit une broche comme une entrée ou une sortie. Vous passez le numéro de broche et leINPUTouOUTPUTvaleur en tant que paramètres.
  • pulseIn()lit une impulsion numérique à partir deLOWàHIGHpuis àLOWà nouveau, ou deHIGHàLOWet àHIGHà nouveau sur une épingle. Le programme se bloquera jusqu'à ce que le pouls soit détecté. Vous spécifiez le numéro de broche et le type d'impulsion que vous souhaitez détecter (LHL ou HLH). Vous pouvez spécifier un délai d'expiration facultatif pour arrêter d'attendre cette impulsion.
  • pulseInLong()est le même quepulseIn(), sauf qu'il est implémenté différemment et qu'il ne peut pas être utilisé si les interruptions sont désactivées. Les interruptions sont généralement désactivées pour obtenir un résultat plus précis.
  • shiftIn()lit un octet de données un bit à la fois à partir d'une broche.
  • shiftOut()écrit un octet de données un bit à la fois sur une broche.
  • tone()envoie une onde carrée sur une broche, utilisée pour les buzzers / haut-parleurs pour jouer des tonalités. Vous pouvez spécifier la broche et la fréquence. Il fonctionne à la fois sur les broches numériques et analogiques.
  • noTone()arrête letone()généré vague sur une épingle.

E / S analogiques

  • analogRead()lit la valeur à partir d'une broche analogique.
  • analogReference()configure la valeur utilisée pour la plage d'entrée supérieure dans l'entrée analogique, par défaut 5V dans les cartes 5V et 3,3V dans les cartes 3,3V.
  • analogWrite()écrit une valeur analogique sur une broche
  • analogReadResolution()vous permet de modifier la résolution des bits analogiques par défaut pouranalogRead(), par défaut 10 bits. Fonctionne uniquement sur des appareils spécifiques (Arduino Due, Zero et MKR)
  • analogWriteResolution()vous permet de modifier la résolution des bits analogiques par défaut pouranalogWrite(), par défaut 10 bits. Fonctionne uniquement sur des appareils spécifiques (Arduino Due, Zero et MKR)

Fonctions de temps

  • delay()met le programme en pause pendant un nombre de millisecondes spécifié comme paramètre
  • delayMicroseconds()met le programme en pause pendant un nombre de microsecondes spécifié comme paramètre
  • micros()le nombre de microsecondes depuis le début du programme. Réinitialise après ~ 70 minutes en raison d'un débordement
  • millis()le nombre de millisecondes depuis le début du programme. Réinitialise après ~ 50 jours en raison d'un débordement

Fonctions mathématiques

  • abs()la valeur absolue d'un nombre
  • constrain()contraint un nombre à être compris dans une plage,voir l'utilisation
  • map()remappe un nombre d'une plage à une autre,voir l'utilisation
  • max()le maximum de deux nombres
  • min()le minimum de deux nombres
  • pow()la valeur d'un nombre élevé à une puissance
  • sq()le carré d'un nombre
  • sqrt()la racine carrée d'un nombre
  • cos()le cosinus d'un angle
  • sin()le sinus d'un angle
  • tan()la tangente d'un angle

Remarque: il y a plus de fonctions mathématiques intégrées si vous en avez besoin,documenté ici.

Travailler avec des caractères alphanumériques

  • isAlpha()vérifie si un caractère est alpha (une lettre)
  • isAlphaNumeric()vérifie si un caractère est alphanumérique (une lettre ou un chiffre)
  • isAscii()vérifie si un caractère est un caractère ASCII
  • isControl()vérifie si un caractère est uncaractère de contrôle
  • isDigit()vérifie si un caractère est un nombre
  • isGraph()vérifie si un caractère est un caractère ASCII imprimable et contient du contenu (ce n'est pas un espace, par exemple)
  • isHexadecimalDigit()vérifie si un caractère est un chiffre hexadécimal (AF 0-9)
  • isLowerCase()vérifie si un caractère est une lettre minuscule
  • isPrintable()vérifie si un caractère est un caractère ASCII imprimable
  • isPunct()vérifie si un caractère est une ponctuation (une virgule, un point-virgule, un point d'exclamation, etc.)
  • isSpace()vérifie si un caractère est un espace, saut de formulaire\f, nouvelle ligne\n, retour chariot\r, onglet horizontal\t, ou onglet vertical\v.
  • isUpperCase()vérifie si un caractère est une lettre en majuscules
  • isWhitespace()vérifie si un caractère est un espace ou une tabulation horizontale\t

Génération de nombres aléatoires

  • random()générer un nombre pseudo-aléatoire
  • randomSeed()initialiser le générateur de nombres pseudo-aléatoires avec un nombre initial arbitraire

Dans Arduino, comme dans la plupart des langues, il est impossible d'obtenir des nombres vraiment aléatoires, et la séquence est toujours la même, donc vous la semez avec l'heure actuelle ou (dans le cas d'Arduino) vous pouvezlire l'entrée d'un port analogique.

Travailler avec des bits et des octets

  • bit()calcule la valeur d'un bit (0 = 1, 1 = 2, 2 = 4, 3 = 8…)
  • bitClear()clear (met à 0) un peu d'une variable numérique. Accepte un nombre et le numéro du bit à partir de la droite
  • bitRead()lire un peu un nombre. Accepte un nombre et le numéro du bit à partir de la droite
  • bitSet()met à 1 un peu d'un nombre. Accepte un nombre et le numéro du bit à partir de la droite
  • bitWrite()écrire 1 ou 0 sur un bit spécifique d'un nombre Accepte un nombre, le numéro du bit partant de la droite et la valeur à écrire (0 ou 1)
  • highByte()obtenir l'octet de poids fort (le plus à gauche) d'une variable mot (qui a 2 octets)
  • lowByte()obtenir l'octet de poids faible (le plus à droite) d'une variable de mot (qui a 2 octets)

Les interruptions

  • noInterrupts()désactive les interruptions
  • interrupts()réactive les interruptions après leur désactivation
  • attachInterrupt()permettent à une broche d'entrée numérique d'être une interruption. Différentes cartes ont des broches autorisées différentes,consultez la documentation officielle.
  • detachInterrupt()désactive une interruption activée à l'aide deattachInterrupt()

Plus de tutoriels d'électronique: