code-lua-iot/out.lua
2024-10-12 21:53:58 +02:00

138 lines
5.8 KiB
Lua

-- écrit le 13/09/2024 par Lukian Leizour
-- ce programme doit tourner sur un ESP32 sous LUARTOS
-- fonction permettant d'allumer une led sur l'ESP32 sur une patte donnée
function pinon (pin) -- pin : la patte sur laquelle la led est branchée
pio.pin.setdir(pio.OUTPUT, pin) -- permet d'indiquer que la patte sert de sortie
pio.pin.sethigh(pin) -- permet de mettre la tension au max
end
-- fonction permettant d'eteindre une led sur l'ESP32 sur une patte donnée
function pinoff (pin) -- pin : la patte sur laquelle la led est branchée
pio.pin.setdir(pio.OUTPUT, pin) -- permet d'indiquer que la patte GPIO2 sert de sortie
pio.pin.setlow(pin) -- permet de mettre la tension au minimum
end
-- fonction permettant de faire clignoter la led de l'ESP32
function blink (pin, n, delay) -- pin : la patte de sortie; n : int, nombre d'itérations; delay : le temps en ms que la led reste allumé et étteinte
for i=1,n do
pinon(pin) -- appel de la fonction ledon
tmr.delayms(delay) -- le programme attend en fonction du délai donné
pinoff(pin) -- appel de la fonctio ledoff
tmr.delayms(delay) -- le programme attend en fonction du délai donné
end
end
-- fonction permettant de faire clignoter la led sur la pin 18 4 fois brièvement
function blink_pwm1()
device = pwm.attach(pio.GPIO18, 1, 0.2) -- 1Hz et 20% de signal "haut"
device:start() -- départ
tmr.delayms(4000) -- on attend que la led ait finit de clignoter
device:stop() -- on arrête le signal
device:detach() -- on se détache de la pin
end
-- fonction permettant de faire clignoter la led sur la pin 18 4 fois longuement
function blink_pwm2()
device = pwm.attach(pio.GPIO18, 1, 0.8) -- 1Hz et 80% de signal "haut"
device:start() -- départ
tmr.delayms(4000) -- on attend que la led ait finit de clignoter
device:stop() -- on arrête le signal
device:detach() -- on se détache de la pin
end
-- fonction permettant d'allumer et étteindre progressivement une led sur la pin 18
function smooth()
device = pwm.attach(pio.GPIO18, 200, 0)
device:start()
i = 0
while i <= 1 do
device:setduty(i)
tmr.delayms(200)
i = i + 0.05
end
i = 1.
while i >= 0 do
device:setduty(i)
tmr.delayms(200)
i = i - 0.05
end
device:stop()
end
function rgb(r, g, b)
red = pwm.attach(pio.GPIO21, 2000, r / 256); red:start()
green = pwm.attach(pio.GPIO19, 2000, g / 256); green:start()
blue = pwm.attach(pio.GPIO18, 2000, b / 256); blue:start()
tmr.delayms(5000)
red:stop(); red:detach()
green:stop(); green:detach()
blue:stop(); blue:detach()
end
function allrgb()
red = pwm.attach(pio.GPIO21, 2000, 1.); red:start()
green = pwm.attach(pio.GPIO19, 2000, 0); green:start()
blue = pwm.attach(pio.GPIO18, 2000, 0); blue:start()
for i=0,255,5 do green:setduty(i / 256); tmr.delayms(50) end
for i=255,0,-5 do red:setduty(i / 256); tmr.delayms(50) end
for i=0,255,5 do blue:setduty(i / 256); tmr.delayms(50) end
for i=255,0,-5 do green:setduty(i / 256); tmr.delayms(50) end
for i=0,255,5 do red:setduty(i / 256); tmr.delayms(50) end
red:stop(); red:detach()
green:stop(); green:detach()
blue:stop(); blue:detach()
end
-- fonction permettant d'allumer un buzzer pendant un temps donné
function buzz(pin, delay) -- pin : la patte sur laquelle le buzzer est connecté; delay : le temps pendant lequel le buzzer reste allumé
pinon(pin) -- on allume le buzzer
tmr.delayms(delay) -- on attend pendand le temps désiré
pinoff(pin) -- on étteint le buzzer une fois la durée atteinte
end
-- fonction permettant de faire "clignoter" un buzzer sur un pin donné pour une durée donnée et un nombre d'itérations donné
function blink_buzz(pin, n, delay) -- pin : la patte du buzzer; n : le nombre d'itérations; delay : le délai en ms
for i=1,n do
buzz(pin, delay) -- on allume le buzzer pendant la durée désirée
tmr.delayms(delay) -- on attend avant de passer à la suite
end
end
-- fonction permettant de faire clignoter la led bleu du circuit de l'ESP32
function blink_2(n) -- pin : la patte de sortie; n : int, nombre d'itérations
blink(pio.GPIO2, n, 200) -- appel de la fonciton blink en lui donnant la bonne patte en paramètre ainsi que le temps d'éclairage
end
-- fonction permettant d'afficher successivement les clouleurs Rouge, Vert et Bleu en connectant la led RGB sur les pins D18, D19 et D21
function triColors(n) -- n : nombre de fois qu'on réalise le paterne
for i=1,n do
blink(pio.GPIO21, 1, 200) -- appel de la fonciton blink pour faire clignoter une fois la led en rouge pendant 200ms
blink(pio.GPIO19, 1, 200) -- appel de la fonciton blink pour faire clignoter une fois la led en vert pendant 200ms
blink(pio.GPIO18, 1, 200) -- appel de la fonciton blink pour faire clignoter une fois la led en bleu pendant 200ms
end
end
-- fonction qui envoie un signal SOS lumineux sur la led bleu du circuit de l'ESP32
function sos_led(n) -- n : nombre de fois qu'on affiche le signal SOS
for i=1,n do
blink(pio.GPIO2, 3, 400) -- on clignotte 3 fois longuement
blink(pio.GPIO2, 3, 200) -- on clignotte 3 fois courtement
blink(pio.GPIO2, 3, 400) -- on clignotte 3 fois longuement
tmr.delayms(400) -- on fait une longue pause de 400ms
end
end
-- fonction qui envoie un signal SOS sonore sur un buzzer branché sur la patte D18 de l'ESP32
function sos_buzz(n) -- n : nombre de fois qu'on fait le signal SOS
for i=1,n do
blink_buzz(pio.GPIO18, 3, 400) -- on clignotte 3 fois longuement
blink_buzz(pio.GPIO18, 3, 200) -- on clignotte 3 fois courtement
blink_buzz(pio.GPIO18, 3, 400) -- on clignotte 3 fois longuement
tmr.delayms(400) -- on fait une longue pause de 400ms
end
end