Découvrir la programmation en C et C++ avec Arduino

Présentation du cours

L'environnement Arduino a su se rendre très populaire au cours des 10 dernières années et doit cette popularité à une approche tendant à rendre la programmation assez facile grâce une communauté très active ayant contribuée au développement de nombreuses bibliothèques.

Cette facilité apparente repose très souvent sur des batteries d'exemples qui donnent l'illusion de savoir. Qu'en est-il en revanche dès qu'il faut aller au delà des exemples fournis avec les bibliothèques ? Au sortir des sentiers battus, on se rend vite compte qu'il faut également disposer de bases en programmation pour résoudre des problèmes plus complexes auxquels les exemples ne répondent évidemment pas.

L'enjeu de la séquence de cours qui suit consiste donc à étudier différents aspects de l'informatique embarquée à la sauce Arduino tout en fournissant de bonnes bases pour la programmation en C voire C++ avec l'objectif d'être autonome dès lors que les exemples s'avèrent insuffisants pour répondre à une problèmatique plus étendue.

Toutes les leçons proposées dans ce cours reposent sur l'usage d'un kit comprenant une carte Arduino Uno et tout un ensemble de composants tels que plaquettes de tests, résistance, LED, poussoir, capteurs, actionneurs ... Vous pouvez vous procurer ce matériel directement sur Amazon en cliquant sur l'image ci-dessous :

Starter Kit Composants Arduino pour les tutos geii.eu

 

Et pour voir la vidéo d'introduction de cette future longue série :

 

Variables, Affichage. Affectations et calculs

On aborde ici la structure d'un programme Arduino en répondant à la question : mais où est passée la fonction main() ?

On s'intéresse ensuite aux différents types de variables en C (entiers, réels, caractères), à leur déclaration, leur portée en illustrant clairment le mécanisme de création/destruction/conservation des variables. Noter que le mot clé static fait l'objet d'une attention toute particulière dans cette partie.

Conditions et Structures alternatives

On poursuit l'étude des bases du langage C++ avec les conditions et les structures alternatives (conditionnelles) : qu'est-ce qu'une condition ? Quels opérateurs utilisés pour l'écrire ? Quelle valeur renvoie-t-elle ? Vous trouverez toutes les réponses dans la vidéo qui suit et, juste en dessous, le code utilisé pour illustrer tout cela.

void setup() {

  int a = 3, b = 4;
  Serial.begin(115200);
  Serial.println((a==3)?"a est égal à 3":"a est différent de 3");
  
  Serial.println("Avant : a=" + String(a) + " et b=" + String(b));
  if (a == b) 
    Serial.println("La condition " + String(a) + "==" + String(b) + " est vraie");  
  else
    Serial.println("La condition " + String(a) + "==" + String(b) + " est fausse");
  Serial.println("Après : a=" + String(a) + " et b=" + String(b));
  
  int a_avant = a;
  if (a = b) 
    Serial.println("La condition " + String(a_avant) + "=" + String(b) + " est vraie");  
  else
    Serial.println("La condition " + String(a_avant) + "=" + String(b) + " est fausse");
  Serial.println("Après : a=" + String(a) + " et b=" + String(b));
  
  if (1) Serial.println("1 est vu comme une condition vraie");
  else Serial.println("1 est vu comme une condition fausse");
  
  if (-1) Serial.println("-1 est vu comme une condition vraie");
  else Serial.println("-1 est vu comme une condition fausse");
  
  if (0) Serial.println("0 est vu comme une condition vraie");
  else Serial.println("0 est vu comme une condition fausse");
  
  if (10) Serial.println("10 est vu comme une condition vraie");
  else Serial.println("10 est vu comme une condition fausse");
} 
  
void loop() {
}

Opérations sur bits

Même s'il existe des bibliothèques variées, il arrive toujours un moment où l'accès aux registres des périphériques du microcontrôleur est indispensable pour gérer ce qu'aucune bibliothèque n'a prévu ou optimiser ce qu'une bibliothèque trop générique ne fait pas précisément comme on le souhaite.
L'accès aux registres du microcontrôleur nécessite de connaître parfaitement la manière de réaliser les opérations classiques au niveau du bit : mise à 1, à 0, basculement, lecture...
La vidéo suivante propose cela.