Tutoriel: «Les sorties: agir sur le monde»

Prérequis

Instructions

Après quelques secondes, une led se mettra à clignoter lentement.

Comment ça marche?

Regardons le programme pour comprendre ce qu’il fait:

1
2
3
4
5
6
7
8
9
10
11
12
int led = 13;

void setup() {
  pinMode(led, OUTPUT);
}

void loop() {
  digitalWrite(led, HIGH);
  delay(1000);
  digitalWrite(led, LOW);
  delay(1000);
}

Le coeur du programme est composé des quatre instructions après le mot loop:

digitalWrite(led, HIGH);
delay(1000);
digitalWrite(led, LOW);
delay(1000);

Ces quatre instructions sont répétées en boucle (loop: faire une boucle, comme les avions qui font des loopings). Ce qui fait clignoter la lampe.

Plus de lumière!

Nous venons de voir qu’avec de simples mots (le programme), on peut agir sur le monde physique! Mais ce n’est peut-être pas encore très convainquant?

Nous allons exploiter une faculté majeure des ordinateurs arduino: la facilité d’y brancher des composants électroniques, grâce aux multiples prises.

La led devrait clignoter avec une lumière maintenant bien visible:

TODO: insérer une photo

Notes:

Du mouvement!

Ce que l’on veut vraiment fabriquer, c’est un robot. Il faut que cela bouge!

Instructions:

Si tout se passe bien, le moteur s’allumera et s’éteindra.

Note:

Pour aller plus loin, voir le tutoriel sur les moteurs.

Les effecteurs

La fonction digitalWrite permet de régler la tension entre la terre (0V) et un pin comme 13. C’est la seule manière qu’ait arduino d’agir sur son environnement. Mais c’est suffisant! Lorsque l’on veut agir d’une autre manière (émettre une lumière, faire tourner un moteur, …) on utilisera un effecteur pour convertir cette tension en action physique.

Pour aller plus loin: détails sur le programme

Fonctions

La syntaxe

void unNom() {
    ...
}

Permet de définir une nouvelle instruction en regroupant plusieurs instructions existantes. On appelle cela une fonction. Ici, la fonction s’appelle unNom. Pour l’utiliser, il suffit d’insérer dans le programme:

unNom();

Dans notre programme, il y a deux fonctions qui ont un rôle spécial pour arduino:

Défis

Un clignotant

Adapter le code pour que:

Un phare

Faire clignoter la led au rythme de votre phare préféré.

SOS

Émettre le signal de détresse SOS en code morse: ... - - - ..., soit trois clignotements courts, trois clignotements longs, trois clignotements courts. Répéter le signal en insérant une pause de une seconde entre chaque émission.

Le programme obtenu ressemble probablement à cela. Cela fait beaucoup de répétition! Si l’on veut par exemple changer la durée des traits, il faut changer beaucoup d’endroit. On va améliorer cela en définissant des fonctions.

Insérer la définition de la fonction suivante juste au dessus de setup:

void trait() {
    digitalWrite(led, HIGH);
    delay(1000);
    digitalWrite(led, LOW);
    delay(1000);
}

Ajouter de même une fonction point(). Modifier ensuite le programme principal dans loop pour qu’il appelle les fonctions point et trait.

Solution

Code morse

Étendre le programme précédent pour pouvoir émettre un message de votre choix en code morse.

Indication: pour chaque lettre de l’alphabet, écrire une fonction qui émette. Par exemple, pour la lettre s, on écrira la fonction:

void() morse_s() {
    point();
    point();
    point();
}

Sonner l’alarme!

On pourra utiliser un “buzzer”, et la fonction tone. Par exemple, avec le buzzer branché entre GND et 8, l’instruction suivante émettra un son de fréquence 440Hz (la note «La») pendant une seconde (1000ms):

tone(8, 440, 1000);

Pour les branchements, voir le tutoriel. Voir aussi Exemple -> Digital -> toneMelody pour un exemple plus avancé.

Changer le son du buzzer pour qu’il ressemble plus à celui d’une alarme (uuuiiiuuuiiiuuuiii). On pourra: