Différences
Ci-dessous, les différences entre deux révisions de la page.
arduino:esnumeriques [2022/07/29 19:16] – [3.1 Configurer une broche en entrée ou en sortie] 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** : < | ||
- | |||
- | <callout type=" | ||
- | |||
- | __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)) | ||
- | </ | ||