Le langage Arduino

.

Mise à jour le 08/01/2020.Article expliquant la syntaxe du langage de programmation et l’ensemble des règles d’écriture liées à ce langage .Voici donc les règles qui régissent l’écriture du langage Arduino.

Sommaire :

 

.

 

Retour au sommaire

separateur-redohm-001

La syntaxe du langage

 

 

 

La syntaxe d’un langage de programmation est l’ensemble des règles d’écriture liées à ce langage .Voici donc les règles qui régissent l’écriture du langage Arduino.

A savoir :

En programmation, Il faut toujours garder à l’esprit ceci. La complexité d’un programme agit directement sur la vitesse de celui-ci. Plus un programme sera compliqué, par exemple en possédant de nombreuses boucles imbriquées, plus le processeur mettra de temps à traiter les informations. En revanche, plus nous utiliserons d’opérations simples ou d’instructions peu complexes, plus les performances du processeur seront à la hausse.

Les commentaires.

Les commentaires sont des lignes de codes qui seront ignorées par le programme .Elles ne servent à rien lors de l’exécution du programme.Il faut savoir qu’il est très important de mettre des commentaires pour l’explication de l’opération effectuée , ou permettre de reprendre le programme les jours suivants ou , simplement  pour la maintenance et les modifications futures .

Deux types de syntaxe pour les commentaires.

