Aller au contenu

Messages recommandés

Posté(e)

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

 

Posté(e)

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

Posté(e) (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é par Bloug
Posté(e)

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

 

Posté(e)

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

Posté(e)

@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

 

 

Posté(e)

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
Posté(e)

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
Posté(e)

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
Posté(e)

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
Posté(e)

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

 

Posté(e)
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
Posté(e) (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é par Bloug
Posté(e)

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
×
×
  • Créer...