971jmd Posté(e) le 28 avril 2020 Auteur Signaler Posté(e) le 28 avril 2020 J'ai beaucoup de difficultés à comprendre le fonctionnement d'un function
971jmd Posté(e) le 28 avril 2020 Auteur Signaler Posté(e) le 28 avril 2020 function f (op, a, b) if op and a and b then --si tous les arguments sont là if op == 'add' then --add return a + b il y a un truc bizard dans la 1ère partie du code : le SI alors SI c'est possible une condition comme ça ?si OP et A et B alors si OP == ADD then return A+B
971jmd Posté(e) le 28 avril 2020 Auteur Signaler Posté(e) le 28 avril 2020 Bon j'ai bien avancé dans les bases du LUA mai le fonctionnement des function me fatigue Je vais dormir Merci encor pour ton aide
jjacques68 Posté(e) le 28 avril 2020 Signaler Posté(e) le 28 avril 2020 ce sont des conditions imbriquées : alors on teste dans premier temps si on a tous les arguments : if op and A and B then c'est la meme chose que : if op ~= nil and A ~= nil and B ~= nil then -- ~= veut dire différent on teste que les arguments ne sont pas null (qu'ils ont bien été transmis). sinon on retourne une erreur comme quoi il manque des arguments. et dans un deuxième temps (donc à condition d'avoir eut tous les arguments), on teste la l'opération à effectuer. on renvoie aussi une erreur si l'opération n'est pas connue. 1
971jmd Posté(e) le 28 avril 2020 Auteur Signaler Posté(e) le 28 avril 2020 Alors si on test quel ne sont pas nul donc il leur manque une valeur numérique ?
971jmd Posté(e) le 28 avril 2020 Auteur Signaler Posté(e) le 28 avril 2020 (modifié) en absence de valeur normalement elle retournent NIL Modifié le 28 avril 2020 par 971jmd
jjacques68 Posté(e) le 28 avril 2020 Signaler Posté(e) le 28 avril 2020 tout à fait, si pas de valeur, tu auras nul. si tu envoies une valeur (chaine ou numérique), alors c'est bon. c'est un test pour savoir si il y a qqch. ça ne teste pas le type de données (chaînes ou num.) 1
971jmd Posté(e) le 28 avril 2020 Auteur Signaler Posté(e) le 28 avril 2020 (modifié) Pour faire simple et comprendre le code, j'ai découpé 1- j'ai rajouté des valeurs en variable local et un nouvel argument 2- la ligne N°7 contrôles si les arguments sont bien présents et non leurs valeurs 9- Alors SI op == add alors retourne et adition la valeur a + b +z si je comprends bien comme ADD n'existe pas alors retourne et adition la valeur a + b +z C'est le role de add et op que je ne comprends pas Modifié le 28 avril 2020 par 971jmd
jjacques68 Posté(e) le 28 avril 2020 Signaler Posté(e) le 28 avril 2020 "add" est une valeur de "op". tu le passes dans l'appel de la fonction. attention, dans ce bout de code, tu ne traite pas l'affichage d'une information qui dit qu'il manque des arguments ! ton premier print(f()) te renvoie nil.
jjacques68 Posté(e) le 28 avril 2020 Signaler Posté(e) le 28 avril 2020 Citation 2- la ligne N°7 contrôles si les arguments sont bien présents et non leurs valeurs ben elle contrôle que tu as passé une valeur. (il s'en fiche du type) Citation 9- Alors SI op == add alors retourne et adition la valeur a + b +z tout à fait
971jmd Posté(e) le 29 avril 2020 Auteur Signaler Posté(e) le 29 avril 2020 salut Je cherche un moyen de crée une fonction temporisation un sleep j'ai trouver ça function sleep (a) local sec = tonumber(os.clock() + a); while (os.clock() < sec) do end end
jjacques68 Posté(e) le 29 avril 2020 Signaler Posté(e) le 29 avril 2020 (modifié) oui ça marchera. "à" étant en secondes. je sais pas si os.clock() existe dan la HC2, sinon il y a os.time() qui fera la même chose. Modifié le 29 avril 2020 par jjacques68
971jmd Posté(e) le 29 avril 2020 Auteur Signaler Posté(e) le 29 avril 2020 Ce que je n’arrive pas à faire c’est passer la petite fonction à 10 secondes
971jmd Posté(e) le 29 avril 2020 Auteur Signaler Posté(e) le 29 avril 2020 Et l’intégrer à une autre fonction, comme d’hab’ toujours pas à l’aise les fonctions
jjacques68 Posté(e) le 29 avril 2020 Signaler Posté(e) le 29 avril 2020 voici un exemple : function sleep(a) local sec = tonumber(os.clock() + a) while (os.clock() < sec) do end end function principale() print("avant tempo") sleep(10) print("après tempo") end principale() 1
971jmd Posté(e) le 29 avril 2020 Auteur Signaler Posté(e) le 29 avril 2020 Merci je vais me débrouiller pour faire fonctionner tout ça
971jmd Posté(e) le 29 avril 2020 Auteur Signaler Posté(e) le 29 avril 2020 Bon ça ne fonctionne pas Voilà une partie du code si motsoerti1 = 1 alors change la variable offs2 à 1 (qui passe à OFF la sortie 2 ) et lance le moteur de la sortie n1 function ouvferm (mot) local MotSorti1 = 1 ---tonumber(fibaro:getValue(33, "value")) ----Module double - moteur sortie 1 On ou Off donc valeur 1 ou 0 local MotSorti2 = 0 ---tonumber(fibaro:getValue(24, "value")) ----Module double - moteur sortie 2 On ou Off donc valeur 1 ou 0 local offs2 = 0 ---si Value sortie N°1 = 1 alors ON moteur - ouverture if MotSorti1 == 1 then offs2 = 1 --- turn ON module N°1 Sortie 1 return "ouverture" end ---si sortie N°2 Value = 1 alors OFF moteur ferm sortie N°2 if offs2 == 1 then print("off s2") --- turn OFF module Sortie N°2 moteur return "OFF sortie 2" end end
971jmd Posté(e) le 29 avril 2020 Auteur Signaler Posté(e) le 29 avril 2020 Dans un 1er temps Un inverseur si S 1 ON alors S2 OFF si S 2 ON alors S1 OFF et au final je cherche à substituer la carte principal de mon moteur de portail pour gérer le moteur par ma HC2 ou raspberry
jjacques68 Posté(e) le 29 avril 2020 Signaler Posté(e) le 29 avril 2020 (modifié) et bien tu fais une fonction avec 2 arguments en entrée : S1 et S2. tu testes leurs valeurs, et suivant le cas, tu actionnes les sorties ou pas. Modifié le 29 avril 2020 par jjacques68
971jmd Posté(e) le 29 avril 2020 Auteur Signaler Posté(e) le 29 avril 2020 j'ai testé ça bin non function inverseur (a , b) if a == 1 and b == 0 then return "s1" elseif b == 2 and a == 1 then return "s2" end end -- Affectation des valeur 0 ou 1 param1 = 0 param2 = 1 ---On appelle la fonction inverseur inverseur (param1, param2) print(inverseur(1 , 2))
971jmd Posté(e) le 29 avril 2020 Auteur Signaler Posté(e) le 29 avril 2020 (modifié) je pense avoir trouver function inverseur (a, b) if a == 1 and b == 0 then print("ON moteur Ouvertur") return elseif b == 1 and b == 1 then print("ON moteur Fermetur") return end end -- Affectation des valeur 0 ou 1 param1 = 0 param2 = 1 ---On appelle la fonction inverseur inverseur (param1, param2) Modifié le 29 avril 2020 par 971jmd
971jmd Posté(e) le 29 avril 2020 Auteur Signaler Posté(e) le 29 avril 2020 Mai au niveau des -- Affectation des valeur 0 ou 1 param1 = 0 param2 = 1 je vois pas comment passer param1 =0 et param2 = 1 ou si param1 =1 et param2 = 0 je pense qu'il faire une autre fonction
971jmd Posté(e) le 29 avril 2020 Auteur Signaler Posté(e) le 29 avril 2020 J'ai trouvé mai il reste un truc important le STOP le principe du moteur de portail est : un appui = ouverture - un un appui = STOP - un appui = fermeture function sleep(a) local sec = tonumber(os.clock() + a) while (os.clock() < sec) do end end function inverseur (a) if a == 1 then sleep(1) print("ON moteur Ouvertur") return elseif a == 2 then sleep(1) print("ON moteur Fermetur") return end end -- Affectation des valeur 0 ou 1 param1 = 1 ---On appelle la fonction inverseur inverseur (param1)
971jmd Posté(e) le 29 avril 2020 Auteur Signaler Posté(e) le 29 avril 2020 Comment réaliser plusieurs action après un THEN exemple : si a == 1 then passe un argument1 = 1 et argument2 = 0
Messages recommandés