Hello world!
Il semblerait que c'est une tradition de faire afficher "Bonjour tout le monde" au tout premier programme que l'on écrit. Je ne vais pas déroger la tradition.
Où est mon écran?
Avec un ordinateur, on a des tas de périphériques dont un écran pour nous permettre de dire bonjour. Avec une carte Arduino, on peut mettre un écran, mais on n'a pas encore tous les outils. La fonction classique du C ne fonctionne pas ici. Mais il y a une liaison série très utile entre l'Arduino et l'ordinateur, et les caractères envoyés par l'Arduino peuvent facilement être affichés sur un moniteur. Cela va nous permettre d'envoyer aujourd'hui le bonjour, mais on utilisera aussi beaucoup cette méthode à l'avenir pour afficher des résultats, mais aussi pour pouvoir suivre le programme en cas de dysfonctionnement dans le code, et évidemment pour faire des affichages divers.
Le moniteur série (on dit aussi la console) est accessible par le bouton en forme de loupe en haut à droite
Si vous ne mettez pas la carte Arduino, le logiciel voit rouge en indiquant que la carte n'est pas disponible. Mettez la carte Arduino sur le port et refaites la demande. Si elle y était retirez la et faites l'essai sans. Vous avez maintenant une idée de la présentation lors d'une erreur.
Le programme
On peut mettre les suites d'instructions en deux endroits comme on l'a vu dans le programme qui ne faisait rien. Soit dans setup() qui est exécuté qu'une fois, soit dans loop() qui est exécuté en boucle infinie. Normalement on ne dit bonjour qu'une fois, plaçons le code à l'intérieur des accolades de setup().
Il y a deux choses à faire, d'une part ouvrir le dialogue entre l'Arduino et la console, et d'autre part envoyer la phrase. Il y a en C deux instructions, cela fera deux lignes. Voyons la première:
Ouverture du dialogue série
Nous n'avons besoin que d'un monologue (sens Arduino -> console), mais c'est bien un dialogue que nous allons programmer. L'instruction est:
Serial.begin(115200);
et nous allons analyser tout cela.
On remarque tout d'abord qu'il y a une seule majuscule. C'est ainsi. En C, il y a une différence entre les majuscules et les minuscules. Serial doit avoir une majuscule, begin ne doit avoir que des minuscules. Ce n'est pas une fantaisie, c'est une convention. Tous les noms que l'on donnera aux constantes, variables, fonctions... vont avoir des majuscules et minuscules déterminées. Ce n'est pas obligatoire, cela fonctionne aussi si cette convention n'est pas respectée, mais comme on est souvent amené à partager du code, ou que l'on relira son propre code dans un avenir lointain, il vaut mieux s'y conforter. Ne pas le faire serait comme si dans votre famille vous décidiez d'inverser le sens de rouge et de bleu. Cela ne poserait pas de problèmes ("j'aime les fraises bien bleues", la mer est d'un beau rouge aujourd'hui"..) mais ce n'est pas très pratique si on dialogue avec d'autres gens. Profitons en pour dire qu'un nom peut comporter des lettres non accentuées majuscules ou minuscules, des chiffres et le symbole "_". Les autres symboles et les espaces sont interdits. On ne peut pas commencer par un chiffre et on réserve l'usage de "_" comme premier caractère. Bref, commencez par une lettre.
Serial est le nom d'un objet (terme barbare que l'on expliquera bien plus tard), c'est une ensemble de constantes, de fonctions... Serial gère la liaison série hard. Donc la première lettre en majuscule.
begin est une fonction, et le nom des variables et des fonctions s'écrit en minuscule si il n'y a qu'un mot, et si il y en a plusieurs, on met en majuscule les premières lettres à partir du deuxième mot. On écrira par exemple ceciEstMaVariable. begin n'a qu'un mot et indique (begin=début) l'initialisation de la liaison. Le point entre les deux indique que c'est le begin de Serial.
115200 est un paramètre (une donnée) pour initialiser la liaison. Les paramètres se mettent entre parenthèses derrière le nom de la fonction. Ici, c'est la vitesse de transmission en bauds. Un baud, c'est un bit/s. Le bit est la plus petite unité d'information. On dira que c'est zéro ou un, que cela correspond à l'alimentation (5V ou 3,3V) ou 0V... Il faut 8 bits (un octet) pour coder un caractère. Vous avez dû entendre parler de Mégaoctets (abréviation Mo) pour les cartes mémoires. Revenons à nos 115200 bauds. A cause des bits de contrôle, il faut au moins 10 bits pour transmettre un caractère (un octet). A cette vitesse, on peut donc faire passer 11520 caractères par seconde. Vous verrez sur le net, la vitesses de 9600 bauds. C'est une vieille vitesse qui date du temps ou les liaisons ne fonctionnaient pas bien et qu'en allant lentement, il y avait moins d'erreurs. Maintenant 115200 bauds semblent être la norme. C'est mieux, cela va plus vite, et si vous donner votre code à quelqu'un, il vaudrait mieux que tout le monde ait la même vitesse.
Enfin, une instruction (simple) se termine toujours par un point-virgule.
Cette instruction indique la vitesse d'envoi des codes de l'Arduino vers la console. Mais il faut aussi que la console soit configurée pour la même vitesse. Cela va se faire une fois (la configuration est mémorisée) si la vitesse n'est pas bonne. Dans la console, en bas, il y a la première fois 9600 baud. Cliquez dessus et choisissez 115200 baud.
Ouf, c'est fini pour la première ligne. Voyons la deuxième.
Envoi de "bonjour"
Pour envoyer une phrase on utilisera la fonction print (écrit) ou println (ln comme "line", ligne). La première écrit la phrase sans aller à la ligne, et on l'utilisera si on a plusieurs choses à écrire sur une même ligne. La fonction print appartient aussi à l'objet Serial. L'écriture est semblable à l'ouverture. Le paramètre passé est le mot, plus exactement la phrase, bonjour. Si on ne met pas de guillemets autour, le compilateur croit qu'il s'agit variable. La deuxième ligne est donc:
Serial.println("Bonjour");
Vous remarquerez aussi le point-virgule final.
C'est parti
Mettez donc ces deux lignes entre les accolades de setup() et exécutez le code (flèche téléverser). Vous devriez avoir le mot Bonjour affiché dans la console. Le programmevoid setup() { Serial.begin(115200); Serial.println("Bonjour"); } void loop() { } au cas ou vous auriez des difficultés.
Notez que la compilation bascule sur "sortie", et on ne voit plus la console. Il faut donc recliquer sur "Moniteur série";
On en profite
Si cela fonctionne, posons nous la question "Et si on avait mis Serial.println("Bonjour"); dans loop()?" Et bien, le mot aurait été répété sans arrêt. Faites l'essai! Solution?void setup() { Serial.begin(115200); } void loop() { Serial.println("Bonjour"); } A priori, la première ligne (configuration) doit rester dans le setup() car on n'a besoin de le faire qu'une seule fois. Si on la met dans loop(), Arduino se plante car on commence à envoyer Bonjour et pendant que ce mot part, on réinitialise la liaison. Laissez Serial.begin dans le setup.
Toujours avec le code dans loop(), supprimez le ln du println. On n'ira plus à la ligne. Avant de faire l'essai, rajoutez un espace après le "r" de bonjour (avant la fermeture des guillemets!), sinon tout va se coller. Faites aussi cet essai! Pourquoi pas aussi sans l'espace.