Sur une ligne syntaxe. (  //  )

Sur plusieurs lignes avec la même syntaxe.

Sur plusieurs lignes avec la syntaxe suivante ( /* ) et se termine par  ( */   ).

 

 

Retour au sommaire

La fin des lignes de code .

Toute les lignes de code se termine par un point virgule ;

 .

Retour au sommaire

 

La definition et Le contenu d’une fonction.

Une fonction est un bloc d’instruction que l’on peut appeler  à tout endroit du programme 

Le contenu d’une fonction est delimité par des accolades -> {   xxxxx xx  }

Les paramétres d’une fonction 

Les paramétres d’une fonction sont contenus par des parenthéses -> ( cccc xx )

 

Exemple de fonctions et leurs descriptions :

  • analogRead ()  Lis la valeur de la broche analogique spécifiée. La carte Arduino contient un convertisseur analogique-numérique 10 bits (8 canaux sur le Mini et Nano, 16 sur le Mega). Cela signifie qu’il va mapper des tensions d’entrée entre 0 et 5 volts dans des valeurs entières comprises entre 0 et 1023. Cela donne une résolution entre les lectures de: 5 volts / 1024 unités ou, 0,0049 volts (4,9 mV) par unité. La plage d’entrée et la résolution peuvent être modifiées en utilisant analogReference ()  
  • analogReference () : Configure la tension de référence utilisée pour l’entrée analogique (c’est-à-dire la valeur utilisée en haut de la plage d’entrée).
  • analogWrite () : Écrit une valeur analogique ( signal PWM ) sur une broche. Peut être utilisé pour allumer une LED à différentes intensités ou conduire un moteur à différentes vitesses. Après un appel analogWrite(), la broche générera une onde carrée régulière du rapport cyclique spécifié jusqu’au prochain appel à analogWrite()(ou à un appel vers digitalRead()ou digitalWrite()) sur la même broche. La fréquence du signal PWM sur la plupart des broches est d’environ 490 Hz. Sur les cartes Uno et similaires, les broches 5 et 6 ont une fréquence d’environ 980 Hz.
    Sur la plupart des cartes Arduino (celles avec ATmega168 ou ATmega328P), cette fonction fonctionne sur les broches 3, 5, 6, 9, 10 et 11. Sur l’Arduino Mega, elle fonctionne sur les broches 2 – 13 et 44 – 46. Les cartes avec ATmega8 ne prennent analogWrite()en charge que les broches 9, 10 et 11. 
  • attachInterrupt () : Le premier paramètre à attacherInterrupt est un numéro d’interruption. Normalement, vous devez utiliser digitalPinToInterrupt (pin) pour traduire la broche numérique réelle en un numéro d’interruption spécifique. Par exemple, si vous vous connectez à la broche 3, utilisez digitalPinToInterrupt (3) comme premier paramètre à attacherInterrupt.
  • cos () Calcule le cosinus d’un angle (en radians). Le résultat sera compris entre -1 et 1.
  • delay() : Mets le programme en pause pour la durée (en millisecondes) spécifiée en paramètre. (Il y a 1000 millisecondes par seconde.) 
  • isControl () : Analyse si un caractère est un caractère de contrôle. Renvoie true si thisChar est un caractère de contrôle.
  • millis : Renvoie le nombre de millisecondes écoulées depuis que la carte Arduino a commencé à exécuter le programme en cours. Ce nombre va déborder (revenir à zéro) après environ 50 jours.
  • pow () : Calcule la valeur d’un nombre élevé à une puissance. pow () peut être utilisé pour élever un nombre à une puissance fractionnelle. Ceci est utile pour générer un mappage exponentiel des valeurs ou des courbes.
  • sq () : Calcule le carré d’un nombre: le nombre multiplié par lui-même.
  • sqrt () : Calcule la racine carrée d’un nombre.

.

Retour au sommaire

separateur-redohm-001

 Définition d’une variable numérique.

On peut définir une variable comme une boite ou l’on stock des balles .Une variable est une boite ou l’on stock un nombre ,et comme il existe une multitude de nombres: Exemple entiers ,décimaux etc …Il faut donc assigner un type à cette variable .

 

Type de variable 

Type Type de nombre    Valeur mini et maximale du nombre  Nombre de bits  Nombre d’octets 
 byte entier  0 à 255  8 bits   1 octet
int entier    -32768 à 32767  16 bits   2 octets
 long entier  147 483 648 à +2 147 483 647  32 bits  4 octets 
 char entier   -128 à 128  8 bits   1 octets 
float  décimale -3.4*10 38­ puissance 38 à 3.4*10 puissance 38  32 bits 4 octets 
double décimale  -3.4*10 38­ puissance 38 à 3.4*10 puissance 38  32 bits 4 octets

Un microcontrôleur n’est pas un ordinateur. Nous n’avons pas la même capacité de mémoire vive , et la vitesse de la CPU est beaucoup plus lente, 3GHz pour un ordinateur et, 16Mhz pour un  microcontrôleur ,il faut donc bien choisir son type de variable .

 

 

 

Syntaxe

int variable = valeur;

  • variable : le nom de votre variable de type int
  • valeur : la valeur d’initialisation de la variable.

A savoir :

    • Une variable déclarée sans aucune valeur affectée est initialisée avec la valeur zéro.
    • La valeur prise par une variable peut être  modifiée au cours du programme .
    • Les constantes entières sont par défaut de type int.
    • Choisir le type de variables assez grand pour permettre de stocker un plus grand résultat suite aux calculs.
  • Les variables de type float ont seulement 6 à 7 chiffres de précision. Ceci concerne le nombre total de chiffres, pas seulement le nombre à droite de la virgule. Pour avoir un résultat en float  , la déclaration n’est pas suffisante . Il faut aussi qu’un terme de l’opération soit exprimé sous forme décimale,( Voir l’exemple )
Exemple de programme :

a). Variable du type byte

 

.

Retour au sommaire

separateur-redohm-001

Constantes particulière .

– true et false
Données logiques ( boolean ) qui ne peut contenir que deux valeurs true ( vrai en français ) ou false ( faux en français ) .Elle occupe un octet en mémoire .
– HIGH et LOW
– INPUT et OUTPUT

.

Retour au sommaire

 

separateur-redohm-001

Les opérations simple .

Les opérateur arithmétique du C sur Arduino ont la même signification que leurs équivalents en mathématiques:
-L’addition [  + ]
-La soustraction [ ]
-La multiplication [ * ]
-La division [ / ]
-Modulo [ % ]

Exemple de programme :

.

Retour au sommaire

separateur-redohm-001

Opérateur d’affectation composée .

Le langage C permet d’abréger l’écriture de certaine opération arithmétique comme :

++ incrémentation  x++ équivaut à x=x+1
décrémentation x– équivaut à x=x-1
+= addition composée x+=y équivaut à x=x+y
-= soustraction composée x-=y équivaut à x=x*y
*= multiplication composée x*=y équivaut à x=x*y
/= division composée x/=y équivaut x=x/y

