22 mai 2026

5. Traitement de l'information en TypeScript

Comment une action utilisateur devient une commande Bluetooth exploitable par le firmware : U, D, S, sauvegarde et rappel de profils.

TypeScriptTraitement de donnéesBluetoothProfils

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 :

  • U pour monter ;
  • D pour descendre ;
  • S pour stopper ;
  • S1 a S10 pour sauvegarder une position ;
  • P1 a P10 pour 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 :

  1. arrete l'intervalle d'envoi ;
  2. 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.