Struct

Signaler
Messages postés
25
Date d'inscription
lundi 17 juillet 2006
Statut
Membre
Dernière intervention
23 mars 2012
-
Messages postés
2671
Date d'inscription
vendredi 25 janvier 2002
Statut
Membre
Dernière intervention
6 février 2013
-
BOnjour,

ss debutant et j'ai une petie question:

Je regroupe ds un struct plusierus état de led:
struct led
{
unsigned led1 : 1 ;
unsigned led2 : 1 ;
unsigned led3 : 1 ;
unsigned led4 : 1 ;
unsigned led5 : 1 ;
unsigned led6 : 1 ;
unsigned led7 : 1 ;
unsigned led8 : 1 ;
} led;

Les etat des leds sont mis a jour en fonction de certains evenements.

Maintenant je voudrais mettre ttes les leds à 0 et faire un truce genre:
led=0;

ou encore je vourdais tester régulierment si
led=0x55 et lancer une fonction à ce moment

Mais visiblement il n'est pas possible d'affecter une valeur directement à cette structure et encore moins de faire un test dessus ?

Comment faire?

merci,

6 réponses

Messages postés
2671
Date d'inscription
vendredi 25 janvier 2002
Statut
Membre
Dernière intervention
6 février 2013
1
Salut,

En effet il est impossible d'accèder aux valeur des elements d'une structure seulement avec le nom de la structure.
La seule solution est que tu te fasses une fonction de vérification, ca devrait pas dépasser les 5 lignes de codes...

Pour ce qui est de la vérification périodique, tu as deux solutions:
- Utiliser un thread
- Utiliser un timer

Shell
Messages postés
25
Date d'inscription
lundi 17 juillet 2006
Statut
Membre
Dernière intervention
23 mars 2012

Pr le verif perio pas de soucis de ce coté là, mais c'est juste comment checké que:
led (la structure) est égale à 0x55 par exemple?
Messages postés
2671
Date d'inscription
vendredi 25 janvier 2002
Statut
Membre
Dernière intervention
6 février 2013
1
C'est ce que je t'ai dis dans ma deuxieme phrase!

Tu te fais un petite fonction du genre :

bool checkStatus(led l, int value)
{
  return (l.led1 value && l.led2 value && l.led3) // Tu fais ca pour toutes tes leds
}


Ensuite pour faire la vérification :

led myLed;
// Tu mets les valeurs que tu veux dans myLed

bool ledStatus = checkStatus(myLed, 0x55);

if(ledStatus == true){
   // Toutes les leds ont la valeur 0x55
}


Shell
Messages postés
792
Date d'inscription
mardi 8 juillet 2003
Statut
Membre
Dernière intervention
12 juillet 2019
8
Bonjour

Si tu n'as que 8 Led tu peux utiliser un entier et gèrer les bits. Ainsi tu pourras faire ton test led == 0x55
Pour gérer les états des Leds tu utilises les opérations binaires.

louis
Messages postés
25
Date d'inscription
lundi 17 juillet 2006
Statut
Membre
Dernière intervention
23 mars 2012

BOnjour,

@louis: au risque de paraitre lourd tu peux eclairer plus ma lanterne stp

merci,
Messages postés
2671
Date d'inscription
vendredi 25 janvier 2002
Statut
Membre
Dernière intervention
6 février 2013
1
Salut,

@Louis:
Un entier = 32 bits et non 8 bits!

@Morbak:
Pour reprendre l'idée de louis qui n'est pas mauvaise, l'idée est de remplacer ta structure par un byte !
1 byte = 8 bits.

Si tes led on seulement deux états 0 et 1 tu peux alors directement travailler sur un entier.

La représentation sera la suivante :
byte ledsState = 0x00; // Egal à 00000000, soit toutes les leds sont à 0
byte ledsState = 0xFF; // Egal à 11111111, soit toutes les leds sont à 1
byte ledsState = 0x55; // Egal à 01010101, soit une led sur deux est à 1
Etc...

Tu vois donc que tu peux facilement

Shell