[C] figer la valeur d'une variable

Fermé
matéo - 4 août 2008 à 14:51
 matéo - 4 août 2008 à 17:13
Bonjour,

Pour mon BTS IRIS j'ai besoin de développer une fonction qui permet de récuperer la valeur d'une varaiable augmentant continuellement à un moment voulu.

Mon problème c'est que le résultat m'affiche tout le temps 0.

Est ce que qq'un pourrait me faire un exemple tout bête?!

PS: Voici mon algo en 2 mots -->

//déclarations variables
float Opacity, temp_Opacity, memo_Opacity;

//fonction affichage opacité mémorisée
CASE slot1
IF slot1.seuil_min <= slot1.Opacity <= slot1.seuil_max
ALORS
temp_Opacity = Opacity;
memo_Opacity = temp_Opacity;
SetCtrlAttribute(mainPanel3, MainPanel3_OpacityButton, ATTR_CTRL_VAL, memo_Opacity)
A voir également:

4 réponses

fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 840
4 août 2008 à 14:54
Salut,
Si ton code c'est du C, donne nous plutôt le code ;). Et utilise la balise "conservation automatique du code" (à droite de souligner).
Cdt
0
switch (index)
{
case 0: SetCtrlAttribute(mainpanel3,MainPanel3_VEILLE1,ATTR_TEXT_BGCOLOR, VAL_TRANSPARENT);
SetCtrlAttribute(mainpanel3,MainPanel3_VEILLE1,ATTR_TEXT_COLOR, VAL_BLACK);
SetCtrlAttribute(mainpanel3,MainPanel3_ALARM1,ATTR_TEXT_BGCOLOR, VAL_YELLOW);
SetCtrlAttribute(mainpanel3,MainPanel3_ALARM1,ATTR_TEXT_COLOR, VAL_RED);
//ALARME_1... = VISIBLE
SetCtrlAttribute(mainpanel3,MainPanel3_ALARME_11,ATTR_VISIBLE, 1);
if (slt[0].Seuil_MIN <= slt[0].Opacity <= slt[0].Seuil_MAX)
{
SetCtrlAttribute(mainpanel3,MainPanel3_CONFORME1,ATTR_TEXT_COLOR, VAL_RED);
SetCtrlVal(mainpanel3,MainPanel3_CONFORME1,NON_CONFORME);
}
0
matéo > matéo
4 août 2008 à 15:14
ME SUIS TROMPE...
VOICI LE VRAI

switch (index)
{
case 0: SetCtrlAttribute(mainpanel3,MainPanel3_VEILLE1,ATTR_TEXT_BGCOLOR, VAL_TRANSPARENT);
SetCtrlAttribute(mainpanel3,MainPanel3_VEILLE1,ATTR_TEXT_COLOR, VAL_BLACK);
SetCtrlAttribute(mainpanel3,MainPanel3_ALARM1,ATTR_TEXT_BGCOLOR, VAL_YELLOW);
SetCtrlAttribute(mainpanel3,MainPanel3_ALARM1,ATTR_TEXT_COLOR, VAL_RED);
//ALARME_1... = VISIBLE
if (slt[0].Seuil_MIN <= slt[0].Opacity <= slt[0].Seuil_MAX)
{
SetCtrlAttribute(mainpanel3,MainPanel3_CONFORME1,ATTR_TEXT_COLOR, VAL_RED);
SetCtrlVal(mainpanel3,MainPanel3_CONFORME1,NON_CONFORME);
GetCtrlVal (mainpanel3, MainPanel3_OPACITY, temp_Opacity10);
temp_Opacity10 = slt[0].Opacity;
SetCtrlAttribute(mainpanel3,MainPanel3_OPACITY1,ATTR_CTRL_VAL,temp_Opacity10);
}
0
dubcek Messages postés 18744 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 4 septembre 2024 5 617
4 août 2008 à 14:56
qu'est ce qui détermine le moment voulu ?
0
Ce qui détermine le moment c'est quand le détecteur passe en alarme, il doit mémoriser la valeur à cet instant là.
0
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
4 août 2008 à 15:35
(slt[0].Seuil_MIN <= slt[0].Opacity <= slt[0].Seuil_MAX) !
pour moi c'est toujours vrai !
a<b<c est lu en c ainis : (a<b)<c, c'est à dire que tu compare un booléen à c. Pour peu que c soit plus grand que 1, c'est toujours vrai.
0
En faite,

l'opacité démarre à 0 et augmente constamment.
Le seuil_MIN est délimité par exemple a 0.185 et le seuil_MAX à 0.215.
En faite on rentre dans l'instruction IF si lorsque çà passe en alarme, l'opacité réel est comprise entre le Seuil_MIN et le Seuil_MAX.
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 840 > matéo
4 août 2008 à 15:55
Oui mais dans ton cas, on ne rentre jamais dans la boucle.
if (slt[0].Seuil_MIN <= slt[0].Opacity <= slt[0].Seuil_MAX) 
doit être remplacé par
if (slt[0].Seuil_MIN <= slt[0].Opacity && slt[0].Opacity <= slt[0].Seuil_MAX) ! 


Pour t'en convaincre, prenons le cas stslt[0].Opacity= 0.2 (on doit donc rentrer dans la boucle).
0.185<=0.2 renvoie 1 (true). Donc slt[0].Seuil_MIN <= slt[0].Opacity <= slt[0].Seuil_MAX donne 0.185<=0.2<=0.25, soit 1<=0.25, ce qui est faux.
Cdt
0
matéo > fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022
4 août 2008 à 16:16
OK, j'te remercie, j'vais tester la fonction plus tard en entreprise.
C'est vrai que j'avais constaté quand je compilé , à chaque fois çà sautais la boucle. Merci et je verrai si çà marche
0
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
4 août 2008 à 16:54
attantion aussi avec le switch au fait que à la fin d'un case, si tu ne met pas de break, tu fait les instructions qui suivent.
0
oui, j'ai fait un case 1, case 2 ... en fonction du nombre de slot que j'ai
Et j'ai bien mis mon break =)
0