Gérer un lave linge en co-propriété - Réalisation du parfait NOOB

Comme pérécédemment suggéré, j'ai créé un github:

Bravo! Ca avance bien alors...

J'essaie de ne jamais rester coincé trop longtemps..

Tu utilises github toi ?

Et quelle IDE?
J'en ai vu passer une autre sur un YouTube qui semblait avoir fonctions supplémentaires pratiques. Mais surtout à savoir si c'est adapté Arduino et esp..

Dans l'immédiat je regarde pour incorporer l'IDE Arduino au github desktop

Least Significant Bit : bit le moins significatif. On parle là de poids binaire donc c'est le plus à droite lorsqu'on écrit en binaire.
Most Significant Bit: bit le plus significatif. Donc celui le plus à gauche lorsqu'on écrit en binaire.

Au lieu d'utiliser un chiffre ici, il serait plus simple, plus propre et plus clair d'utiliser un define ou une constante avec un nom bien clair.

(6ème bit) 1=write protected
(7ème bit) 1=enabled 
(8ème bit) 1=admin

Comme par exemple

const uint8_t TAG__PROTECTED 5
const uint8_t TAG_ENABLED 6
const uint8_t ADMIN 7

ou mieux faire un enum

enum rights {TAG__PROTECTED=5, TAG_ENABLED, ADMIN};

Et ainsi faire

if (bitRead(rights, TAG_ENABLED))

et comme ça on se fout de savoir si c'est le LSB ou le MSB.

Oui : lesept777 · GitHub

J'utilise l'IDE Arduino pour des petits programmes. Lorsque ça devient compliqué, pour des bibliothèques par exemple, j'utilise Sublime Text en parallèle de l'IDE. Mais je pense que chacun fait ses propres choix...

Je vois pas trop l'intérêt.
Tu développes ton code dans l'IDE et tu gères ton dépôt avec github desktop.
Il n'y a aucun réel besoin de lier l'IDE et github desktop.

Tout à fait d'accord avec toi!!

Merci en tout cas pour ces infos, je vais de toute façon essayer Sublime Text! :+1:

Merci pour cette confirmation! J'ai corrigé mes notes, et c'est donc:

3  uint8_t   putUInt	Utilisateur[i].rights  "Stu%dEx"	(3ème bit) 1=write protected
4								                            (2ème bit) 1=enabled 
5 				       	                         	        (1ème bit) 1=admin

Je vais me familiariser et réfléchir sur ce que tu me conseilles, histoire de faire les choses correctement,

Par exemple sur cette façon de faire, je vais donc avoir une variable uint8_t pour chaque flag (admin, enable/disable, et protection state) donc un totale de 3 variables différentes?
J'essaie de m'assurer que j'ai bien compris, car pour le coup j'essaie de garder tout ce petit monde dans une une seule et unique variable (uint8_t rights)..

Je vois bien le 5, 6 et 7 en fin de ligne... mais je m'attendais plutot à un nom commun pour le variable... genre:

const uint8_t rights TAG__PROTECTED 5
const uint8_t rights TAG_ENABLED 6
const uint8_t rights ADMIN 7

C'est comme je disais, il faut que je potasse le truc pour ne pas vous faire perdre votre temps..!

enum et moi ne sommes pas encore familliers (ça ne saurait tarder..), mais là pour le coup je le sens plus car tout est dans rights.. j'imagine que le =5 est là pour indiquer d'où débute l'énumération.. donc pour moi ça devrait être:

enum rights {ADMIN=0, TAG_ENABLED, TAG__PROTECTED};

Je vais aller vérifier ça au plus vite.. aucune intension de réinventer la roue!

:star_struck: :+1: :+1:

Ok,
Je pensais que ce serait par exemple utile dans le cas d'une pull-request, pour changer et mettre à jour le code directement sur le serveur git, en bossant directement sur le cloud... puis de temps à autre prendre une copie du main pour me garder une copie en local..

Oui, le 5 indique le début de l'énumération.
Si tu veux

  • ADMIN = 0
  • TAG_PROTECTED = 5
  • TAG_ENABLED = 6

il te faut un enum du genre (le 0 est par défaut) :
enum rights {ADMIN, ONE, TWO, THREE, FOUR, TAG_ENABLED, TAG__PROTECTED};
Ici, le mots rajoutés sont là uniquement pour occuper le terrain, tu peux les changer si tu en as besoin plus tard.

Là on définit juste des constantes que l'on pourra affecter à une variable gérant les droits

