Premier programme simple : écrire bonjour !

Saisie et enregistrement du code

Ouvrez votre logiciel Arduino et recopier soigneusement le code suivant :


void setup()
{
  Serial.begin(9600);
  Serial.print("Bonjour !");
}

void loop()
{
  // Vide, rien à répéter.
}

Vérifiez les majuscules sur les deux instructions commençant par Serial , ou le programme ne fonctionnera pas.
Vous remarquerez, dans le listing du programme, la présence des parenthèses ( ) et des accolades { }. Veillez à utiliser les bonnes aux bons endroits !

Juste après ce paragraphe vous avez une capture d'écran de l'environnement de développement Arduino. Le panneau d'édition à gauche, contient un programme simple qui envoie un message, contenant "Bonjour !" à la fenêtre du moniteur série située sur la droite.

Illustation de l'IDE et du programme bonjour
  • Cliquez sur le bouton [Vérifier] pour vous assurez que votre code n'a pas d'erreur de frappe,
  • regardez le texte dans le volet des messages (console des messages) : la taille binaire du croquis doit apparaître,
  • si elle est indiquée, le code compilé est prêt à être télécharger vers l'Arduino,
  • s'il y a une liste d'erreurs à la place, le compilateur vous indique qu'il ne peut pas compiler votre code. Il faut donc trouver la faute de frappe et la corriger,
  • s'il n'y a pas d'erreur, vous cliquez sur le bouton [Envoyer]. La ligne de statut affichera "Compilation du croquis…", "Téléversement …", puis "Téléversement Terminé",
  • après le téléchargement (lire Téléversement) complet du croquis (programme) , cliquez sur le bouton [Moniteur série],
  • si le message "Bonjour !" ne s'affiche pas juste après l'ouverture de la fenêtre du moniteur série, sélectionnez le paramètre "9600 bauds" dans le coin inférieur droit du moniteur,
  • et pour finir, utilisez la commande [Fichier, Enregistrer] (CTRL+S) pour enregistrer votre croquis. Donnez-lui le nom de : message_bonjour.

Comment fonctionne le code du programme "bonjour"

Une fonction est un conteneur (ou bloc) qui contient des instructions (lignes de code) qui sont traitées par l'Arduino pour exécuter certaines tâches.
Le language Arduino met à notre disposition deux blocs de fonctions internes : setup (initialisation) et loop (boucle).

Le bloc fonction setup

La fonction d'initialisation « setup » est illustrée ci-dessous.

Constitution de la fonction setup

L'Arduino exécute les instructions que vous inscrivez entre les accolades de la fonction d'initialisation, mais seulement une seule fois au début du programme (tâche initiale).

Dans cet exemple, les deux instructions sont des appels de fonction. Elles sont contenues entre les accolades et chaque instruction se termine par un point-virgule (comme en C, C++, PHP…).
Les fonctions appelées s'appellent "Serial.begin()" et "Serial.print()" ; elles sont déjà pré-écrites et contenues dans la bibliothèque de code intégrée dans le micro-contrôleur de la carte Arduino.

Remarque : sachant que setup() est une fonction, nous remarquons dans cet exemple q'une fonction peut faire appel à d'autres fonctions.

Serial.begin(9600) passe la valeur 9600 comme paramètre de vitesse (speed). Cela signifie que l'Arduino va échanger des messages avec le moniteur série, à un débit de données de 9600 bits par seconde. C'est à dire 9600 un ou zéro par seconde ; nous l'appelons communément vitesse de transmission.

Serial.print(Bonjour !) passe le message "Bonjour!" comme paramètre val. Cela signifie que l'Arduino va envoyer une série de un et de zéro au moniteur. Celui-ci décodera et affichera ce flux de série comme étant le message "Bonjour!".

Le bloc loop ou fonction loop

Une fois la phase d'initialisation terminée, l'Arduino passe automatiquement à la fonction de boucle (loop) et commence à éxécuter les instructions contenues entre ces accolades. Toutes les instructions contenues dans la boucle seront répétées indéfiniment (tant que la carte est sous tension).

Illustation de la fonction loop

