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