uint8_t right;
...
right = TAG__PROTECTED; // on indique que le tag est protégé
...
right = TAG__PROTECTED || ADMIN; // on indique que le tag est protégé et qu'il possède les droits admin
**edit** erreur dans cette partie voir [#323](https://forum.arduino.cc/t/gerer-un-lave-linge-en-co-propriete-realisation-du-parfait-noob/908070/323)

Pas de méprise, rights n'est pas une variable c'est seulement un nom que l'on donne à un ensemble de valeurs.

Merci pour toutes ces infos, conseils et suggestions,
Je ne vous cache pas que j'ai un peu de mal à suffisamment m'y retrouver, donc comme dis je me documente et je m'assure de 'maitriser' un minimum avant de mettre les mains dans le cambouis.. :grimacing:

D'autant plus que je dois réfléchir et anticiper de possible difficultés liées à la gestion ESPAsyncWebServer.h des pages internet que je vais plus tard rajouter...
Je me doute bien que tout ce petit monde est fait pour fonctionner ensemble, mais je dois m'assurer que ce sera dans mes cordes...

Et pour couronner les tout, la ref arduino n'est pas bavarde du tout sur le sujet enum..

Oui tu as bien fait de préciser... donc fini de charger tous les bit d'un coup en une valeur décimale ou hexa... après ça il me faudra les configurer indépendamment !

...donc je déclare une variable uint8_t rights, puis chaque constante const uint8_t...

Il faut vraiment que je m'imprime le sujet / nouveau mode de fonctionnement dans les cellules grises, et ça ira par ce que là il me reste encore trop d'inconnues..

Est ce que je vais pouvoir charger et/ou sauvegarder 'rights' pour un Tag défini, en une seule opération? (je dirais oui, mais je préfère quand même demander)

  sprintf(nomParam, "Stu%dEx", b);
  storedRights = sauvegardeStudios.getUInt(nomParam);
  sprintf(nomParam, "Stu%dEx", b);                          // Loads nomParam with proper Stu%dEx value based on the value of b
  sauvegardeStudios.putUInt(nomParam, rights);              // Store rights of user b into sauvegardeStudios

Vu le niveau que tu as atteint, tu devrais te tourner vers ce site : cplusplus

Merci @lesept , j'ai trouvé ça, et ça aussi.

Et du coup ça commence à aller mieux...

Bon, pour commencer, il me faut corriger la petite confusion causée par mon erreur de least-significant:
-le premier, avec le poids binaire le plus faible (à droite) est ADMIN,
-Le second, est TAG_ENABLED,
-le troisième, est TAG_PROTECTED.
En tout cas c'est comme ceci que le sketch est actuellement configuré.

donc sur cette base, on crée un 'data-type' de type 'peu-importe' qui définie (dans notre cas de façon constante) que ADMIN=0, TAG_ENABLED=1, et TAG_PROTECTED=2 par

enum rights-refs{ADMIN, TAG_ENABLED, TAG_PROTECTED};

(par défaut, le premier est 0, le deuxième 1, et le troisième 2, etc.) (j'aurais donné une autre valeur (=..) au premier si si ça avait été nécessaire, et de fait pour la valeur de ses suiveurs..)

ADMIN, TAG_ENABLED, TAG_PROTECTED sont donc maintenant devenus mes références fixes que je peux utiliser pour pointer vers le bon bit de mon

uint8_t rights;

Donc, maintenant,
Je peux tester comme ça pour savoir si rights à son 2ème bit à 1 :

if (bitRead(rights, TAG_ENABLED))

si je veux savoir si il est à 0 ça devrait maintenant être :

if (bitRead(rights, !TAG_ENABLED))

Et si je veux configurer ADMIN, TAG_PROTECTED, TAG_ENABLED (que j'ai volontairement présentés dans le désordre) à 1, 0, et 1, je fais:

rights = ADMIN ||!TAG_PROTECTED || TAG_ENABLED;

BAM!!!

(enfin j'espères... :stuck_out_tongue_winking_eye:)

Bon, presque.. :yum:

le ' - ' dans le nom au moment de la déclaration... no-no-no...! :grimacing: Lesson aprise...! :stuck_out_tongue_winking_eye:
je passe donc 'rights-refs' en 'rightsRefs'

et bien sûr il faut aussi déclarer rightsRefs.. dhooo! :sweat_smile:

uint8_t rightsRefs;

Alors,
Ca compile, mais ça ne configure pas les droits correctement :thinking:

rights == 1 quoi qu'il advienne...

Pour mémoire je configure les droits de chaque nouveau tag avec :thinking:

rights = !ADMIN || TAG_ENABLED || TAG_PROTECTED;

(ADMIN=0 || TAG_ENABLED=1 || TAG_PROTECTED=1)
avec ça, il devrait être à 6, pas à 1..! (4+2+0)

rights == 1,
c'est (ADMIN=1 || TAG_ENABLED=0 || TAG_PROTECTED=0)
((4x0)+(2x0)+(1x1))

Pas de différence avec

rights = (!ADMIN || TAG_ENABLED || TAG_PROTECTED);

Ou même

rights = (ADMIN || TAG_ENABLED || TAG_PROTECTED);

ni même

rights = ADMIN || TAG_ENABLED || TAG_PROTECTED;

...
retour à la version précédente, le fonctionnement est bon.

C'est donc bien lié aux modifications 'enum', reste à trouver ce que j'ai de faux... :grimacing: