Introduction Arduino — IDE, structure d'un sketch, LED
1. Architecture de l'Arduino UNO
L'Arduino UNO est basé sur le microcontrôleur ATmega328P (8 bits, 16 MHz). Il dispose de 14 broches numériques (dont 6 PWM), 6 entrées analogiques (ADC 10 bits), 32 KB de Flash et 2 KB de RAM. C'est la carte de développement IoT la plus répandue dans le monde.
| Composant | Description |
|---|---|
| Microcontrôleur | Circuit intégré combinant processeur, mémoire et E/S sur une seule puce. Conçu pour le temps réel et la faible consommation |
| Pin numérique | Broche pouvant être en état HIGH (5V) ou LOW (0V). Configurée en entrée (INPUT) ou sortie (OUTPUT) avec pinMode() |
| Pin PWM | Pulse Width Modulation — simule une tension analogique en variant la durée d'une impulsion |
| Analogique (ADC) | Convertisseur Analogique-Numérique. Convertit une tension 0-5V en valeur entière 0-1023 (10 bits) |
| setup() | Fonction exécutée UNE SEULE FOIS au démarrage. Initialise les pins, la communication série, les variables |
| loop() | Fonction exécutée EN BOUCLE INFINIE après setup(). Contient le code principal du programme |
2. Premier programme — Blink
Le programme "Blink" est le "Hello World" de l'Arduino. Il fait clignoter la LED intégrée sur la broche 13. La structure setup() + loop() est obligatoire dans tout sketch Arduino.
// Structure minimale d'un sketch Arduino
const int LED_PIN = 13; // LED intégrée sur l'UNO
const int LED_ROUGE = 7; // LED externe sur pin 7
const int DELAI_MS = 500; // Délai en ms
void setup() {
pinMode(LED_PIN, OUTPUT);
pinMode(LED_ROUGE, OUTPUT);
Serial.begin(9600);
Serial.println("Arduino IoT MUST Toliara - Démarré !");
}
void loop() {
digitalWrite(LED_PIN, HIGH);
delay(DELAI_MS);
digitalWrite(LED_PIN, LOW);
delay(DELAI_MS);
Serial.print("Cycle : ");
Serial.println(millis() / 1000);
}
3. Blink sans delay() — la bonne approche
millis() retourne le nombre de ms depuis le démarrage. En comparant le temps actuel au dernier changement d'état, on peut clignoter sans bloquer le reste du programme.
const int LED_PIN = 13;
const long INTERVALLE = 500;
unsigned long dernierChangement = 0;
int etatLED = LOW;
void setup() { pinMode(LED_PIN, OUTPUT); }
void loop() {
unsigned long maintenant = millis();
if (maintenant - dernierChangement >= INTERVALLE) {
dernierChangement = maintenant;
if (etatLED == LOW) etatLED = HIGH;
else etatLED = LOW;
digitalWrite(LED_PIN, etatLED);
}
// Ici, d'autres tâches peuvent s'exécuter EN PARALLÈLE
}
a) Traffic Light Toliara : Câblez 3 LEDs (rouge, orange, vert) sur les pins 7, 8, 9. Programmez le feu tricolore : Vert 5s → Orange 2s → Rouge 4s.
b) SOS en Morse : Faites clignoter la LED en Morse : S = 3 courts (200ms), O = 3 longs (600ms), S = 3 courts. Pause de 2s entre chaque SOS.
c) Variateur PWM : Utilisez analogWrite() avec une LED sur pin 9 (PWM). Montée 0→255 puis descente 255→0 — effet respiration.
d) BONUS — Minuterie : LED éteinte. Quand on appuie sur un bouton (pin 4, INPUT_PULLUP), la LED s'allume 10s puis s'éteint.
const int VERT = 9;
const int ORANGE = 8;
const int ROUGE = 7;
void setup() {
pinMode(VERT, OUTPUT); pinMode(ORANGE, OUTPUT); pinMode(ROUGE, OUTPUT);
Serial.begin(9600);
}
void loop() {
digitalWrite(VERT, HIGH); digitalWrite(ORANGE, LOW); digitalWrite(ROUGE, LOW);
Serial.println("VERT — Avancez");
delay(5000);
digitalWrite(VERT, LOW); digitalWrite(ORANGE, HIGH);
Serial.println("ORANGE — Ralentissez");
delay(2000);
digitalWrite(ORANGE, LOW); digitalWrite(ROUGE, HIGH);
Serial.println("ROUGE — Stop");
delay(4000);
}
const int LED_PWM = 9;
void setup() { pinMode(LED_PWM, OUTPUT); }
void loop() {
for (int i = 0; i <= 255; i++) { analogWrite(LED_PWM, i); delay(8); }
for (int i = 255; i >= 0; i--) { analogWrite(LED_PWM, i); delay(8); }
}