Différences
Ci-dessous, les différences entre deux révisions de la page.
| arduino:esnumeriques [2022/07/29 19:16] – [2. Les entrées/sorties numériques de la carte Arduino Uno] phil | arduino:esnumeriques [Date inconnue] (Version actuelle) – supprimée - modification externe (Date inconnue) 127.0.0.1 | ||
|---|---|---|---|
| Ligne 1: | Ligne 1: | ||
| - | {{ : | ||
| - | |||
| - | ===== Les entrées, sorties numériques ===== | ||
| - | |||
| - | [Mise à jour le 26/4/2021] | ||
| - | {{ : | ||
| - | |||
| - | ==== 1. Généralités ==== | ||
| - | //« Dans un système à base de **microcontrôleur**, | ||
| - | |||
| - | Pour éviter de faire référence à des valeurs électriques (tension ou intensité), | ||
| - | * **true** (« **1** » logique) correspondra par exemple à **5V** ou **3,3V** | ||
| - | * **false** (« **0** » logique) correspondra à **0V**. | ||
| - | |||
| - | <callout type=" | ||
| - | |||
| - | <callout type=" | ||
| - | |||
| - | ---- | ||
| - | |||
| - | ==== 2. Les entrées/ | ||
| - | Les entrées, sorties numériques sont numérotées entre **0** et **13** sur la carte. Certaines peuvent assurer plusieurs fonctions. Le symbole **~** identifie les broches capables de délivrer un signal PWM. | ||
| - | |||
| - | {{ : | ||
| - | |||
| - | <callout type=" | ||
| - | ===== 3. Programmation ===== | ||
| - | |||
| - | ==== 3.1 Configurer une broche en entrée ou en sortie ==== | ||
| - | **Source** : < | ||
| - | |||
| - | <note tip> | ||
| - | |||
| - | __Exemple__ | ||
| - | |||
| - | <code cpp *.cpp> | ||
| - | // Sauf exception la configuration d'une broche se fait dans la fonction setup() | ||
| - | void setup() { | ||
| - | pinMode(13, | ||
| - | pinMode(12, | ||
| - | // optionnel si la broche n'a pas été préalablement | ||
| - | // configurée en sortie, car c'est le mode par défaut | ||
| - | } | ||
| - | </ | ||
| - | |||
| - | ==== 3.2 Lire l' | ||
| - | **Source** : < | ||
| - | |||
| - | <note tip>La valeur lue sur une broche configurée en entrée doit être sauvegardée dans une **variable**.</ | ||
| - | |||
| - | __Exemple__ | ||
| - | |||
| - | <code cpp *.cpp> | ||
| - | // L' | ||
| - | void loop() { | ||
| - | int valeur = digitalRead(12); | ||
| - | // dans la variable valeur | ||
| - | } | ||
| - | </ | ||
| - | |||
| - | ==== 3.3 Ecrire un état logique sur une broche ==== | ||
| - | **Source** : < | ||
| - | |||
| - | <note tip>Un état logique **haut(HIGH)** ou **bas(LOW)** peut être écrit sur une broche préalablement configurée en sortie.</ | ||
| - | |||
| - | __Exemple__ | ||
| - | |||
| - | <code cpp *.cpp> | ||
| - | void setup() { | ||
| - | pinMode(13, OUTPUT); | ||
| - | } | ||
| - | |||
| - | // L' | ||
| - | void loop() { | ||
| - | | ||
| - | } | ||
| - | </ | ||
| - | |||
| - | ==== 3.4 Générer un signal PWM ==== | ||
| - | **Source** : < | ||
| - | |||
| - | <note tip> | ||
| - | |||
| - | ^ Cartes | ||
| - | |Uno, Nano, Mini|3, 5, 6, 9, 10, 11|490 Hz (broches 5 et 6: 980 Hz)| | ||
| - | |||
| - | __Exemple__ | ||
| - | |||
| - | <code cpp *.cpp> | ||
| - | void setup() { | ||
| - | pinMode(11, OUTPUT); | ||
| - | } | ||
| - | |||
| - | // L' | ||
| - | void loop() { | ||
| - | | ||
| - | // et de rapport cyclique = 1/2 | ||
| - | } | ||
| - | </ | ||
| - | |||
| - | ==== 3.5 Temporisations ==== | ||
| - | * **Sources** : < | ||
| - | |||
| - | === 3.5.1 Temporisation bloquante === | ||
| - | |||
| - | * de **n millisecondes** avec la fonction : //void **delay**(int millisecondes)// | ||
| - | |||
| - | <code cpp *.cpp> | ||
| - | // Le code met le programme en pause pendant une seconde avant de faire basculer l' | ||
| - | |||
| - | int ledPin = 13; // LED connected to digital pin 13 | ||
| - | |||
| - | void setup() { | ||
| - | pinMode(ledPin, | ||
| - | } | ||
| - | |||
| - | void loop() { | ||
| - | digitalWrite(ledPin, | ||
| - | delay(1000); | ||
| - | digitalWrite(ledPin, | ||
| - | delay(1000); | ||
| - | } | ||
| - | </ | ||
| - | |||
| - | * de **n microsecondes** avec la fonction : //void **delayMicroseconds**(int microsecondes)// | ||
| - | |||
| - | <code cpp *.cpp> | ||
| - | // Le code configure la broche numéro 8 en sortie. | ||
| - | // Il envoie un train d' | ||
| - | // L' | ||
| - | |||
| - | int outPin = 8; // digital pin 8 | ||
| - | |||
| - | void setup() { | ||
| - | pinMode(outPin, | ||
| - | } | ||
| - | |||
| - | void loop() { | ||
| - | digitalWrite(outPin, | ||
| - | delayMicroseconds(50); | ||
| - | digitalWrite(outPin, | ||
| - | delayMicroseconds(50); | ||
| - | } | ||
| - | </ | ||
| - | |||
| - | === 3.5.2 Temporisation non bloquante === | ||
| - | |||
| - | * **Temps écoulé**, en **millisecondes**, | ||
| - | |||
| - | < | ||
| - | |||
| - | |||
| - | * // Structure d'une temporisation non bloquante // | ||
| - | <code cpp *.cpp> | ||
| - | // Répétition d'un bloc de code tous les intervalles de temps sans bloquer le programme | ||
| - | unsigned long previousMillis = 0; // Mémorise le temps écoulé depuis la dernière mesure | ||
| - | const long interval = 1000; // Durée non bloquante souhaitée | ||
| - | |||
| - | void setup() { | ||
| - | // Le contenu de setup dépend de l' | ||
| - | } | ||
| - | |||
| - | void loop() { | ||
| - | // Mesure du temps écoulé depuis que le programme s' | ||
| - | unsigned long currentMillis = millis(); | ||
| - | | ||
| - | // Si l' | ||
| - | if (currentMillis - previousMillis >= interval) { | ||
| - | // la mesure de temps actuelle devient la dernière mesure | ||
| - | previousMillis = currentMillis; | ||
| - | // | ||
| - | // Bloc de code à exécuter tous les intervalles de temps | ||
| - | // | ||
| - | } | ||
| - | // | ||
| - | // sinon d' | ||
| - | // | ||
| - | } | ||
| - | | ||
| - | </ | ||
| - | |||
| - | * **Temps écoulé**, en **microsecondes**, | ||
| - | |||
| - | < | ||
| - | |||
| - | <code cpp *.cpp> | ||
| - | unsigned long time; | ||
| - | |||
| - | void setup() { | ||
| - | Serial.begin(9600); | ||
| - | } | ||
| - | void loop() { | ||
| - | Serial.print(" | ||
| - | time = micros(); | ||
| - | |||
| - | Serial.println(time); | ||
| - | delay(1000); | ||
| - | } | ||
| - | </ | ||
| - | |||
| - | ==== 3.6 Interruption ==== | ||
| - | |||
| - | === 3.6.1 Attacher une interruption === | ||
| - | * **Source** : < | ||
| - | |||
| - | * **Syntaxe** | ||
| - | <code cpp *.cpp> | ||
| - | attachInterrupt(digitalPinToInterrupt(pin), | ||
| - | </ | ||
| - | |||
| - | * **ISR** : gestionnaire d' | ||
| - | * **pin** : broche de la carte (concernée par l' | ||
| - | * **mode** : définit le moment de déclenchement de l' | ||
| - | * **Paramètres** | ||
| - | * **LOW** déclenche l' | ||
| - | * **CHANGE** déclenche l' | ||
| - | * **RISING** déclenche l' | ||
| - | * **FALLING** déclenche l' | ||
| - | |||
| - | * //Exemple// | ||
| - | <code cpp *.cpp> | ||
| - | // Le front montant du signal présent sur la broche 3 de la carte Arduino Uno | ||
| - | // déclenche l' | ||
| - | |||
| - | const byte ledPin = 11; // O0 du shield Tinkerkit | ||
| - | const byte interruptPin = 3; // O5 du shield Tinkerkit | ||
| - | volatile byte state = LOW; | ||
| - | |||
| - | void setup() { | ||
| - | pinMode(ledPin, | ||
| - | pinMode(interruptPin, | ||
| - | attachInterrupt(digitalPinToInterrupt(interruptPin), | ||
| - | } | ||
| - | |||
| - | void loop() { | ||
| - | digitalWrite(ledPin, | ||
| - | } | ||
| - | |||
| - | void blink() { | ||
| - | state = !state; | ||
| - | } | ||
| - | </ | ||
| - | |||
| - | {{ : | ||
| - | <note warning> | ||
| - | |||
| - | === 3.6.2 Détacher une interruption === | ||
| - | La fonction // | ||
| - | |||
| - | * **Source** : < | ||
| - | |||
| - | * **Syntaxe** | ||
| - | <code cpp *.cpp> | ||
| - | detachInterrupt(digitalPinToInterrupt(pin)) | ||
| - | </ | ||