Bloug Posté(e) le 3 juin 2018 Signaler Posté(e) le 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
Dragoniacs Posté(e) le 3 juin 2018 Signaler Posté(e) le 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
pepite Posté(e) le 3 juin 2018 Signaler Posté(e) le 3 juin 2018 Et que tu sortes de la boucle quand la variable est à 0 Envoyé de mon BND-L21 en utilisant Tapatalk
Bloug Posté(e) le 3 juin 2018 Auteur Signaler Posté(e) le 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é le 3 juin 2018 par Bloug
BenjyNet Posté(e) le 3 juin 2018 Signaler Posté(e) le 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
jojo Posté(e) le 3 juin 2018 Signaler Posté(e) le 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
Bloug Posté(e) le 4 juin 2018 Auteur Signaler Posté(e) le 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
Dragoniacs Posté(e) le 4 juin 2018 Signaler Posté(e) le 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
pepite Posté(e) le 5 juin 2018 Signaler Posté(e) le 5 juin 2018 Salut tout le monde, Je croyais que cela fonctionnait ? Ce n'est plus le cas ?
Bloug Posté(e) le 5 juin 2018 Auteur Signaler Posté(e) le 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
Dragoniacs Posté(e) le 6 juin 2018 Signaler Posté(e) le 6 juin 2018 Non, je le trouve pas tordu, mais l'utilisation du abord() me gêne C'est trop violent pour moi
Lazer Posté(e) le 7 juin 2018 Signaler Posté(e) le 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
mprinfo Posté(e) le 7 juin 2018 Signaler Posté(e) le 7 juin 2018 Break c'est plus basic Envoyé de mon SM-G901F en utilisant Tapatalk
Lazer Posté(e) le 7 juin 2018 Signaler Posté(e) le 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
BenjyNet Posté(e) le 7 juin 2018 Signaler Posté(e) le 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
mprinfo Posté(e) le 7 juin 2018 Signaler Posté(e) le 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
BenjyNet Posté(e) le 7 juin 2018 Signaler Posté(e) le 7 juin 2018 Re test @Bloug j'avais zappé une parenthèse dans le code plus haut
Bloug Posté(e) le 10 juin 2018 Auteur Signaler Posté(e) le 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é le 10 juin 2018 par Bloug
Lazer Posté(e) le 10 juin 2018 Signaler Posté(e) le 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
Bloug Posté(e) le 10 juin 2018 Auteur Signaler Posté(e) le 10 juin 2018 Ah ok, c'est plus clair là. merci
Messages recommandés