Le but est de mettre en oœuvre un microcontrôleur pour de l'informatique embarquée. Il s'agit ici de l'ATMega328P, présent sur la carte Arduino UNO, programmé dans un dérivé du C++. On utilisera :
Avant de commencer un projet, on vérifie que tout fonctionne.
Outils:
void setup() { pinMode(13, OUTPUT); } void loop() { // la DEL clignote digitalWrite(13, HIGH); delay(1000); digitalWrite(13, LOW); delay(1000); }
Téléverser(deuxième bouton en partant de la gauche).
delay(), pour faire varier la fréquence.
Explications :
Elément de programme | Description |
---|---|
void | Définit une fonction ne retournant aucune valeur |
setup() | Fonction exécutée une seule fois |
loop() | Fonction exécutée en boucle |
pinMode(13, OUTPUT); | Connecteur 13 défini en sortie |
digitalWrite(13, HIGH); | Connecteur 13 délivrant 5 V, la DEL s'allume |
digitalWrite(13, LOW); | Connecteur 13 délivrant 0 V, la DEL s'éteint |
delay(1000); | Programme mis en pause pendant 1000 ms soit 1 s |
// | Commentaire destiné au programmeur |
Réaliser le montage ci-dessous, qui associe plusieurs DEL aux connecteurs repérés 2 à 6.
Tester le programme suivant :
void setup() { pinMode(2, OUTPUT); pinMode(3, OUTPUT); } void loop() { digitalWrite(2, HIGH); digitalWrite(3, LOW); delay(1000); digitalWrite(3, HIGH); digitalWrite(2, LOW); delay(1000); }
SOS
est l'interprétation en code Morse du signal de détresse • • • ➖ ➖ ➖ • • •,
signé à la convention radiotélégraphique internationale de Berlin le 3 novembre 1906.
Emettre un SOS lumineux répétitif avec la DEL de votre choix. On convient qu'un • dure 200 ms et qu'un ➖ dure 3 fois plus longtemps.
Simuler le fonctionnement d'un feu tricolore avec trois DEL de couleurs vert, orange et rouge :
Un chenillard est une rangée de DEL qui s'allument et s'éteignent les unes à la suite des autres, de manière à créer un effet lumineux.
Réaliser un chenillard avec les cinq DEL alignées, en complétant le code ci-dessous.
void setup() { for (int i=2; i<7; i++) { pinMode(i, OUTPUT); } } void loop() { ... }
Plus difficile maintenant : A l'aide de la fonction random(), faire clignoter les cinq DEL de manière aléatoire, toutes les demi-secondes.
Nous utilisons une sortie pseudo-analogique repérée avec le caractère ~ (tilde) sur la carte. Un nombre compris entre 0 et 255 affecté à la sortie engendre sur celle-ci une tension moyenne allant de 0 à 5 V : 0 pour 0 V, 255 pour 5 V, 127 pour 2.5 V etc.
Testez le programme ci-dessous. Constatez que la DEL s'allume et éteint progressivement.
float periode=2.0; void setup() { pinMode(3, OUTPUT); } void loop() { for (float t=0; t<periode; t=t+0.1) { analogWrite(3, 127.5+127.5*sin(t*2*PI/periode)); delay(100); } }
Explications :
Elément de programme | Description |
---|---|
float periode=2; | La variable globale periodecontient un nombre à virgule de valeur 2 |
for | Pour mettre en place une boucle |
analogWrite(); | Cette fonction prend deux paramètres : Le numéro du connecteur et un nombre allant de 0 à 255 |
analogWrite(3, 127+...); | La tension moyenne sur le connecteur 3 varie de 0 à 5 V selon la valeur du deuxième paramètre |
En mathématique, la fonction sin(x) :
En conséquence :
Il s'agit de générer trois tensions sinusoïdales, déphasées de 120° les unes par rapport aux autres. Testez le programme ci-dessous. La période de 2 s équivaut à une fréquence de 0,5 Hz.
int phase1=3; int phase2=5; int phase3=6; float periode=2.0; void setup() { pinMode(phase1, OUTPUT); pinMode(phase2, OUTPUT); pinMode(phase3, OUTPUT); } void loop() { for (float t=0; t<periode; t=t+0.1) { analogWrite(phase1, 127.5+127.5*sin(t*2*PI/periode)); analogWrite(phase2, 127.5+127.5*sin(t*2*PI/periode+2*PI/3)); analogWrite(phase3, 127.5+127.5*sin(t*2*PI/periode+4*PI/3)); delay(100); } }