134 lines
4.2 KiB
Lua
134 lines
4.2 KiB
Lua
-- introduction IOT / UBS
|
|
-- (c) Gildas Menier
|
|
-- gildas.menier@univ-ubs.fr
|
|
|
|
-- contient les définitions de
|
|
-- cls()
|
|
-- console()
|
|
|
|
-- fonction permettant se s'attacher à l'écran
|
|
function attachscreen(sda, scl, i2cadd)
|
|
try (
|
|
function ()
|
|
i2c.setpins(0,sda,scl)
|
|
gdisplay.attach(gdisplay.SSD1306_128_64, gdisplay.LANDSCAPE, false, i2cadd)
|
|
gdisplay.clear()
|
|
gdisplay.setfont(gdisplay.FONT_LCD)
|
|
gdisplay.setwrap(false)
|
|
end,
|
|
|
|
function (where, line, error, message)
|
|
print("Couldn't attach the screen.\nError in "..where.." at "..line.." "..error..": "..message)
|
|
end,
|
|
|
|
function () end
|
|
)
|
|
end
|
|
|
|
local consolepos = 0
|
|
local consoletab = {}
|
|
local consolemax = 6
|
|
local oledflip = 1
|
|
|
|
function flip()
|
|
oledflip = oledflip+1; if oledflip > 3 then oledflip = 0 end
|
|
if oledflip==0 then
|
|
consolemax = 6
|
|
gdisplay.attach(gdisplay.SSD1306_128_64, gdisplay.LANDSCAPE_FLIP, false, i2cadd)
|
|
elseif oledflip==1 then
|
|
consolemax = 6
|
|
gdisplay.attach(gdisplay.SSD1306_128_64, gdisplay.LANDSCAPE, false, i2cadd)
|
|
elseif oledflip==2 then
|
|
consolemax = 13
|
|
gdisplay.attach(gdisplay.SSD1306_128_64, gdisplay.PORTRAIT, false, i2cadd)
|
|
else
|
|
consolemax = 13
|
|
gdisplay.attach(gdisplay.SSD1306_128_64, gdisplay.PORTRAIT_FLIP, false, i2cadd)
|
|
end
|
|
cls()
|
|
end
|
|
|
|
function cls()
|
|
if (consolemax==6) then gdisplay.clear()
|
|
else
|
|
gdisplay.rect( {0,0}, 128, 9*consolemax, {0,0,0}, {0,0,0} )
|
|
end
|
|
if oledflip ~= 1 then gdisplay.clear() end
|
|
consolepos = 0
|
|
consoletab={}
|
|
for i=0, consolemax do
|
|
consoletab[i] = ""
|
|
end
|
|
end
|
|
|
|
function console(msg)
|
|
if (consolepos <= consolemax) then
|
|
consoletab[consolepos] = msg
|
|
gdisplay.write({0, consolepos*9},msg)
|
|
consolepos = consolepos+1
|
|
else
|
|
for i = 1, consolemax do
|
|
consoletab[i-1] = consoletab[i]
|
|
end
|
|
consoletab[consolemax] = msg
|
|
if (consolemax==6) then gdisplay.clear()
|
|
else
|
|
gdisplay.rect( {0,0}, 128, 9*consolemax+9, {0,0,0}, {0,0,0} )
|
|
end
|
|
for i=0, consolemax do
|
|
gdisplay.write({0, i*9},consoletab[i])
|
|
end
|
|
end
|
|
end
|
|
|
|
function top()
|
|
local l = thread.list(true)
|
|
cls()
|
|
for k,v in pairs(l) do
|
|
console(l[k]["thid"].." "..l[k]["name"].." "..l[k]["used_stack"])
|
|
end
|
|
end
|
|
|
|
-- fonction permettant de dessiner une courbe selon l'humidité captée par le capteur DHT22
|
|
function displayhumi()
|
|
attachscreen(18, 19, 0x3C)
|
|
s = sensor.attach("DHT22", pio.GPIO21)
|
|
tmr.delayms(500)
|
|
width, height = gdisplay.getscreensize()
|
|
|
|
values = {}
|
|
min_val = s:read("humidity")
|
|
max_val = s:read("humidity")
|
|
|
|
while true do
|
|
humi = s:read("humidity")
|
|
-- changement des valeurs min et max
|
|
if humi < min_val then min_val = humi
|
|
elseif humi > max_val then max_val = humi end
|
|
-- si le tableau est plein alors on affiche la courbe
|
|
if #values == 10 then
|
|
for i=1,9 do
|
|
values[i] = values[i + 1]
|
|
end
|
|
values[10] = humi
|
|
cls()
|
|
-- on dessine chaque partie de la courbe
|
|
for i=1,9 do
|
|
-- on dessine la partie de courbe
|
|
gdisplay.line(
|
|
{
|
|
math.floor(i/10 * width), -- coordonnée x du premier point
|
|
math.floor((values[i] - min_val)/(max_val - min_val) * (height - 10) + 5) -- valeur comprise entre la val min et la val max avec des espaces de 5px et haut et en bas
|
|
},
|
|
{
|
|
math.floor((i + 1)/10 * width), -- coordonnée x du deuxième point
|
|
math.floor((values[i + 1] - min_val)/(max_val - min_val) * (height - 10) + 5) -- valeur comprise entre la val min et la val max avec des espaces de 5px et haut et en bas
|
|
}
|
|
)
|
|
end
|
|
else
|
|
values[#values + 1] = humi
|
|
end
|
|
tmr.delayms(500)
|
|
end
|
|
end
|