.

Retour au sommaire

separateur-redohm-001

Opérateur de comparaison .

Les opérateur de comparaison du C sur Arduino ont la même équivalence  que leurs homologues en mathématique .

  • Égal à  : [  ==  ]
  • Différent de  [  !=  ]
  • Inférieur : [  <  ]
  • Supérieur : [  >  ]
  • inférieur ou égal  : [  <=  ]
  • Supérieur ou égal : [  >=  ]
  • Affectation : [  =   ]

.

Retour au sommaire

separateur-redohm-001

Les conditions ou les instructions de contrôle . (IF , switch)

Le langage Arduino possède plusieurs instructions de contrôle comme

  • if

if qui est utilisé avec un opérateur de comparaison vérifie si une certaine condition a été atteinte, telle qu’une entrée étant supérieur à un certain nombre comme ci-dessous.

Exemple de programme :

  • switch

Comme if/else , l’instruction switch permet de réaliser des branchements conditionnels .L’instruction switch teste la valeur d’une variable par rapport à différentes valeurs.

switch ( variable à teste )
case 1: // option 1
// exécution si la condition est remplie 
case 2: // option 2
      // exécution si la condition est remplie 

Exemple de programme : ( en cours )

.

Retour au sommaire

separateur-redohm-001

 La boucle for .

Présentation des boucles for

Une boucle est une instruction qui permet de répéter un  morceau de programme.Arduino nous offre 3 types de boucles différentes qui correspondent en général à l’ensemble de nos besoins.
C’est trois boucles sont : la boucle for , la boucle while , la boucle do / while

  • La boucle for

Syntaxe de la boucle for

for (initialisation ; condition ; incrément )
{
code exécutées dans la boucle ;
}

.

Exemple de programme pour la boucle du type for :

a) Application de la boucle for comptant de 0 à 100 en incrémentant de 1 à chaque passage dans la boucle , avec affichage sur le terminal des valeurs .

.

 

Retour au sommaire

b) Application de la boucle for comptant de 0 à 100 en incrémentant de 1 à chaque passage dans la boucle puis on décrémente la même valeur de -1 à chaque passage dans la boucle suivante.

.

Retour au sommaire

separateur-redohm-001

 La boucle While et do-while

La boucle s’exécute tant que l’expression est vrai .

A savoir : L’expression est testée avant que ne soit exécutée la boucle .Si elle est fausse la boucle ne sera jamais exécutée  .

Syntaxe de la boucle while .

int x=0 ;
while (expression ){
code exécutées dans la boucle ;
}

.

Exemple de programme pour la boucle du type while :

a) Programme pour le fonctionnement de la boucle while . La boucle tourne tant que l’expression est vrai dans ce cas pendant 50 passages .

.

Retour au sommaire

separateur-redohm-001

Gestion du temps . 

1) Présentation .

4 fonctions sont prévues pour gérer le temps ( pour créer des temporisations, des bases de temps pour des incrémentations etc …. ) .Deux de ces fonctions bloquent le programme qui correspondent au délai fixé dans le code ,le microcontrôleur ne s’arrête pas de fonctionner mais ne fait rien d’autre de consommer du temps .Ce sont les codes delay() et delayMicroseconds(). Enfin 2 autres fonctions existent, elles ont pour but de donner le temps qui s’est écoulé depuis le démarrage du programme  .Ces deux solutions peuvent être utilisées comme temporisation ou pause non bloquantes du programme .C’est la  fonction millis() qui est exprimée en millisecondes ( valeur maximum du compteur une cinquantaine de jours ) et micro() exprimé en microsecondes la valeur max du compteur étant pour cette dernière 70 minutes .

  • delay() 

Syntaxe de la fonction delay() et utilisation .

Réalise un arrêt dans  l’exécution du programme pour la durée (en millisecondes)

Voici une application avec la fonction delay  pour un clignoteur 

  • millis()

Syntaxe de la fonction millis() et utilisation .( Pause dite non bloquante )

unsigned long debut ;
debut = millis();
while(millis()-debut<1000 )

 

Exemples :  Voici un programme qui possède 2 bases de temps différentes une de 1 seconde et  l’autre de 5 secondes dans la première on  incrémente une valeur de 1 a chaque  passage et l’autre , on incrémentera de 5  a chaque passage .

