vendredi 13 mai 2016

Structure du programme


Le fonctionnement du Arduino est principalement monotâche et séquentiel, on ne peut donc par exemple pas imaginer une tâche de fond qui surveille le niveau de batterie (ou alors au moyen d'une interruption mais il faudrait un comparateur externe et une référence de tension car l’interruption fonctionne sur entrée numérique, en général sur des fronts montants ou descendants).

Le fonctionnement est donc basé sur une boucle permanente qui s'exécute après une fonction setup() qui s'exécute une seule fois à la mise sous tension. En générale on initialise les variables et on déclare les entrées/sorties dans cette phase. 
Dans notre cas on lira également les niveaux de puissance stockés dans la mémoire EEPROM (une mémoire non volatile) du µC. En effet, si l'on veux pouvoir modifier les niveau de puissance en direct ils ne peuvent pas être stockés dans le programme sinon ils seraient réinitialisés à chaque coupure d'alimentation.

Deux variables de types int (integer : nombre entier) seront principalement utilisées.

Variable mode


La première définira le mode d'éclairage en cours. Deux tableaux lui seront associés pour les leds spot et wide. Ils contiennent les puissances pour chaque mode et c'est eux que l'on sauvegardera dans l'EEPROM. Le mode 0 correspondra à l'extinction totale, c'est dans ce mode que l'on démarrera à la mise sous tension. Il faut bien comprendre que le µC fonctionne dès la mise sous-tension pour scruter les actions sur les boutons + et -. La lampe branchée et éteinte consomme donc légèrement mais cette consommation reste epsilonesque.
On aura donc deux tableaux de type:
spotPower = [0 n n ... n] et widePower = [0 n n ... n]
avec un nombre d'éléments égal au nombre de mode (y compris l'arrêt total donc). Cette variable mode sera mise à jour à chaque tour de la boucle principale en fonction des appuis sur les boutons + et -, et de la mesure batterie. Voila les modes envisagés dans un premier temps:

Mode widePower spotPower
Commentaire
0 0% 0%
Lampe éteinte
1 10% 0%
Éclairage de secours
2 25% 15%
Mode progression 1
3 40% 25%
Mode progression 2
4 80% 80%
Mode grand volume
5 30% 100%
Mode longue portée
6 100% 100% Mode "qui a la plus longue"

Les modes classiques sont les 1 à 4. 5 et 6 seront uniquement accessibles sur des combinaisons "exotiques" type double-click. Je n'ai pas trop d'expérience de l'utilisation de double faisceau donc j'ajusterais au besoin. Il est à noter que si les intensités seront programmables en live sur la lampe, l'ajustement du nombre de mode et de la façon de naviguer entre eux nécessite le branchement au PC et la modification de quelques lignes de code.

Variable niveau de batterie


La seconde variable définie le niveau de batterie, elle aussi codée sur un int avec à priori les valeurs suivantes:


Valeur inférieure Valeur supérieure Niveau
<3v 0
3v 10% 1
10% 25% 2
25% 50% 3
50% 75% 4
75% 100% 5

Elle sera également mise à jour à chaque tour de boucle, au début de la boucle puisqu'en cas de niveau batterie 0 la suite de la boucle n'a pas lieu de s'exécuter.

Le niveau 0 interdit l'allumage, le niveau 1 le limite au mode 1.

Variable mode programmation


Une troisième variable d'état est l'état du mode programmation des niveaux. Il s'agit ici d'un booléen (vrai ou faux) initialisé à faux au début du programme. Je verrais par la suite si la possibilité de potarder les niveaux en live présente un intérêt vis-à-vis de la complexité de programmation.




Aucun commentaire:

Enregistrer un commentaire