Dans l'exemple que nous venons d'étudier, le programme est juste sensé afficher "Bonjour !" (une seule fois car nous sommes dans le bloc d'initialisation). La fonction de boucle ne contient pas de commande réelle. Il ya juste une notation qui permet à l'auteur du programme de mettre un commentaire.

Les commentaires

Ce type d'annotation permet, pendant une phase de relecture, la compréhention du programme pour soit ou par d'autres programmeurs. Nous pouvons aussi indiquer des dates de modification, le nom du programmeur ou expliquer le rôle de la fonction et des variables manipulées.
Tout ce qui est situé à droite de « // » sur une ligne donnée est considéré comme un commentaire. Le compilateur de la carte Arduino n'en tient pas compte (un compilateur est un logiciel qui transforme votre programme en codes compréhensibles par le micro-processeur). Voir l'exemple qui suit :


void loop()
{
 // cette ligne est un commentaire
 // celle-ci aussi : Positron-libre.com
 // cette ligne est encore un commentaire
}

Quand vous avez plusieurs ligne ou un groupe de lignes important à mettre en commentaire, il existe une autre notation.
Nous utilisons le slash étoile pour ouvrir une section de commentaire ; soit : /* .
Pour refermer les commentaires nous écrivons */.
Voir en exemple le code ci-dessous :


void loop()
{
 // Cette ligne est un commentaire
 /* Cette ligne débute une section de commentaires. 
 Ici nous sommes toujours en commentaire.
 Nous finissons les commentaires
 après la fin de la ligne suivante.
 */ 
}

Pour les débutants en programmation

Qu'est ce qu'une fonction ?

Une fonction est une « machine » ou « système » qui exécute un travail. C'est donc un bloc d'instructions qui peut être exécuté un nombre quelconque de fois.

  • Nous rentrons des valeurs dans la machine équivaut à dire : nous fournissons des paramètres en entrée de la fonction,
  • la machine fait son travail veut dire : la fonction utilise les paramètres et exécute des calculs,
  • la machine rend un résultat à la fin de son travail est équivalent à : quand elle a fini ses calculs, la fonction renvoie ou retourne une valeur. C'est ce que nous appelons la sortie, ou la valeur de retour.

Avec l'illustration ci-dessous, nous allons faire le paralèlle entre cette machine et le code informatique.

Constitution d'une fonction

Gabarit d'une fonction

La première ligne d'une fonction est sa signature ou prototype. Cette signature comporte trois parties.
Exemple avec int mutiplie_par_deux(int).

  • Le type de retour (int, c'est donc un nombre entier),
  • le nom de la fonction (mutiplie_par_deux),
  • la liste des paramètres entre parenthèses (un seul paramètre ici, c'est un nombre entier).

Ensuite, des accolades encapsulent les instructions contenues dans la fonction.

Syntaxe

Maintenant, regardons comment est inséré et utilisé une fonction dans un code informatique.
La syntaxe est la manière écrite d'utiliser la fonction ; voici un exemple : resultat = mutiplie_par_deux(6).

Les paramètres

Dans l'exemple ci-dessus (int) est un paramètre ; int est le nombre entier que nous désirons multiplier par deux (int est une notation issue de "integer" qui veut dire nombre entier en englais).

Comment faire passer des paramètres à la fonction

Les paramètres sont des valeurs dont la fonction a besoin pour faire ses calculs. La programmation nous permet de fournir ces valeurs à la fonction à l'intérieur des parenthèses situées dans chaque appel de fonction et à droite du nom de la fonction.

Le nom de la fonction

Le nom de la fonction sert à faire appel à cette fonction. Nous pouvons la nommer avec un nom qui évoque le travail quelle sait faire (racine_carre, multiplie, divise, additionne…).

Le résultat ou valeur de retour

Situé à gauche du nom de la fonction, la valeur de retour est stockée dans une case mémoire du système informatique (électronique aussi) qui utilise la fonction. Ce résultat est utilisé pour faire un autre calcul, être affiché ou envoyé sur un réseau, allumer un voyant…

Par exemple, dans la fonction int mutiplie_par_deux(int) le type retouné est int, le nom est mutiplie_par_deux et la liste des paramètres est un nombre entier (int).

A propos de void et des parenthèses vides

Qu'est-ce que "void" ?
Pourquoi des parenthèses vides après le nom de la fonction ?

Reprenons l'exemple, de la fonction void setup().
Void signifie rien ; certaines fonctions, comme setup ou loop, ne retourne aucune valeur quand elles sont appelées.
Paramètres () : une liste de paramètres vide signifie que ces fonctions n'ont pas besoin de recevoir de valeurs (ou variables d'entrées) quand elles sont appelées pour excécuter leur tâche.

Modifier le programme pour la répétition

Les programmes des microcontrôleurs s'exécutent généralement dans une boucle, ce qui signifie que une ou plusieurs instructions sont répétées sans arrêt. Rappelez-vous que la fonction loop répète automatiquement le code contenu dans son bloc (les instructions contenues entre ses accolades).

Essayons de déplacer Serial.print ("Bonjour!"); vers la fonction loop.
Pour ralentir la vitesse de répétition des messages et percevoir les effets de cette répétition, nous allons également ajouter une pause après chaque affichage grâce à la fonction delay().

Etapes de la modification du programme

  • Enregistrer votre programme message_bonjour sous un nouveau nom : message_repete,
  • Déplacer Serial.print("Bonjour !"); de setup vers l'intérieur du bloc loop,
  • Ajouter delay(1000); sur la ligne suivante,
  • Comparez vos modifications avec la figure ci-dessous et vérifier que tout est correct,
  • Chargez le programme vers l'Arduino, puis ouvrir le moniteur de série à nouveau.
Répétition horizontale du message dans le moniteur série

Explications

La ligne delay(1000); ajoutée, passe de la valeur 1000 comme paramètre à la fonction delay(). Le paramètre est un nombre entier et représente des millisecondes (ms).
De cette manière, nous demandons au programme d'attentre 1000 ms (soit 1 seconde) avant d'exécuter la prochaine instruction. Nous avons donc un premier affichage du message "Bonjour !", une attente d'une seconde, un affichage (puique c'est la seule instruction qui existe dans notre fonction loop), une attente, un affichage et ainsi de suite.

Le code


void setup()
{
  Serial.begin(9600);
}

void loop()
{
  Serial.print("Bonjour !");
  delay(1000);
}

Le message Bonjour sur des nouvelles lignes

Que diriez-vous d'avoir chaque message Bonjour sur une nouvelle ligne ?
Cela équivaut à voir les messages défiler vers le bas du moniteur, plutôt que longitudinalement. Tout ce que vous avez à faire est de changer print en println (println = imprimmer sur une ligne).

Génération d'une nouvelle ligne à chaque message

Le code


void setup()
{
  Serial.begin(9600);
}

void loop()
{
  Serial.println("Bonjour !");
  delay(1000);
}

Changer Serial.print ("Bonjour!") en Serial.println ("Bonjour!"),
rechargez le programme modifié et regardez le afficher chaque message bonjour sur une nouvelle ligne.

Le terme imprimer (print et println) est un terme générique pour commander un affichage ; cela peut-être un écran ou tout autre périphérique capable d'afficher du texte.

Accéder au guide de référence Arduino

Vous avez encore des questions ? Consultez la référence du langage Arduino. C'est un ensemble de pages, avec des liens, pour en apprendre plus à propos de setup, loop, print, println, delay, et beaucoup d'autres fonctions que vous pouvez utiliser dans vos prochains programmes.

Cliquez sur [Aide], puis sélectionnez [Référence].

Comment trouvez de l'aide sur la référence arduino

Après avoir cliquez sur [Référence], la page référence devrait s'ouvrir dans votre navigateur.
Essayez de regarder jusqu'au terme ou la fonction dont vous voulez appronfondir l'utilisation. Vous trouverez également "setup()", "loop()", et "delay()" sur la page principale.
Si vous êtes à la recherche des ressources "print" ou "println", il faudra dabord suivre le lien "sérial" dans le sous menu "Communication".