Aller au contenu
971jmd

j'apprend le LUA mai

Recommended Posts

J'ai beaucoup de difficultés à comprendre le fonctionnement d'un function ;)

 

 

Partager ce message


Lien à poster
Partager sur d’autres sites
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

 

 

Partager ce message


Lien à poster
Partager sur d’autres sites

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 

 

 

Partager ce message


Lien à poster
Partager sur d’autres sites

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

Partager ce message


Lien à poster
Partager sur d’autres sites

Alors si on test quel ne sont pas nul donc il leur manque une valeur numérique ?

Partager ce message


Lien à poster
Partager sur d’autres sites

en absence de valeur normalement elle retournent NIL 

Modifié par 971jmd

Partager ce message


Lien à poster
Partager sur d’autres sites

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

Partager ce message


Lien à poster
Partager sur d’autres sites

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

Partager ce message


Lien à poster
Partager sur d’autres sites

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

Partager ce message


Lien à poster
Partager sur d’autres sites
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

Partager ce message


Lien à poster
Partager sur d’autres sites

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

 

 

Partager ce message


Lien à poster
Partager sur d’autres sites

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

Partager ce message


Lien à poster
Partager sur d’autres sites

Ce que je n’arrive pas à faire c’est passer la petite fonction à 10 secondes

Partager ce message


Lien à poster
Partager sur d’autres sites


Et l’intégrer à une autre fonction, comme d’hab’ toujours pas à l’aise les fonctions

Partager ce message


Lien à poster
Partager sur d’autres sites

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

Partager ce message


Lien à poster
Partager sur d’autres sites

Merci

je vais me débrouiller pour faire fonctionner tout ça 

 

 

Partager ce message


Lien à poster
Partager sur d’autres sites

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
 

 

Partager ce message


Lien à poster
Partager sur d’autres sites

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

 

 

Partager ce message


Lien à poster
Partager sur d’autres sites

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

Partager ce message


Lien à poster
Partager sur d’autres sites

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

 

Partager ce message


Lien à poster
Partager sur d’autres sites

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

Partager ce message


Lien à poster
Partager sur d’autres sites

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 

 

Partager ce message


Lien à poster
Partager sur d’autres sites

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)

 

Partager ce message


Lien à poster
Partager sur d’autres sites

Comment réaliser plusieurs action après un THEN 

 

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

Partager ce message


Lien à poster
Partager sur d’autres sites

×