Bloug 277 Signaler ce message Posté(e) 3 juin 2018 Bonjour, jet rourne en rond avec ma boucle Je souhaite faire clignoter diverses lumières au passage à 1 d'une variable prédéfinie "Alarme" --[[ %% properties %% weather %% events %% globals Alarme --]] local etatalarme = tonumber(fibaro:getGlobalValue("Alarme")) while etatalarme == 1 do fibaro:call(20, "startLevelIncrease",10,1); fibaro:sleep(250); fibaro:call(20, "startLevelDecrease",1,99); fibaro:sleep(250); end pourquoi la boucle ne s’arrête pas quand la variable est à 0 ? merci Partager ce message Lien à poster Partager sur d’autres sites
Dragoniacs 433 Signaler ce message Posté(e) 3 juin 2018 Il faut que tu ajoute une vérification de l'état de ta variable alarme dans ta boucle while. Envoyé de mon SM-A520F en utilisant Tapatalk Partager ce message Lien à poster Partager sur d’autres sites
pepite 1 272 Signaler ce message Posté(e) 3 juin 2018 Et que tu sortes de la boucle quand la variable est à 0 Envoyé de mon BND-L21 en utilisant Tapatalk Partager ce message Lien à poster Partager sur d’autres sites
Bloug 277 Signaler ce message Posté(e) 3 juin 2018 (modifié) --[[ %% properties %% weather %% events %% globals Alarme --]] local etatalarme = tonumber(fibaro:getGlobalValue("Alarme")) while etatalarme == 1 do if (tonumber(fibaro:getGlobalValue("Alarme")) == 1) then fibaro:call(20, "startLevelIncrease",10,1); fibaro:sleep(250); fibaro:call(20, "startLevelDecrease",1,99); fibaro:sleep(250); elseif (tonumber(fibaro:getGlobalValue("Alarme")) == 0 ) then fibaro:abort() end end EDIT : ca fonctionne maintenant Merci Modifié 3 juin 2018 par Bloug Partager ce message Lien à poster Partager sur d’autres sites
BenjyNet 1 200 Signaler ce message Posté(e) 3 juin 2018 C'est pas un peu tordu ? Il ne suffirait pas juste de faire --[[ %% properties %% weather %% events %% globals Alarme --]] local etatalarme = tonumber(fibaro:getGlobalValue("Alarme")) while etatalarme == 1 do fibaro:call(20, "startLevelIncrease",10,1); fibaro:sleep(250); fibaro:call(20, "startLevelDecrease",1,99); fibaro:sleep(250); local etatalarme = tonumber(fibaro:getGlobalValue("Alarme")) end ou même peut-être juste --[[ %% properties %% weather %% events %% globals Alarme --]] while tonumber(fibaro:getGlobalValue("Alarme") == 1 do fibaro:call(20, "startLevelIncrease",10,1); fibaro:sleep(250); fibaro:call(20, "startLevelDecrease",1,99); fibaro:sleep(250); end Partager ce message Lien à poster Partager sur d’autres sites
jojo 2 608 Signaler ce message Posté(e) 3 juin 2018 en effet car le do while en sois est un test de condition. Donc il faut s'assurer que la variable alarme retpurne bien à 0 Partager ce message Lien à poster Partager sur d’autres sites
Bloug 277 Signaler ce message Posté(e) 4 juin 2018 @BenjyNet Tordu ? Oui C'est clair ! Sur tes deux dernières solutions la première n’arrête pas ma boucle et la seconde est identique à mon premier post donc négatif également. mais oui je pense qu'il doit surement y avoir plus simple que ma condi-Boucle Partager ce message Lien à poster Partager sur d’autres sites
Dragoniacs 433 Signaler ce message Posté(e) 4 juin 2018 Essaye ceci : --[[ %% properties %% weather %% events %% globals Alarme --]] local etatalarme = tonumber(fibaro:getGlobalValue("Alarme")) while etatalarme == 1 do fibaro:call(20, "startLevelIncrease",10,1); fibaro:sleep(250); fibaro:call(20, "startLevelDecrease",1,99); fibaro:sleep(250); etatalarme = tonumber(fibaro:getGlobalValue("Alarme")) end Peut être que si tu redéclares un "local" dans ta boucle while, il ne comprend pas que c'est la même variable que celle qui a initialisé la boucle. 1 Partager ce message Lien à poster Partager sur d’autres sites
pepite 1 272 Signaler ce message Posté(e) 5 juin 2018 Salut tout le monde, Je croyais que cela fonctionnait ? Ce n'est plus le cas ? Partager ce message Lien à poster Partager sur d’autres sites
Bloug 277 Signaler ce message Posté(e) 5 juin 2018 si si mon code marche mais @Dragoniacs le trouve tordu alors il l'affine et d'ailleur la dernière solution marche également ! Merci ! donc avantage ou inconvénient d'une sur l'autre ? a voir 1 Partager ce message Lien à poster Partager sur d’autres sites
Dragoniacs 433 Signaler ce message Posté(e) 6 juin 2018 Non, je le trouve pas tordu, mais l'utilisation du abord() me gêne C'est trop violent pour moi Partager ce message Lien à poster Partager sur d’autres sites
Lazer 8 457 Signaler ce message Posté(e) 7 juin 2018 Dans ce code, tu remplaces fibaro:abort() par break et ça reviendra au même : sortie immédiate de la boucle, et fin du script Ça te gêneras peut être moins 2 Partager ce message Lien à poster Partager sur d’autres sites
mprinfo 3 332 Signaler ce message Posté(e) 7 juin 2018 Break c'est plus basic Envoyé de mon SM-G901F en utilisant Tapatalk Partager ce message Lien à poster Partager sur d’autres sites
Lazer 8 457 Signaler ce message Posté(e) 7 juin 2018 C'est surtout un mot clé issu de l'un des plus anciens langage, le père de tous les langages modernes.... le C 2 Partager ce message Lien à poster Partager sur d’autres sites
BenjyNet 1 200 Signaler ce message Posté(e) 7 juin 2018 Moi je comprends pas pourquoi ce code il marcherait pas ? --[[ %% properties %% weather %% events %% globals Alarme --]] while tonumber(fibaro:getGlobalValue("Alarme")) == 1 do fibaro:call(20, "startLevelIncrease",10,1); fibaro:sleep(250); fibaro:call(20, "startLevelDecrease",1,99); fibaro:sleep(250); end Partager ce message Lien à poster Partager sur d’autres sites
mprinfo 3 332 Signaler ce message Posté(e) 7 juin 2018 C'est surtout un mot clé issu de l'un des plus anciens langage, le père de tous les langages modernes.... le CBreak c'est plus basic Envoyé de mon SM-G901F en utilisant TapatalkC'est ce que j'ai ditC + BASICEnvoyé de mon SM-G901F en utilisant Tapatalk 1 Partager ce message Lien à poster Partager sur d’autres sites
Lazer 8 457 Signaler ce message Posté(e) 7 juin 2018 @BenjyNet oui d'accord avec toi Partager ce message Lien à poster Partager sur d’autres sites
Bloug 277 Signaler ce message Posté(e) 7 juin 2018 bah moi non plus Partager ce message Lien à poster Partager sur d’autres sites
BenjyNet 1 200 Signaler ce message Posté(e) 7 juin 2018 Re test @Bloug j'avais zappé une parenthèse dans le code plus haut Partager ce message Lien à poster Partager sur d’autres sites
Bloug 277 Signaler ce message Posté(e) 10 juin 2018 (modifié) ahhh bah Voila ! donc ok pour : --[[ %% properties %% weather %% events %% globals Alarme --]] while tonumber(fibaro:getGlobalValue("Alarme")) == 1 do fibaro:call(20, "startLevelIncrease",10,1); fibaro:sleep(250); fibaro:call(20, "startLevelDecrease",1,99); fibaro:sleep(250); end et pour bien comprendre ...... c'est quoi qui merde alors ? la variable ? --[[ %% properties %% weather %% events %% globals Alarme --]] local etatalarme = tonumber(fibaro:getGlobalValue("Alarme")) while etatalarme == 1 do fibaro:call(20, "startLevelIncrease",10,1); fibaro:sleep(250); fibaro:call(20, "startLevelDecrease",1,99); fibaro:sleep(250); end Encore merci Modifié 10 juin 2018 par Bloug Partager ce message Lien à poster Partager sur d’autres sites
Lazer 8 457 Signaler ce message Posté(e) 10 juin 2018 Ta 2nde boucle ne peut pas fonctionner, car tu ne mets à jour la variable "etatalarme" qu'une seule fois avant de rentrer dans la boucle infinie. Elle ne changera jamais de valeur à chaque boucle Il faut donc rafraichir la valeur de ta variable etatalarme avec la valeur de la variable globale Alarme à chaque passage dans la boucle pour que ça fonctionne. 1 Partager ce message Lien à poster Partager sur d’autres sites
Bloug 277 Signaler ce message Posté(e) 10 juin 2018 Ah ok, c'est plus clair là. merci Partager ce message Lien à poster Partager sur d’autres sites