Aller au contenu
Bloug

Clignotement en boucle

Recommended Posts

Bonjour,

jet rourne en rond avec ma boucle :P

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

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

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

 

--[[
%% 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é par Bloug

Partager ce message


Lien à poster
Partager sur d’autres sites

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

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

@BenjyNet Tordu ? Oui C'est clair ! :D

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 :D

 

 

Partager ce message


Lien à poster
Partager sur d’autres sites

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.

 

  • Like 1

Partager ce message


Lien à poster
Partager sur d’autres sites

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

si si mon code marche :D 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 :)

 

  • Like 1

Partager ce message


Lien à poster
Partager sur d’autres sites

Non, je le trouve pas tordu, mais l'utilisation du abord() me gêne :huh: C'est trop violent pour moi :2:

Partager ce message


Lien à poster
Partager sur d’autres sites

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 :)

 

  • Like 2

Partager ce message


Lien à poster
Partager sur d’autres sites

Break c'est plus basic

Envoyé de mon SM-G901F en utilisant Tapatalk

Partager ce message


Lien à poster
Partager sur d’autres sites

C'est surtout un mot clé issu de l'un des plus anciens langage, le père de tous les langages modernes.... le C

  • Like 2

Partager ce message


Lien à poster
Partager sur d’autres sites

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
C'est surtout un mot clé issu de l'un des plus anciens langage, le père de tous les langages modernes.... le C

Break c'est plus basic

Envoyé de mon SM-G901F en utilisant Tapatalk



C'est ce que j'ai dit

C + BASIC

Envoyé de mon SM-G901F en utilisant Tapatalk

  • Haha 1

Partager ce message


Lien à poster
Partager sur d’autres sites

Re test @Bloug j'avais zappé une parenthèse dans le code plus haut

Partager ce message


Lien à poster
Partager sur d’autres sites

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é par Bloug

Partager ce message


Lien à poster
Partager sur d’autres sites

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.

  • Like 1

Partager ce message


Lien à poster
Partager sur d’autres sites

Ah ok, c'est plus clair là.

 merci

Partager ce message


Lien à poster
Partager sur d’autres sites

×