from time import sleep, time
from machine import Pin, ADC, SPI
from math import log
# Uvoz preporucenih biblioteka
from ili934xnew import ILI9341, color565
import tt14
import tt32
BETA = 3950 # Beta vrijednost senzora
R = 10000 # 0tpor senzora pri referentnoj temperaturi
MILIVOLTS = 3300 # Referentni napon u milivoltima
power = Pin(22, Pin.OUT)
power.value(1)
adc = ADC(Pin(28))
spi = SPI(
0,
baudrate = 40000000, # 62500000 ?
miso = Pin(16),
mosi = Pin(19),
sck = Pin(18)
)
display = ILI9341(
spi,
cs = Pin(17),
dc = Pin(15),
rst = Pin(20),
w = 320,
h = 240,
r = 3
)
# Iscrtavanje koordinatnih osa
for i in range(0, 320, 10):
display.set_pos(i, 230)
display.print('-')
for i in range(0, 240, 10):
display.set_pos(0, i)
display.print('|')
# Prikaz vrijednosti na y-osi
display.set_pos(7, (235 - 40 + (20 - 40) * 7))
display.print('40')
display.set_pos(7, (235 - 30 + (20 - 30) * 7))
display.print('30')
display.set_pos(7, (235 - 20 + (20 - 20) * 7))
display.print('20')
timeStart = time()
while True:
wastingStart = time()
# Konverzija digitalnog ocitanja ADC-a u stvarni napon
voltage = round((adc.read_u16() / 65535) * MILIVOLTS)
# Racunanje otpora senzora na osnovu mjerenog napona
resistance = R / ((MILIVOLTS / voltage) - 1)
# Beta aproksimacija Steinhart-Hart jednacine
kelvin = 1 / (1 / 298.15 + 1 / BETA * log(resistance / 10000))
# Racunanje temperature u Celzijusima s tacnoscu 0.1 Celzijus
celsius = round(kelvin - 273.15, 1)
# Vrijeme proteklo od pocetka izvrsavanja programa u sekundama
duration = time() - timeStart
display.set_pos(220, 0)
display.set_font(tt14)
display.print('Napon: ' + str(voltage) + 'mV')
display.print('Temp: ' + str(celsius) + 'C')
display.print('Vrijeme: ' + str(duration) + 's')
display.set_pos(int(duration * 10) + 30, int((235 - celsius + (20 - celsius) * 7)))
display.set_font(tt32)
display.print('.')
wasted = time() - wastingStart
sleep(1 - wasted)