Programmation Arduino
Arduino rend la programmation embarquee accessible a tous ! Avec quelques lignes de code, tu peux faire clignoter des LED, lire des capteurs et creer des projets interactifs.
Objectifs du cours
- Comprendre la structure d'un programme Arduino
- Maitriser les fonctions setup() et loop()
- Utiliser les entrees/sorties numeriques et analogiques
- Programmer la communication serie
- Realiser des projets pratiques avec Arduino
Erreurs courantes a eviter
- Oublier le point-virgule a la fin des instructions
- Confondre = (affectation) et == (comparaison)
- Ne pas initialiser les variables
- Utiliser delay() de facon excessive (bloque le programme)
**Les deux fonctions obligatoires**
Tout programme Arduino (appele "sketch") contient deux fonctions :
**setup()** - Initialisation - Executee une seule fois au demarrage - Configure les broches, initialise les communications - Prepare tout ce qui est necessaire
**loop()** - Boucle principale - Executee en boucle infinie apres setup() - Contient la logique principale du programme - Se repete indefiniment
**Structure de base**
```cpp // Declarations globales (variables, constantes) const int LED = 13;
// Initialisation (executee 1 fois) void setup() { // Configuration des broches pinMode(LED, OUTPUT);
// Initialisation communication serie Serial.begin(9600); }
// Boucle principale (executee en continu) void loop() { // Code repete indefiniment digitalWrite(LED, HIGH); delay(1000); digitalWrite(LED, LOW); delay(1000); } ```
**Cycle d'execution**
``` Alimentation/Reset | v setup() -----> Execute 1 fois | v loop() <--+ | | +-----+ Boucle infinie ```
# Simulation de la structure Arduino en Python
class Arduino:
"""Simulation d'un Arduino pour comprendre le fonctionnement"""
def __init__(self):
self.pins = {}
self.running = True
self.cycle_count = 0
def pinMode(self, pin, mode):
"""Configure une broche en entree ou sortie"""
self.pins[pin] = {"mode": mode, "value": 0}
print(f"[SETUP] Pin {pin} configure en {mode}")
def digitalWrite(self, pin, value):
"""Ecrit une valeur sur une broche"""
if pin in self.pins:
self.pins[pin]["value"] = value
etat = "HIGH" if value else "LOW"
print(f" Pin {pin} = {etat}")
def delay(self, ms):
"""Simule une attente"""
import time
time.sleep(ms / 1000)
# Simulation du programme blink
print("=== SIMULATION ARDUINO - BLINK ===\n")
# Variables globales
LED = 13
# Instancier l'Arduino
arduino = Arduino()
# ===== SETUP =====
def setup():
print("--- setup() commence ---")
arduino.pinMode(LED, "OUTPUT")
print("--- setup() termine ---\n")
# ===== LOOP =====
def loop():
print(f"--- loop() cycle {arduino.cycle_count + 1} ---")
arduino.digitalWrite(LED, 1) # HIGH
arduino.delay(500) # Reduit pour la demo
arduino.digitalWrite(LED, 0) # LOW
arduino.delay(500)
arduino.cycle_count += 1
# ===== EXECUTION =====
setup()
# Executer loop() quelques fois
for _ in range(3):
loop()
print("\n(En realite, loop() continue indefiniment)")Quiz de validation
1. Quelle fonction est executee une seule fois au demarrage d'un Arduino ?
2. Quelle instruction configure une broche en sortie ?
3. Quelle est la plage de valeurs retournees par analogRead() sur Arduino Uno ?
4. Quelle fonction permet d'envoyer du texte via le port serie ?
5. A quoi sert analogWrite() ?
