oui, il n'y a même pas besoin de faire == maskDay puisque le masque ne contient qu'un seul 1 au bon endroit; si l'octet résultat du masque n'est pas nul alors c'est qu'il y avait un 1 au bon endroit.
byte maskLundi = 0b00000001;
byte recurence = 0b01001001; // Lundi, Jeudi; Dimanche
if (recurence & maskLundi) {
// le lundi était bien dans la liste des jours
...
}
si vous vouliez testez pour 2 jours alors effectivement il faudrait faire ==
byte maskLundiJeudi = 0b00001001;
byte recurence = 0b01001001; // Lundi, Jeudi; Dimanche
if ((recurence & maskLundiJeudi) == maskLundiJeudi) {
// le lundi et Jeudi étaient bien dans la liste des jours
...
}
si vous vouliez testez un ou entre plusieurs jours alors pas besoin non plus du ==
byte maskLundiJeudi = 0b00001001;
byte recurence = 0b01001001; // Lundi, Jeudi; Dimanche
if (recurence & maskLundiETJeudi) {
// le lundi ou le Jeudi étaient bien dans la liste des jours
...
}
Notez que si vous définissez l'enum ainsi
enum t_jour : uint8_t {Dimanche = 1, Lundi = 2, Mardi = 4, Mercredi = 8, Jeudi = 16, Vendredi = 32, Samedi = 64, JourIgnore = 128};
const char* jours[] = {"Dimanche", "Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi"};
vous avez directement les bonnes valeurs et donc vous pourriez écrire la définition des tâches avec des OU sans appeler bit()
struct t_tache {
const char * nom;
const uint8_t duree;
const uint8_t difficulte;
uint8_t jours;
} taches[] = {
{"Vaisselle", 1, 1, Lundi | Mardi | Mercredi | Vendredi | Dimanche},
{"Table", 1, 1, Samedi },
{"Bar", 1, 1, Mardi },
{"Balais", 1, 2, Mardi | Samedi },
{"Serpillere", 1, 2, Samedi },
{"Toilette", 7, 3, Samedi },
{"Douche", 5, 2, Lundi | Mardi },
{"Lavabo", 2, 1, Jeudi },
{"Table basse", 4, 1, Mardi | Samedi },
{"Tele", 1, 1, Samedi },
{"Tapis", 10, 3 , Samedi },
{"Sortir poubelle", 5, 3, Mardi | Dimanche },
{"Rentrer poubelle", 5, 3, Mercredi | Lundi }
};
Notez que J'ai mis le dimanche en premier parce que les RTC généralement ont le dimanche comme jour. Si vous voulez afficher le texte correspondant à un jour, on ne peut plus directement utiliser l'enum comme index (puisqu'ils valent 1,2,4,8,16,32....) il faut lire la position du 1 pour savoir quel est l'index. Il y a une fonction du compilateur qui vous dit cela: la fonction __builtin_ctz() qui compte le nombre de 0 à droite de l'octet. Donc par exemple pour afficher le texte "Lundi" vous feriezSerial.println(jours[__builtin_ctz(Lundi)]);