1. Programmes

Structure des communications

Tâche de base

Par porte d'entrée série il y a un seul point de lecture, avec test de présence (présence de plus de 2 bytes) suivi de la lecture 'blocking' de tout le message
Si un processeur avec deux portes reçoit un message qui ne lui est pas destiné, il le renvoie sur l'autre porte.

Un message de sortie est toujours autorisé.Egalement plusieurs messages de sortie.

On peut décrire la tâche de base comme un traitement en réponse à chaque message, sans initiative, sauf un 'message' périodique automatique.

dans le processeur UI

comporte la même tâche de base, complétée par une tâche http.
Le programme est UI_main.py
Le processeur UI avec browser a deux tâches asyncio:

  • l'une traite les messages entrants comme ci-dessus , la seule différence est un test d'inactivité (pas de message entrant ) qui donne le contrôle à l'autre tâche
  • l'autre communique avec le browser et est en fait inactive en vol.

Processeur de calcul

Pico RP2040
Développement avec le boitier V5a voir

  • S_txv5 = lecture brute des DIO ,ADC + affichage LCD
  • ajouter les drivers mcp23Sxx ,mcp3208,st7565
  • etx gère les communications série, pour des blocs de longueur quelconque
  • C_txv5a = conversion des mesures brutes + LCD
  • config.py fournit la configuration et tout ce qui dépend du processeur (petites différences entre python et micropython).
  • core.py comporte en fait tous les programmes du calcul
  • flight_rs.py comporte mes modules standards pour ma façon de piloter
  • un petit lcd affiche des messages (doublure du message envoyé à U_main pour dictée )
    Programme principal C_main.
  • lire les DIO/ADC
  • convertir ces mesures brutes en 'hwvars'
  • extraire les commandes menu pour traitement par UI
  • gérer les changements de phase
  • traiter les boutons de trim
  • exécuter tout le calculs du modèle
  • transférer le résultat vers ppm
  • lire le fichier des paramètres et l'écrire avant l'extinction

Modifier des paramètres en vol

voir core.dt
exemple : la ligne du fichier de paramètres
"dt3:c": ["Ctx:prof","trim"]

  • les boutons du stick 3 , avec swtrim centré (c)
  • sont assignés au paramètre "trim" de l'objet "Ctx:prof"
    La modification du paramètre se fait indépendamment du processeur UI, qui n'intervient que pour l'affichage sur le lcd.
    Ceci sert aux réglages en vol

Le message envoyé est '21' (commande menu) et le message reçu est '14' avec le texte pour le lcd.
Les données nécessaires sont transférées périodiquement vers UI:

Le traitement proprement dit est dans UI et il peut renouveler périodiquement l'affichage.

Les commandes menu

Les commandes menu sont les pressions sur les deux boutons du stick droit (DT5), combinées avec l'état du switch strim.
Si le strim est centré, elles sont traitées par le processeur de calcul. Dans les autres cas elles sont traitées par UI.

Strim centré = les phases

Ceci décrit mon approche actuelle; une autre approche est possible.
Ceci est géré par le processeur de calcul.
La phase principale est déterminée par le SW4 , à 3 positions, qui définit le rôle du stick M1

  • en haut = avec moteur (M1 = thr)
  • centre = val normal
  • bas = atterrissage (M1=brake
    Les sous-phases sont choisies par les boutons de trim du manche et pour le moment sont définies dans le programme du modèle.

Strim en haut= menus démarrage/arrêt

Pour le démarrage: choisir dans une liste de modèles celui qui sera utilisé au prochain démarrage, parmi une liste courte qui a été établie avec le menu complet UI.
Permet un arrêt /redémarrage.
Permet un arrêt sans redémarrage (le redémarrage est ultérieur avec le bouton de power-on BA2 )

Switch en bas = réservé pour menus en cours de vol

J'ai prévu un menu pour choisir parmi quelques quelques affichages d'informations sur le lcd, sans dialogue.

Messages

messages envoyés

Les messages envoyés contiennent une liste de données

  • '10' bouton de trim enfoncé =début d'une pression longue
  • '11' bouton de trim libéré
  • '12' valeur du trim en cours de modification
  • '19' nom de phase
  • '20' message en texte , à dicter (avertissement , erreur)
  • '21' commande menu (commande_menu, svol)
  • '22' transfert name+ paramètres=>UI
  • '??' valeurs des canaux ppm si géré par processeur radio

messages reçus

  • '12' définition d'un paramètre modifiable en vol , par exemple "dt3:c": ["Ctx:prof","trim","trim profondeur"]
    • id objet ("Ctx:prof"),nom paramètre ("trim")
    • identification des boutons utilisés:
      "dt3:c" =numéro dt, position strim
    • texte dicté ("trim profondeur") optionnel
    • définition de la validation optionnel
      • 'C' pour une valeur numérique continue
      • 'I' pour une valeurs entière
      • 'B' pour une valeur logique ou True/False
    • limites min, max et valeur centrale (inutile pour 'B')
  • '13' contenu d'un paramètre (modifié )
    • id objet, nom paramètre
    • structure Json
  • 14 texte destiné au LCD dans la mesure ou le lcd est géré par calcul
  • 15 demande de power off (avec délai )
  • '26' liste des noms de variables hwvars pour log
  • '28' liste des noms de variables cvars pour log
  • '32' liste des valeurs des variables de télémétrie
  • '40' demande d'envoyer un json avec toutes les données (réponse 41)
  • '41' ...suite 40

Processeur UI

Dictée

Dans le programme d'interface UI, une fonction 'dicte' donne accès à la dictée, tout en gardant les options ouvertes quant à la façon de dicter.
Pour le développement, 'dicte()' se limite à l'affichage sur le lcd ou print

Appel :

dicte(liste)

  • un seul paramètre d'appel, sous la forme d'une liste
  • chaque élément de la liste :
    - un libellé (type = str) qui ne commence pas par {
    - un format valable pour les nombres qui suivent , sous la forme d'un str { }. Le format par défaut est float 1 décimale
    - un nombre
    Cette liste est également affichable sur le lcd

Affichage lcd

cette liste est affichée sur le lcd, un élément par ligne.

implémentation: voir 1.2 Options

Mode de fonctionnement vol/sol/browser

Émetteur en main ,mode vol/sol

Le processeur traite des messages envoyés par le processeur de calcul, les met en forme imprimable , transmet le texte vers le petit lcd et traduit le texte en message dicté.

Émetteur posé

Ici le pilote tient en main un smartphone, ou utilise le clavier d'un laptop/desktop.
J'envisage un développement tout à fait séparé et qui utilise un laptop, du moins pour commencer et parce que cette solution est disponible et facile.
L'interface UI utilise PySimpleGUI .
Cet interface UI comporte plusieurs 'tabs'.
Un des tabs comporte les commandes de l'émetteur:

  • soit la valeur reçue de l'émetteur car il y a une connexion série.
  • soit des valeurs modifiables car il n'y a pas de connexion avec l'émetteur....c'est le simulateur
    Une autre façon de fire serrait un interface web tel que NiceGUI

Simulateur = sans émetteur