Changes between Version 17 and Version 18 of IOC_T04


Ignore:
Timestamp:
Feb 24, 2023, 7:51:25 AM (19 months ago)
Author:
franck
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • IOC_T04

    v17 v18  
    5353* Dans `URL de gestionnaire de cartes supplémentaires`, écrire :[[BR]]
    5454  `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`)
    5656* Cliquer sur `Outils > Type de carte... > Gestionnaire de carte`
    5757* Écrire dans la fenêtre de recherche : `esp32``
     
    138138}}}
    139139
     140
    140141== Gestion des tâches standard périodiques
    141142
    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
     144Pour 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.
    143145
    144146`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).
    145147Si 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.
     148Autrement 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.
    147149
    148150
    149151== Exemple
     152
    150153
    151154Dans l'application suivante nous avons deux tâches périodiques `Led` et `Mess`.
     
    153156La seconde affiche bonjour à une fois par seconde.
    154157Ici, 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.
     158VOus 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.
    156159
    157160
     
    170173//  - period : période souhaitée
    171174// retour :
    172 //  - nombre de période écoulée depuis le dernier appel
     175//  - nombre de périodes écoulées depuis le dernier appel
    173176// --------------------------------------------------------------------------------------------------------------------
    174177#define MAX_WAIT_FOR_TIMER 2
     
    245248}}}
    246249
     250
    247251**Questions**
     252
    248253
    249254Mettez ces réponses dans votre CR (avec les questions pour que le CR soit lisible)
     
    255260= Utilisation de l'écran OLED
    256261
    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
     263Nous 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`
    262267- Vous pouvez exécuter l'exemple proposé dans la bibliothèque. Cette bibliothèque fonctionne pour plusieurs
    263268  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 le
    265   .zip en sélectionnant le menu `Sketch -> include Library -> Add ZIP Library`
    266269- Pour tester la librairie rendez-vous dans `File -> Exemples -> Adafruit SSD1306 -> ssd1306_128x64_i2c`.
    267270  Il s'agit d'un programme qui teste les fonctionnalité de l'écran et de la bibliothèque graphique.
     
    279282**Questions**
    280283
     284
    281285- 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.
    282286