Changes between Version 17 and Version 18 of IOC_T05
- Timestamp:
- Feb 24, 2023, 7:51:25 AM (2 years ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
IOC_T05
v17 v18 53 53 * Dans `URL de gestionnaire de cartes supplémentaires`, écrire :[[BR]] 54 54 `https://dl.espressif.com/dl/package_esp32_index.json` 55 * Cliquer sur `ok` 55 * Cliquer sur `ok` (il y a peut-être des problèmes de proxy, si oui, ajoutez à votre `.bashrc`:[[BR]]`export http_proxy=http://asim.lip6.fr:3128`) 56 56 * Cliquer sur `Outils > Type de carte... > Gestionnaire de carte` 57 57 * Écrire dans la fenêtre de recherche : `esp32`` … … 138 138 }}} 139 139 140 140 141 == Gestion des tâches standard périodiques 141 142 142 Pour les tâches périodiques (elles sont fréquentes), nous pouvons écrire une fonction qui exploite un timer interne du processeur qui s'incrémente chaque microseconde. Cette fonction nommée `waitFor(int timer, unsigned long period)` prend deux paramètres `timer` et `period`. Le premier un numéro de timer (il en faudra autant que de tâches périodiques). Le second est une période en microsecondes. 143 144 Pour les tâches périodiques (elles sont fréquentes dans les applications embarquées), nous pouvons écrire une fonction qui exploite un timer interne du processeur qui s'incrémente chaque microseconde. Cette fonction nommée `waitFor(int timer, unsigned long period)` prend deux paramètres `timer` et `period`. Le premier un numéro de timer (c'est un identifiant, il en faudra autant que de tâches périodiques défini dans le `#define MAX_WAIT_FOR_TIMER`). Le second est une période en microsecondes. 143 145 144 146 `wairFor()` peut être appelée aussi souvent que l'on veut, elle rend la valeur 1 une seule fois par période (second paramètre). 145 147 Si elle n'est pas appelée pendant longtemps alors elle rend le nombre de périodes qui se sont écoulées. 146 Autrement dit, si dans une tâche vous écrivez `waitFor(12,100)` parce c'est le timer n°12 et que la période est de `100us` et si vous n'exécutez pas la tâche pendant `500us` alors au premier appel après ce délai de 500us `waitFor(12,100)` rendra 5. 148 Autrement dit, si dans une tâche vous écrivez `waitFor(12,100)` parce c'est le timer n°12 et que la période est de `100us` et si vous n'exécutez pas la tâche pendant `500us` alors au premier appel après ce délai de 500us `waitFor(12,100)` rendra 5. Si vous écrivez `waitFor(12,100)`, vous avez au moins 13 tâches périodiques allant de 0 à 12 et donc vous avez `#define MAX_WAIT_FOR_TIMER 13` ou plus. 147 149 148 150 149 151 == Exemple 152 150 153 151 154 Dans l'application suivante nous avons deux tâches périodiques `Led` et `Mess`. … … 153 156 La seconde affiche bonjour à une fois par seconde. 154 157 Ici, les tâches ne communiquent pas entre elles. 155 VOus pouvez nodifier le programme initial pour afficher "Salut" en plus de "bonjour" toutes les 2 secondes sans changer le comportement existant. Vous aurez donc "Salut" et "bonjour" qui s'affiche avec une périodicité propre à chaque message.158 VOus pouvez modifier le programme initial pour afficher "Salut" en plus de "bonjour" toutes les 2 secondes sans changer le comportement existant. Vous aurez donc "Salut" et "bonjour" qui s'affiche avec une périodicité propre à chaque message. 156 159 157 160 … … 170 173 // - period : période souhaitée 171 174 // retour : 172 // - nombre de période écouléedepuis le dernier appel175 // - nombre de périodes écoulées depuis le dernier appel 173 176 // -------------------------------------------------------------------------------------------------------------------- 174 177 #define MAX_WAIT_FOR_TIMER 2 … … 245 248 }}} 246 249 250 247 251 **Questions** 252 248 253 249 254 Mettez ces réponses dans votre CR (avec les questions pour que le CR soit lisible) … … 255 260 = Utilisation de l'écran OLED 256 261 257 Nous allons utiliser un écran OLED connecté en I2C, 128x64 **ssd1306** 258 - La bibliothèque de l'écran se trouve en tapant la requête `ssd1306 arduino`[[BR]] à l'adresse 259 [https://github.com/adafruit/Adafruit_SSD1306]. 260 Vous devrez prendre également la bibliothèque GFX à l'adresse [https://github.com/adafruit/Adafruit-GFX-Library] 261 qui est la bibliothèque graphique.262 263 Nous allons utiliser un écran OLED connecté en I2C, 128x64 **ssd1306**. Vous devez ajouter les fonctions d'accès à cet écran, c'est en fait son **driver**, mais contrairement à UNIX, l'API des drivers n'est pas standard, chaque périphérique propose ces fonctions et ces codes sont proposées, soit par les constructeurs, soit par des membres de la communauté. 264 - Allez dans `Outils/Gérer les bibliothèques` (`Tools/Manage Libraries`) 265 - Tapez dans la barre de recherche à droite de la fenêtre : `ssd1306 arduino` (la 1re de la liste) et installez la version `1.3.0` (celle-là fonctionne pour moi). 266 Vous devez prendre également la bibliothèque graphique GFX en Tapant `Adafruit GFX Library` (la 2me de la liste) et installez la version `1.10.14` 262 267 - Vous pouvez exécuter l'exemple proposé dans la bibliothèque. Cette bibliothèque fonctionne pour plusieurs 263 268 types modèles. Vous allez choisir le bon exemple : 128x64 I2C. 264 - Pour ajouter une bibliothèque Arduino, vous devez simplement télécharger le .zip et importer directement le265 .zip en sélectionnant le menu `Sketch -> include Library -> Add ZIP Library`266 269 - Pour tester la librairie rendez-vous dans `File -> Exemples -> Adafruit SSD1306 -> ssd1306_128x64_i2c`. 267 270 Il s'agit d'un programme qui teste les fonctionnalité de l'écran et de la bibliothèque graphique. … … 279 282 **Questions** 280 283 284 281 285 - Extraire de ce code, ce qui est nécessaire pour juste afficher un compteur qui s'incrémente toutes des 1 seconde sur l'écran OLED. Vous devez ajouter une tâche nommée `oled` dans votre programme en conservant celles déjà dans votre sketch (programme Arduino). L'idée, c'est d'avoir plein de tâches ensemble. 282 286