Programme ci-dessus à telecharger.
Téléchargement -> pause_dite_non_bloquante_001

 

 

 

  • micros()

Syntaxe de la fonction micros()

unsigned long temps ;
temps=micros();
while(micros()-temps<1000)
Cette fonction est proche de la précédente. Elle a pour but de donner comme résultat le temps qui s’est écoulé depuis le démarrage du programme mais exprimé en microsecondes .

A savoir : elle ne peut atteindre un maximum de 70 minute

.

Retour au sommaire

 Fonctions propres à Arduino

Configuration du mode d’entrée sortie des broches pinMode

Les broches numériques des cartes Arduino sont par défaut configurées en entrée au démarrage, et par conséquent elles ne nécessitent pas d’être explicitement déclarées en ENTREE à l’aide de l’instruction pinMode().

La broche à configurer doit être précisée dans les paramètres de la fonction sous la forme d’un nombre .Celui-ci est représenté par un numéro  qui est gravé sur la carte .

Arduino Uno exemple de marquage de broche

Arduino Uno exemple de marquage de broche

 

Ci-dessous un tableau récapitulatif des cartes avec leurs nombres d ‘entrées sorties .

Arduino Micro 20 entrées ou sorties(dont 7 fournissent la sortie PWM )
Genuino MICRO (Hors USA) 20 entrées ou sorties(dont 7 fournissent la sortie PWM )
Arduino Uno 20 entrées ou sorties
Arduino ZERO ( USA) 20 entrées ou sorties
Genuino ZERO (Hors USA) 20 entrées ou sorties
Arduino LEONARDO 20 entrées ou sorties(dont 6 fournissent la sortie PWM)
Arduino Mega 2560 54 entrées ou sorties  (dont 14 fournissent la sortie PWM)
Arduino DUE 54 entrées ou sorties  (dont 12 fournissent la sortie PWM)
Arduino Yun 20 broches d’E/S dont (dont 6 fournissent la sortie PWM
Arduino M0 14 broches d’E/S dont (dont 12 fournissent la sortie PWM)

Exemple d’utilisation de la fonction pinMode()

.

Retour au sommaire

Entrée Pullup

1) Présentation .

Avec cette fonction, il est possible d’utiliser un interrupteur ou un bouton-poussoir sans résistance de  tirage ou même de piloter une entrée avec un simple fils sans pour autant créer des états électriques parasites .

Principe de la résistance pullup . En utilisant la commande pinMode() et intégrant la fonction INPUT_PULLUP, il est possible d’utiliser un interrupteur ou simplement un fil pour piloter une entrée. La seule difficulté c’est de bien intégrer que le comportement du mode de l’entrée fonctionnera en inverse , voir l’exemple 29_09–001

.

Retour au sommaire

2) Syntaxe de la fonction pullup

pinMode(2,INPUT_PULLUP);

redohm-pullup-001.

3) Programme d’exemple d’utilisation de la fonction  pullup

Programme ci-dessus à télécharger.
Téléchargement ->entree_avec_input_pullup

.

Retour au sommaire

 

 Moniteur série 

Affichage  de nombres décimaux non entier  sur le moniteur série.

Rappel: Un nombre décimal entier s’écrit sous forme décimale sans virgule.

Exemple  : 888 , 1254 ,  5  etc.

Rappel: Un nombre décimal non entier, s’écrit sous la forme suivante

Exemple : 172.3 , 6.25415.6654  etc.

Syntaxe pour l’affichage : Serial.print(données, nombre de chiffres après la virgule  )

A savoir : à défaut de paramètres le chiffre s’affichera avec 2 décimales derrière la virgule.

Pour les nombres à virgules (float), le paramètre précise le nombre de chiffres après la virgule à utiliser.

Exemple d’affichage :

 

Copie d’écran du résultat du code ( cliquez sur l’image pour agrandir )

Affichage de nombres décimaux non entier sur le moniteur série.

Affichage de nombres décimaux non entier sur le moniteur série.

.

Retour au sommaire

 

Raccourcis clavier pour faciliter votre travail dans l’editeur Arduino

