5. Traitement de l'information en TypeScript
Dans AppBanquette, le traitement de l'information cote mobile consiste a transformer une action utilisateur en commande claire pour le firmware. L'application ne pilote pas directement le moteur : elle envoie des messages courts au module HC-05, qui les transmet a l'ATmega.
Le chemin d'une commande
Le chemin est le suivant :
Appui utilisateur
-> fonction TypeScript
-> verification de la connexion
-> commande texte
-> ecriture Bluetooth
-> lecture serie par le firmware
Les commandes sont volontairement tres courtes :
Upour monter ;Dpour descendre ;Spour stopper ;S1aS10pour sauvegarder une position ;P1aP10pour charger une position.
Envoi Bluetooth
La fonction centrale est sendCommand(). Elle verifie que l'application est connectee et qu'un appareil Bluetooth existe avant d'ecrire :
await device.write(command);
Cette verification evite d'envoyer une commande dans le vide. Si le telephone n'est pas connecte, l'application ne doit pas tenter de commander la banquette.
Appui maintenu et watchdog
Les boutons MONTER et DESCENDRE ne se contentent pas d'envoyer une seule commande. Quand l'utilisateur maintient le bouton, l'application repete la commande toutes les 100 ms.
Ce choix est lie au firmware. Celui-ci possede un watchdog : si les commandes ne sont plus recues, le moteur est coupe. L'application doit donc prouver en continu que l'utilisateur maintient l'ordre.
Quand le bouton est relache, l'application :
- arrete l'intervalle d'envoi ;
- envoie
S.
Cela donne un comportement plus sur : le firmware recoit un ordre d'arret explicite, et meme si cet ordre etait perdu, le watchdog finirait par couper le moteur.
Profils : deux memoires differentes
Les profils utilisent deux stockages :
- le telephone garde le nom, le prenom et la photo ;
- l'ATmega garde la position physique.
Quand un profil est cree, l'application choisit un identifiant libre entre 1 et 10. Elle envoie ensuite S suivi du numero, par exemple S2. Le firmware lit la position du potentiometre et l'ecrit en EEPROM.
Ensuite, l'application sauvegarde les informations du profil dans AsyncStorage, sous forme JSON.
Charger un profil
Quand l'utilisateur appuie sur un profil, l'application envoie P suivi du numero. Exemple :
P2
Le firmware lit la position sauvegardee dans l'emplacement 2 et deplace la banquette jusqu'a cette valeur.
Le telephone ne connait pas la position exacte. C'est un choix sain : la position reelle depend du capteur, donc elle reste geree cote embarque.
Pourquoi TypeScript aide
TypeScript permet de rendre les donnees plus explicites. Un profil n'est pas une structure vague : il doit avoir un id, un firstName, un lastName et peut avoir une imageUri.
Le code est donc plus facile a relire et plus difficile a casser par erreur. TypeScript ne remplace pas les tests sur la vraie banquette, mais il aide a fiabiliser la partie application.