Bonjour à tous,
Pour expérimenter un projet en cours, j'utilise actuellement une carte Arduino, qui est bien pratique pour faire pas mal de test à la sauvage à vrai dire
Cependant je suis face à un problème auquel je n'ai jamais été confronté, quel que soit le langage de programmation utilisé :
Dans ce projet, j'ai 30 variables de type boolean qui doivent être envoyée sur un bus de la façon suivante :
Je reçoit plusieurs paquets de variables, j'ajoute celles que j'ai, j'envoi la somme des variables.
Comme au final ce ne sont pas moins d'environ 200 Variables qui circulerons sur ce bus (la somme finale), j'ai décidé de les regrouper en paquet, selon leur fonction, pour limiter le nombre de valeur qui circulerons.
Les 30 premières variables par exemple, sont destinées à commander uniquement des relais, Les 30 suivantes des optocoupleurs, d'autres en revanche seront de type Integer et représenterons des valeurs de température, d'humidité etc..., elles ne pourrons donc pas faire l'objet du condensage que j'envisage ci dessous :
L'idée :
Le principe est simple : Utiliser l'algèbre de boole
En effet, ces 30 variables de type boolean ne peuvent prendre que deux états :
Ce sont donc (30)^2 Solutions qui sont possibles, soit 900.
J'ai donc réalisé un tableau sur excel qui ressemble à peu près à cela :
Cliquez pour afficher
Avec
- autant de colonne qu'il existe de variable boolean, plus une pour le codage qui en retourne.
- autant de ligne qu'il existe de solutions.
Mes questions sont les suivantes :
- Comment puis-je réaliser ce tableau dans le code ? ou une structure similaire ?
- Comment obtenir une instruction qui me renvoi le codage en fonction des variables ?
En fait j'aimerais pouvoir donner ce tableau, et avoir un fonction qui à partir de l'état de variable que je lui donne :
Lire Variable 1
Lire Variable 2
Lire Variable 3
etc...
Retourner Ligne correspondante.
Et que le programme aie chercher directement la ligne qui correspond à l'état de ces variables et qu'elle retourne le n° de la ligne correspondante : ligne 5.
Bien entendu, si cela n'est pas possible c'est toujours réalisable avec une boucle if / else... mais ça me ferait 900 boucles If à faire, juste pour un paquet
Je vous remercie d'avance pour toute l'aide dont vous saurez m'apporter
-----