Struct

morbak01 Messages postés 25 Date d'inscription lundi 17 juillet 2006 Statut Membre Dernière intervention 23 mars 2012 - 8 nov. 2010 à 12:06
DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013 - 9 nov. 2010 à 16:58
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

DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013
8 nov. 2010 à 15:37
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
0
morbak01 Messages postés 25 Date d'inscription lundi 17 juillet 2006 Statut Membre Dernière intervention 23 mars 2012
8 nov. 2010 à 15:57
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?
0
DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013
8 nov. 2010 à 16:09
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
0
cs_louis14 Messages postés 793 Date d'inscription mardi 8 juillet 2003 Statut Membre Dernière intervention 10 février 2021 8
9 nov. 2010 à 09:17
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
morbak01 Messages postés 25 Date d'inscription lundi 17 juillet 2006 Statut Membre Dernière intervention 23 mars 2012
9 nov. 2010 à 09:46
BOnjour,

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

merci,
0
DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013
9 nov. 2010 à 16:58
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
0
Rejoignez-nous