Ctrl+C, Ctrl+X, Ctrl+V

Ctrl+C est utilisé pour copier, Ctrl+X pour couper et Ctrl+V pour coller un élément sélectionné. Il peut s’agir d’une partie de texte, d’un fichier ou d’un dossier.

Copier un élément laisse l’original intact et en effectue une copie dans le “presse-papier” qui peut être collée (autrement dit placée) à l’endroit désiré avec le raccourci Ctrl+V.

Ctrl+X va couper l’élément, c’est-à-dire qu’il retire la version originale et la déplace dans le presse-papier pour être collée ailleurs, également avec Ctrl+V.

Ctrl+Z et Ctrl+Y

Ctrl+Z va annuler la dernière action qui a été effectuée et Ctrl+Y va la refaire.

Par exemple, disons que tu rédiges un texte et que tu n’es pas satisfait des derniers mots. Tu peux les annuler en utilisant Ctrl+Z à quelques reprises. Si tu changes d’idée et veux revoir les mots ou la phrase annulée, Ctrl+Y te permet de revenir en arrière.

Ces deux raccourcis sont un peu comme une façon de te déplacer d’avant en arrière dans l’historique des changements que tu apportes à un fichier (que ce soit du texte ou, par exemple, des retouches sur une image)

Ctrl+S

Ce raccourci permet de sauvegarder rapidement un document. Peu importe qu’on soit sur Word, Photoshop ou autre, c’est le raccourci que la très grande majorité des programmes reconnaissent pour la sauvegarde rapide.

Ctrl+P

Utiliser le raccourci Ctrl+P va ouvrir la fenêtre d’impression du document en cours. C’est l’équivalent, mais en plus rapide, d’aller sélectionner l’onglet “fichier” et l’option “imprimer”.

Ctrl+F

Ctrl+F va ouvrir la barre de recherche d’à peu près n’importe quel programme/application.

C’est très utile, par exemple, si tu veux chercher une information précise dans un long texte. En utilisant ce raccourci, tu peux entrer un mot clef et le rechercher rapidement dans la page ou le document.

C’est aussi très pratique pour la correction ou l’uniformisation de textes. Disons que tu écris un texte et que tu te rends compte qu’un mot n’est pas écrit avec une graphie uniforme au travers du document. En utilisant le raccourci Ctrl+F, tu peux rechercher le mot en question pour passer en revue les endroits où il apparaît dans le texte.

.

Retour au sommaire

.

separateur-redohm-001

Message suite à une erreur de programmation

Erreurs trouvées : exit status 1
missing terminating  » character

 

 

 

 

 

 

Dans notre cas,l’IDE arduino nous signale par le bandeau où se trouve l’erreur. Vous pourrez remarquer que nous ouvrons les guillemets mais nous ne les fermons pas. Quand on écrit une chaîne alphanumérique,on doit ouvrir et fermer les guillemets.

 

.

Retour au sommaire

.

separateur-redohm-001

Quelques erreurs à corriger pour les anciens programmes.

.

Erreurs trouvées : In file included from essai.cpp:1:
/essai.h:5:22: error: WProgram.h: No such file or directory

WProgram.h a été remplacé par Arduino.h, il faut donc mettre à jour tous vos programmes. Il faut écrire un code qui teste la version pour être compatible avec plusieurs environnements .

.

Erreurs trouvées : As of Arduino 1.0, the Wire.send() function was renamed to Wire.write() for con

Dans ce cas c’est très simple, puisque Arduino nous explique la cause et la solution. Mais ce n’est pas si simple, car la bibliothèque I2C (TwoWire ou Wire) hérite de Print, et il y a donc ambiguité lorsqu’on écrit :

Wire.write(0x09);

Il faut alors écrire :
Wire.write((byte)0x09);

.

Retour au sommaire

.

separateur-redohm-001

Notes et références 

Fournisseur  :

 

Information technique :

.

Retour au sommaire

.

separateur-redohm-001

Un probléme que faire ?

.

Pour tout problème de téléchargement ou pour nous suivre sur les réseaux sociaux voici les plateformes  sur lesquelles nous éditons.
Cliquez sur celle qui vous intéresse .

Facebook  Twitter  Youtube  

 

Retour au sommaire