Arduino
Programmation & Composants
De la LED clignotante à l'afficheur 7 segments complet — comprendre l'électronique de base, maîtriser le langage Arduino C++ et câbler des composants réels.
C'est quoi Arduino ?
Arduino est une plateforme de prototypage électronique basée sur un microcontrôleur (ATmega328P sur l'Uno). Il exécute un programme en boucle infinie, lit des capteurs et contrôle des actionneurs.
Arduino est un microcontrôleur — il exécute un seul programme en temps réel, pas d'OS, démarrage en millisecondes, parfait pour contrôler des moteurs, LEDs, capteurs.
Raspberry Pi est un micro-ordinateur — il fait tourner Linux, Python, des serveurs web, etc.
L'Arduino Uno est le modèle de référence : ATmega328P @ 16 MHz, 32 KB Flash, 2 KB RAM, 14 broches digitales, 6 analogiques. Le code est écrit en C++ simplifié (IDE Arduino ou VS Code + PlatformIO).
Broches & Pinout — Arduino Uno
| Broche | Type | Tension / Courant | Usage |
|---|---|---|---|
| GND | POWER | 0 V | Masse commune — toujours connecter |
| 5V | POWER | 5 V / 500 mA max | Alimentation composants 5V |
| 3.3V | POWER | 3.3 V / 150 mA max | Composants 3.3V (ESP, capteurs) |
| Vin | POWER | 7–12 V entrée | Alimentation externe (batterie, adaptateur) |
| D0–D13 | DIGITAL | 0–5 V / 40 mA max | HIGH (5V) ou LOW (0V) |
| ~3,5,6,9,10,11 | PWM | 0–5 V analogique simulé | Variation de luminosité, vitesse moteur |
| A0–A5 | ANALOG | 0–5 V → 0–1023 | Lecture potentiomètre, capteur lumière… |
| D0 (RX) D1 (TX) | UART | 5 V | Communication série (éviter pendant upload) |
| D10–D13 | SPI | 5 V | Communication SPI (écrans, SD cards) |
| A4 (SDA) A5 (SCL) | I2C | 5 V | Bus I2C — LCD, capteurs, multiplexeurs |
Limites à respecter absolument :
— Jamais plus de 40 mA sur une broche digitale (grille le microcontrôleur).
— Jamais plus de 200 mA au total sur toutes les broches.
— Toujours une résistance en série avec une LED (≥ 220 Ω sur 5V).
— Ne jamais connecter 5V directement sur une entrée analogique > 5V.
Règle d'or : quand tu doutes de la valeur d'une résistance pour une LED, utilise 330 Ω. La LED sera un peu moins lumineuse mais tu ne risques rien. Calcul exact : R = (Vcc - Vled) / I = (5 - 2) / 0.02 = 150 Ω minimum.
// R = (Vcc - Vled) / I_led
// Vcc = 5V (Arduino)
// Vled = 2.0V (LED rouge/verte) ou 3.2V (bleue/blanche)
// I = 20 mA = 0.020 A (courant typique)
// LED rouge sur 5V :
// R = (5.0 - 2.0) / 0.020 = 150 Ω → utiliser 220 Ω (standard)
// LED bleue sur 5V :
// R = (5.0 - 3.2) / 0.020 = 90 Ω → utiliser 100 Ω
Langage Arduino — C++ simplifié
// Types entiers
int x = 42; // -32768 à 32767 (16 bits)
unsigned int u = 65535; // 0 à 65535
long l = 100000; // -2M à 2M (32 bits)
byte b = 255; // 0 à 255 — très utilisé pour les broches
// Types décimaux (éviter — lents sur Arduino)
float f = 3.14;
double d = 3.14159;
// Booléens
bool actif = true;
bool etat = false;
// Constantes prédéfinies
HIGH // = 1 (broche à 5V)
LOW // = 0 (broche à 0V)
INPUT // broche en entrée
OUTPUT // broche en sortie
INPUT_PULLUP // entrée avec résistance pull-up interne
// Tableaux
int broches[] = {2, 3, 4, 5};
byte segments[7] = {0, 0, 0, 0, 0, 0, 0};
// ── Configuration des broches ──────────────
pinMode(13, OUTPUT); // broche 13 en sortie
pinMode(2, INPUT); // broche 2 en entrée
pinMode(7, INPUT_PULLUP); // entrée + résistance interne 20kΩ
// ── Écriture digitale ─────────────────────
digitalWrite(13, HIGH); // broche 13 → 5V (LED allumée)
digitalWrite(13, LOW); // broche 13 → 0V (LED éteinte)
// ── Lecture digitale ──────────────────────
int etat = digitalRead(2); // HIGH ou LOW
// ── PWM (broches ~) ───────────────────────
analogWrite(9, 128); // 0–255 → 0%–100% (50% ici)
analogWrite(9, 0); // éteint
analogWrite(9, 255); // pleine puissance
// ── Lecture analogique ────────────────────
int val = analogRead(A0); // 0–1023 (10 bits)
// ── Temporisation ─────────────────────────
delay(1000); // attendre 1 seconde (bloquant !)
delayMicroseconds(500);// attendre 500 µs
unsigned long t = millis(); // temps écoulé depuis démarrage (ms)
// ── Cartographie de valeurs ───────────────
int angle = map(val, 0, 1023, 0, 180); // remappe 0-1023 → 0-180
int clamp = constrain(val, 0, 255); // borne entre 0 et 255
Structure d'un sketch — setup() & loop()
// ① Variables et constantes globales
const int PIN_LED = 13; // LED intégrée de l'Uno
const int PIN_BTN = 2;
bool etatLed = false;
unsigned long dernierAppui = 0;
// ② setup() — exécuté UNE SEULE FOIS au démarrage
void setup() {
Serial.begin(9600); // ouvrir port série
pinMode(PIN_LED, OUTPUT); // LED = sortie
pinMode(PIN_BTN, INPUT_PULLUP); // bouton = entrée
Serial.println("Arduino démarré !");
}
// ③ loop() — exécuté EN BOUCLE INFINIE (le cœur du programme)
void loop() {
if (digitalRead(PIN_BTN) == LOW) { // bouton pressé (pull-up → LOW)
unsigned long maintenant = millis();
if (maintenant - dernierAppui > 200) { // anti-rebond 200ms
etatLed = !etatLed;
digitalWrite(PIN_LED, etatLed ? HIGH : LOW);
dernierAppui = maintenant;
Serial.print("LED : ");
Serial.println(etatLed ? "ON" : "OFF");
}
}
}
// ④ Fonctions personnalisées (après loop)
void cligner(int broche, int fois, int duree) {
for (int i = 0; i < fois; i++) {
digitalWrite(broche, HIGH); delay(duree);
digitalWrite(broche, LOW); delay(duree);
}
}
pinMode), initialiser la communication série, définir les valeurs de départ. Tout ce qu'on doit faire avant la boucle principale.delay() bloque tout le programme pendant N ms — Arduino ne peut rien faire d'autre. Préférer millis() pour gérer plusieurs tâches simultanément (technique "blink without delay").unsigned long dernierBlink = 0;
bool etatLed = false;
void loop() {
if (millis() - dernierBlink >= 500) {
etatLed = !etatLed;
digitalWrite(LED_BUILTIN, etatLed);
dernierBlink = millis(); // reset chrono
}
// Ici d'autres traitements peuvent tourner en parallèle !
}
LED & résistances — le premier circuit
void setup() {
pinMode(13, OUTPUT); // ou LED_BUILTIN
}
void loop() {
digitalWrite(13, HIGH); // LED allumée
delay(1000); // attendre 1s
digitalWrite(13, LOW); // LED éteinte
delay(1000); // attendre 1s
}
Simulation interactive — clique pour basculer :
const int NB_LEDS = 4;
int broches[NB_LEDS] = {8, 9, 10, 11};
void setup() {
for (int i = 0; i < NB_LEDS; i++) {
pinMode(broches[i], OUTPUT);
}
}
void loop() {
// Chenillard de gauche à droite
for (int i = 0; i < NB_LEDS; i++) {
digitalWrite(broches[i], HIGH);
delay(100);
digitalWrite(broches[i], LOW);
}
}
Bouton-poussoir & anti-rebond
// Câblage : broche 2 → bouton → GND
// Pas de résistance externe nécessaire — pull-up interne 20kΩ
// Logique inversée : broche LOW quand bouton pressé !
const int BTN = 2;
const int LED = 13;
bool ledOn = false;
bool dernierEtat = HIGH;
unsigned long dernierChangement = 0;
void setup() {
pinMode(BTN, INPUT_PULLUP); // résistance interne 20kΩ vers 5V
pinMode(LED, OUTPUT);
}
void loop() {
bool etatActuel = digitalRead(BTN);
// Anti-rebond : ignorer les changements < 50ms
if (etatActuel != dernierEtat &&
millis() - dernierChangement > 50) {
if (etatActuel == LOW) { // front descendant = appui
ledOn = !ledOn;
digitalWrite(LED, ledOn);
}
dernierChangement = millis();
dernierEtat = etatActuel;
}
}
Pourquoi INPUT_PULLUP ? Sans résistance, une broche en entrée "flotte" — elle capte les parasites électromagnétiques et lit des valeurs aléatoires. La résistance pull-up interne (20 kΩ) maintient la broche à 5V quand le bouton est ouvert. Appuyer sur le bouton connecte la broche à GND (LOW).
Le rebond des contacts : Physiquement, un bouton "rebondit" 5 à 20 fois en quelques millisecondes lors d'un appui. Sans anti-rebond, Arduino lit 5 à 20 appuis. Solution logicielle : ignorer les changements pendant 50 ms après le premier front. Solution matérielle : condensateur 100 nF entre la broche et GND.
int compteur = 0;
void loop() {
if (etatActuel == LOW && dernierEtat == HIGH) {
compteur++;
Serial.print("Appuis : ");
Serial.println(compteur);
}
// Affichage moniteur série : Outils → Moniteur série (9600)
}
PWM — Variation de luminosité et de vitesse
PWM (Pulse Width Modulation) simule un signal analogique en allumant/éteignant très rapidement la broche. Le pourcentage de temps "HIGH" (rapport cyclique) détermine la tension moyenne perçue.
// Câblage :
// Potentiomètre : VCC → curseur → A0, et les 2 extrémités à 5V et GND
// LED : broche 9 (PWM) → 220Ω → LED → GND
const int POT = A0;
const int LED = 9; // doit être une broche PWM (~)
void setup() {
pinMode(LED, OUTPUT);
Serial.begin(9600);
}
void loop() {
int lecture = analogRead(POT); // 0 à 1023
int luminosite = map(lecture, 0, 1023, 0, 255);
analogWrite(LED, luminosite); // 0 à 255
Serial.println(luminosite);
delay(10);
}
const int LED = 9;
void loop() {
// Augmenter progressivement
for (int i = 0; i <= 255; i++) {
analogWrite(LED, i);
delay(8); // 8ms × 255 = ~2 secondes
}
// Diminuer progressivement
for (int i = 255; i >= 0; i--) {
analogWrite(LED, i);
delay(8);
}
}
// LED RGB — 3 broches PWM
void setCouleur(int r, int v, int b) {
analogWrite(9, r); // Rouge
analogWrite(10, v); // Vert
analogWrite(11, b); // Bleu
}
void loop() {
setCouleur(255, 0, 0); delay(500); // Rouge
setCouleur(0, 255, 0); delay(500); // Vert
setCouleur(0, 0, 255); delay(500); // Bleu
setCouleur(255, 100, 0); delay(500); // Orange
}
Pour contrôler un moteur DC avec PWM, ne jamais connecter le moteur directement sur une broche Arduino (trop de courant). Utiliser un transistor (2N2222, TIP120) ou un pont en H (L298N, L293D) comme interface de puissance.
Entrées analogiques — capteurs
// Diviseur de tension : 5V → R_fixe(10kΩ) → A0 → NTC → GND
#include <math.h>
const float R_FIXE = 10000.0; // 10 kΩ
const float BETA = 3950.0; // coefficient NTC (vérifier datasheet)
const float T0 = 298.15; // 25°C en Kelvin
const float R0 = 10000.0; // résistance à 25°C
void setup() { Serial.begin(9600); }
void loop() {
int brut = analogRead(A0); // 0–1023
float R_ntc = R_FIXE * (1023.0 / brut - 1.0);
float tempK = 1.0 / (log(R_ntc / R0) / BETA + 1.0 / T0);
float tempC = tempK - 273.15;
Serial.print("Temp : ");
Serial.print(tempC, 1);
Serial.println(" °C");
delay(1000);
}
// LDR (Light Dependent Resistor) — diviseur de tension
// 5V → 10kΩ → A0 → LDR → GND
// Plus il fait sombre, plus la valeur lue est haute
const int LDR = A0;
const int LED = 13;
const int SEUIL = 600; // à calibrer selon ambiance
void setup() {
pinMode(LED, OUTPUT);
Serial.begin(9600);
}
void loop() {
int lumiere = analogRead(LDR); // 0 (lumineux) → 1023 (sombre)
if (lumiere > SEUIL) {
digitalWrite(LED, HIGH); // veilleuse automatique
Serial.println("Sombre → LED ON");
} else {
digitalWrite(LED, LOW);
}
delay(100);
}
// Calibration interactive via Serial
void loop() {
Serial.println(analogRead(LDR)); // observer les valeurs en direct
delay(200);
}
Afficheur 7 segments — anatomie
Un afficheur 7 segments contient 7 LEDs (a à g) disposées en chiffre 8, plus une LED pour le point décimal (dp). Chaque segment est une LED indépendante.
Deux types : Anode commune (CA) — la broche commune est reliée au +5V, on active un segment en mettant sa broche à LOW. Cathode commune (CC) — la broche commune est reliée à GND, on active un segment en mettant sa broche à HIGH. Vérifier le datasheet !
| Chiffre | a | b | c | d | e | f | g |
|---|---|---|---|---|---|---|---|
| 0 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✗ |
| 1 | ✗ | ✓ | ✓ | ✗ | ✗ | ✗ | ✗ |
| 2 | ✓ | ✓ | ✗ | ✓ | ✓ | ✗ | ✓ |
| 3 | ✓ | ✓ | ✓ | ✓ | ✗ | ✗ | ✓ |
| 4 | ✗ | ✓ | ✓ | ✗ | ✗ | ✓ | ✓ |
| 5 | ✓ | ✗ | ✓ | ✓ | ✗ | ✓ | ✓ |
| 6 | ✓ | ✗ | ✓ | ✓ | ✓ | ✓ | ✓ |
| 7 | ✓ | ✓ | ✓ | ✗ | ✗ | ✗ | ✗ |
| 8 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| 9 | ✓ | ✓ | ✓ | ✓ | ✗ | ✓ | ✓ |
Simulateur interactif — clique sur un chiffre :
Code complet — afficheur 7 segments
// ─── Broches pour les 7 segments (a, b, c, d, e, f, g) ───────────────────
// Afficheur CATHODE COMMUNE — HIGH allume, LOW éteint
const int SEG[7] = {2, 3, 4, 5, 6, 7, 8};
// a b c d e f g
// ─── Table des segments pour chaque chiffre 0–9 ──────────────────────────
// Ordre : {a, b, c, d, e, f, g} 1 = allumé, 0 = éteint
const byte CHIFFRES[10][7] = {
{1,1,1,1,1,1,0}, // 0
{0,1,1,0,0,0,0}, // 1
{1,1,0,1,1,0,1}, // 2
{1,1,1,1,0,0,1}, // 3
{0,1,1,0,0,1,1}, // 4
{1,0,1,1,0,1,1}, // 5
{1,0,1,1,1,1,1}, // 6
{1,1,1,0,0,0,0}, // 7
{1,1,1,1,1,1,1}, // 8
{1,1,1,1,0,1,1}, // 9
};
// ─── Bouton-poussoir pour incrémenter ────────────────────────────────────
const int BTN = 9; // broche 9 → bouton → GND (INPUT_PULLUP)
int valeurAffichee = 0;
bool etatPrecedent = HIGH;
unsigned long dernierAppui = 0;
// ─── Fonctions ────────────────────────────────────────────────────────────
void afficher(int chiffre) {
for (int i = 0; i < 7; i++) {
digitalWrite(SEG[i], CHIFFRES[chiffre][i]);
}
}
void eteindre() {
for (int i = 0; i < 7; i++) {
digitalWrite(SEG[i], LOW);
}
}
// ─── setup ────────────────────────────────────────────────────────────────
void setup() {
for (int i = 0; i < 7; i++) {
pinMode(SEG[i], OUTPUT);
}
pinMode(BTN, INPUT_PULLUP);
Serial.begin(9600);
afficher(valeurAffichee);
Serial.println("Afficheur 7 seg prêt — appuie sur le bouton !");
}
// ─── loop ─────────────────────────────────────────────────────────────────
void loop() {
bool etatActuel = digitalRead(BTN);
if (etatActuel == LOW && etatPrecedent == HIGH &&
millis() - dernierAppui > 200) { // anti-rebond
valeurAffichee = (valeurAffichee + 1) % 10; // 0→1→…→9→0
afficher(valeurAffichee);
Serial.print("Affiche : ");
Serial.println(valeurAffichee);
dernierAppui = millis();
}
etatPrecedent = etatActuel;
}
Avec registre à décalage 74HC595 — 3 fils au lieu de 7
Le 74HC595 est un registre à décalage 8 bits — il reçoit les données en série (3 fils) et les retransmet en parallèle (8 sorties). Parfait pour piloter un afficheur 7 segments avec seulement 3 broches Arduino au lieu de 7.
Câblage 74HC595 → Arduino :
| 74HC595 | Arduino | Rôle |
|---|---|---|
| DS (14) | D11 | Données série (DATA) |
| SH_CP (11) | D13 | Horloge (CLOCK) |
| ST_CP (12) | D10 | Validation (LATCH) |
| VCC (16) | 5V | Alimentation |
| GND (8) | GND | Masse |
| OE (13) | GND | Activer sorties (LOW) |
| MR (10) | 5V | Master Reset (HIGH = actif) |
| Q0–Q6 | → 220Ω → segments a–g | Sorties vers l'afficheur |
const int DATA = 11; // DS
const int CLOCK = 13; // SH_CP
const int LATCH = 10; // ST_CP
// Chaque octet encode les 8 segments (bit 0 = a, bit 7 = dp)
// Cathode commune — 1 = allumé
const byte CHIFFRES[10] = {
0b00111111, // 0 : a,b,c,d,e,f
0b00000110, // 1 : b,c
0b01011011, // 2 : a,b,d,e,g
0b01001111, // 3 : a,b,c,d,g
0b01100110, // 4 : b,c,f,g
0b01101101, // 5 : a,c,d,f,g
0b01111101, // 6 : a,c,d,e,f,g
0b00000111, // 7 : a,b,c
0b01111111, // 8 : tous
0b01101111, // 9 : a,b,c,d,f,g
};
void afficher(byte donnee) {
digitalWrite(LATCH, LOW); // bloquer l'affichage
shiftOut(DATA, CLOCK, MSBFIRST, donnee); // envoyer 8 bits en série
digitalWrite(LATCH, HIGH); // valider → afficher
}
void setup() {
pinMode(DATA, OUTPUT);
pinMode(CLOCK, OUTPUT);
pinMode(LATCH, OUTPUT);
}
void loop() {
for (int i = 0; i <= 9; i++) {
afficher(CHIFFRES[i]);
delay(800);
}
// Éteindre
afficher(0b00000000);
delay(500);
}
Écran LCD I2C — texte & données
Le LCD 1602 I2C (16 colonnes × 2 lignes) se connecte avec seulement 4 fils grâce au module I2C : VCC→5V, GND→GND, SDA→A4, SCL→A5. Bibliothèque : LiquidCrystal_I2C. Adresse I2C typique : 0x27 ou 0x3F.
// Bibliothèque : LiquidCrystal_I2C (gestionnaire de bibliothèques IDE)
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// LiquidCrystal_I2C(adresse, colonnes, lignes)
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup() {
lcd.init(); // initialiser
lcd.backlight(); // allumer le rétroéclairage
lcd.setCursor(0, 0); // colonne 0, ligne 0
lcd.print("Arduino LCD !");
lcd.setCursor(0, 1); // colonne 0, ligne 1
lcd.print("Temp: -- degC");
}
void loop() {
float temperature = lireTemperature(); // fonction de l'ex. 08
lcd.setCursor(6, 1); // positionner après "Temp: "
lcd.print(temperature, 1);
lcd.print(" C "); // espaces pour effacer les anciens chiffres
delay(1000);
}
// Effacer une partie de l'écran (éviter lcd.clear() — clignote)
void effacerLigne(int ligne) {
lcd.setCursor(0, ligne);
lcd.print(" "); // 16 espaces
}
// Projet combiné :
// - Potentiomètre sur A0 → simule une température
// - LCD 16×2 affiche "Temp: XX.X °C"
// - Afficheur 7 seg : dizaine de degrés (0–9)
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
const int SEG[7] = {2,3,4,5,6,7,8};
const byte DIGITS[10] = {
0b00111111,0b00000110,0b01011011,0b01001111,0b01100110,
0b01101101,0b01111101,0b00000111,0b01111111,0b01101111
};
void setup() {
for(int i=0;i<7;i++) pinMode(SEG[i], OUTPUT);
lcd.init(); lcd.backlight();
lcd.setCursor(0,0); lcd.print("Station Meteo");
}
void afficher7Seg(int chiffre) {
byte masque = DIGITS[chiffre];
for(int i=0;i<7;i++)
digitalWrite(SEG[i], (masque >> i) & 1);
}
void loop() {
float temp = map(analogRead(A0), 0, 1023, 0, 400) / 10.0;
lcd.setCursor(0,1);
lcd.print("Temp: ");
lcd.print(temp, 1);
lcd.print(" C ");
int dizaine = (int)temp / 10; // dizaine
afficher7Seg(constrain(dizaine, 0, 9));
delay(500);
}
Communication Série — debug & échanges
void setup() {
Serial.begin(9600);
pinMode(13, OUTPUT);
Serial.println("Commandes: ON, OFF, BLINK");
}
void loop() {
if (Serial.available() > 0) {
String cmd = Serial.readStringUntil('\n');
cmd.trim(); // supprimer \r\n
if (cmd == "ON") { digitalWrite(13, HIGH); Serial.println("LED allumée"); }
else if (cmd == "OFF") { digitalWrite(13, LOW); Serial.println("LED éteinte"); }
else if (cmd == "BLINK") { cligner(13, 5, 100); Serial.println("Blink !"); }
else { Serial.println("Commande inconnue"); }
}
}
// Depuis Python (pyserial) ─────────────────────
// import serial, time
// s = serial.Serial('COM3', 9600, timeout=1)
// time.sleep(2) # laisser l'Arduino se réinitialiser
// s.write(b'ON\n')
// print(s.readline().decode().strip())
// Arduino envoie : timestamp,temperature,luminosite
void loop() {
float temp = lireTemperature();
int lum = analogRead(A1);
Serial.print(millis());
Serial.print(',');
Serial.print(temp, 2);
Serial.print(',');
Serial.println(lum); // println = fin de ligne
delay(1000);
}
// Sortie : 5000,22.50,450
// 6000,22.48,460
// Python — lire et tracer en temps réel ────────
// import serial, csv, matplotlib.pyplot as plt
// s = serial.Serial('COM3', 9600)
// with open('data.csv','w') as f:
// w = csv.writer(f)
// w.writerow(['t','temp','lum'])
// for _ in range(60):
// line = s.readline().decode().strip().split(',')
// w.writerow(line)
// print(line)
Bibliothèques utiles
| Bibliothèque | Usage | Composant |
|---|---|---|
LiquidCrystal_I2C | Écran LCD 1602/2004 via I2C | LCD 16×2 |
DHT | Température + humidité | DHT11, DHT22 |
Servo | Contrôle servomoteur 0–180° | SG90, MG90S |
Wire | Communication I2C (incluse) | Tout composant I2C |
SPI | Communication SPI (incluse) | SD, écrans, RF |
EEPROM | Mémoire persistante (incluse) | Interne ATmega |
Ultrasonic | Capteur ultrasonique HC-SR04 | HC-SR04 |
Keypad | Clavier matriciel 4×4 | Keypad |
FastLED / NeoPixel | LEDs RGB adressables | WS2812, NeoPixel |
IRremote | Émission/réception infrarouge | Télécommande IR |
#include <Servo.h>
Servo monServo;
void setup() {
monServo.attach(9); // broche signal du servo
monServo.write(90); // position centrale
}
void loop() {
int pos = map(analogRead(A0), 0, 1023, 0, 180);
monServo.write(pos); // 0° à 180°
delay(15); // laisser le servo bouger
}
#include <DHT.h>
DHT dht(4, DHT22); // broche 4, type DHT22
void setup() {
Serial.begin(9600);
dht.begin();
}
void loop() {
float h = dht.readHumidity();
float t = dht.readTemperature();
if (isnan(h) || isnan(t)) {
Serial.println("Erreur lecture DHT !");
return;
}
Serial.print("Humidité: "); Serial.print(h); Serial.print(" % ");
Serial.print("Temp: "); Serial.print(t); Serial.println(" °C");
delay(2000);
}
Cheat sheet Arduino
⚡ Fonctions entrées/sorties
pinMode(p, MODE) | Configurer broche |
digitalWrite(p, V) | HIGH ou LOW |
digitalRead(p) | Lire HIGH/LOW |
analogRead(p) | 0–1023 (A0–A5) |
analogWrite(p, v) | PWM 0–255 (~) |
tone(p, freq, ms) | Buzzer |
⏱️ Temps & maths
millis() | ms depuis démarrage |
micros() | µs depuis démarrage |
delay(ms) | Pause (bloquant) |
map(v,a,b,c,d) | Remapper une valeur |
constrain(v,mn,mx) | Borner une valeur |
random(min,max) | Nombre aléatoire |
📡 Communication
Serial.begin(9600) | Init série |
Serial.print(v) | Envoyer valeur |
Serial.println(v) | Envoyer + retour |
Serial.available() | Données reçues ? |
Serial.readStringUntil('\n') | Lire ligne |
shiftOut(d,c,o,b) | 74HC595 |
🔌 Électronique rapide
| Résistance LED | 220Ω (5V) |
| Courant max broche | 40 mA |
| Total max broches | 200 mA |
| INPUT_PULLUP | Résistance 20kΩ interne |
| Anti-rebond logiciel | 50–200 ms |
| Adresse I2C LCD | 0x27 ou 0x3F |
🔢 7 segments — câblage CC
| Segment a (haut) | D2 → 220Ω |
| Segment b (dr. haut) | D3 → 220Ω |
| Segment c (dr. bas) | D4 → 220Ω |
| Segment d (bas) | D5 → 220Ω |
| Segment e (g. bas) | D6 → 220Ω |
| Segment f (g. haut) | D7 → 220Ω |
| Segment g (milieu) | D8 → 220Ω |
| Broche commune CC | → GND |
74HC595 — shiftOut
| DS (14) | DATA → D11 |
| SH_CP (11) | CLOCK → D13 |
| ST_CP (12) | LATCH → D10 |
| OE (13) | → GND |
| MR (10) | → 5V |
| Chiffre en binaire | 0b01111111 = 8 |