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);
}
}