Aller au contenu

j'apprend le LUA mai


Messages recommandés

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

 

 

Posté(e)

Bon j'ai bien avancé dans les bases du LUA mai le fonctionnement des function me fatigue :D

Je vais dormir  

 

Merci encor pour ton aide 

 

 

Posté(e)

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.

 


 

 

  • Like 1
Posté(e)

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

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

 

foncf.JPG.05385e9f2c5cbf0ffdf91ae770720b32.JPG

 

Modifié par 971jmd
Posté(e)

"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.

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

Posté(e)

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

 

 

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

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

 

  • Like 1
Posté(e)

Bon ça ne fonctionne pas :D 

 

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
 

 

Posté(e)

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

 

 

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

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

 

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

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 

 

Posté(e)

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)

 

Posté(e)

Comment réaliser plusieurs action après un THEN 

 

exemple : si a == 1 then passe un argument1 = 1 et  argument2 = 0

×
×
  • Créer...