Le langage Arduino

Mise à jour le 30/09/2017.Article expliquant la syntaxe du 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.

 

Sommaire :

 

 

 

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

 

 

 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

 

 

 

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

 

 

 

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

 

 

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

 

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

 

Les conditions ou les instructions de contrôle .

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

 

 Les boucles.

Présentation des boucles for , while , do / while

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.

  • La boucle 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

 

 

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 .

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

 

 

Retour au sommaire

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 Retour  à la foire aux questions

Retour au menu