"""
Ugradbeni sistemi 2023
Demo prikaza na TFT displeju ILI9341
rezolucija displeja 320x240
"""
from ili934xnew import ILI9341, color565
from machine import Pin, SPI
from machine import ADC
from micropython import const
import os
import time
import glcdfont
import tt14
import tt24
import tt32
import time
# Dimenzije displeja
SCR_WIDTH = const(320)
SCR_HEIGHT = const(240)
SCR_ROT = const(3)
CENTER_Y = int(SCR_WIDTH/2)
CENTER_X = int(SCR_HEIGHT/2)
print(os.uname())
# Podešenja SPI komunikacije sa displejem
TFT_CLK_PIN = const(18)
TFT_MOSI_PIN = const(19)
TFT_MISO_PIN = const(16)
TFT_CS_PIN = const(17)
TFT_RST_PIN = const(20)
TFT_DC_PIN = const(15)
# Fontovi na raspolaganju
fonts = [glcdfont,tt14,tt24,tt32]
text = 'RPi Pico/ILI9341'
print(text)
print("Fontovi:")
for f in fonts:
print(f.__name__)
spi = SPI(
0,
baudrate=62500000,
miso=Pin(TFT_MISO_PIN),
mosi=Pin(TFT_MOSI_PIN),
sck=Pin(TFT_CLK_PIN))
print(spi)
display = ILI9341(
spi,
cs=Pin(TFT_CS_PIN),
dc=Pin(TFT_DC_PIN),
rst=Pin(TFT_RST_PIN),
w=SCR_WIDTH,
h=SCR_HEIGHT,
r=SCR_ROT)
# Brisanje displeja i odabir pozicije (0,0)
display.erase()
display.set_pos(0,0)
display.set_font(glcdfont)
display.set_color(color565(255,255,255),color565(0,0,0))
def draw_vline(x,y):
for i in range(y,SCR_HEIGHT-y):
display.pixel(x,i+y,color565(255,255,255))
def draw_hline(x,y):
for i in range(x,SCR_WIDTH-x):
display.pixel(x+i,y,color565(255,255,255))
def display_init():
display.set_pos(0,0)
display.set_font(glcdfont)
display.set_color(color565(255,255,255),color565(0,0,0))
draw_vline(10,10)
draw_hline(15,230)
display.set_pos(15,15)
display.print('40')
display.set_pos(15,110)
display.print('30')
display.set_pos(15,225)
display.print('20')
display.set_pos(250,0)
display.print('Napon:')
display.set_pos(250,10)
display.print('Temp:')
display.set_pos(250,20)
display.print('Vrijeme:')
display_init()
def draw_circle(xpos0, ypos0, rad, col=color565(255, 255, 255)):
x = rad - 1
y = 0
dx = 1
dy = 1
err = dx - (rad << 1)
while x >= y:
# Prikaz pojedinačnih piksela
display.pixel(xpos0 + x, ypos0 + y, col)
display.pixel(xpos0 + y, ypos0 + x, col)
display.pixel(xpos0 - y, ypos0 + x, col)
display.pixel(xpos0 - x, ypos0 + y, col)
display.pixel(xpos0 - x, ypos0 - y, col)
display.pixel(xpos0 - y, ypos0 - x, col)
display.pixel(xpos0 + y, ypos0 - x, col)
display.pixel(xpos0 + x, ypos0 - y, col)
if err <= 0:
y += 1
err += dy
dy += 2
if err > 0:
x -= 1
dx += 2
err += dx - (rad << 1)
def printTemp(temperature):
display.set_pos(285, 10)
display.print("{:.1f}".format(temperature))
def printTime(timeC):
display.set_pos(300, 20)
display.print("{:.0f}".format(timeC))
def printVolt(volts):
display.set_pos(290,0)
display.print("{:.0f}".format(volts))
timeCounter = 0
tempSensor = ADC(Pin(28))
temperature_x = 0
counter = 0
while 1:
temperature = (1/tempSensor.read_u16())*65535+10
temperature_x = timeCounter
temperature_y = (240 - ((temperature-20) * 11 + 10))
counter = counter + 1
if counter == 10:
counter = 0
draw_circle(int(temperature_x), int(temperature_y), 3, color565(255,255,255))
printTemp(temperature)
printTime(timeCounter/10)
printVolt(temperature*10)
else:
display.pixel(int(temperature_x), int(temperature_y), color565(255,0,0))
print("tempx", temperature_x, " tempy: ", temperature_y)
timeCounter = timeCounter + 1
print(temperature)
time.sleep(0.1)
if timeCounter == 330:
display.erase()
display_init()
timeCounter = 0
Loading
ds18b20
ds18b20