from machine import Pin, SPI, ADC, I2C, PWM
import max7219
from time import sleep
import bitops as bt
from ds1307 import DS1307
from PicoDHT22 import PicoDHT22
import utime
import print_error
from nec import NEC_8
import nznaky2 as zn
# Infra receiver data pin settings
pin_ir = Pin(12, Pin.IN)
spi = SPI(0,sck=Pin(2),mosi=Pin(3))
cs = Pin(5, Pin.OUT)
display = max7219.Matrix8x8(spi, cs, 1)
display.brightness(1)
display.fill(0)
i2c_rtc = I2C(0,scl = Pin(1),sda = Pin(0),freq = 100000)
result = I2C.scan(i2c_rtc)
print(result)
rtc = DS1307(i2c_rtc)
print(rtc.datetime())
TempSensor = machine.ADC(4)
conversion_factor = 3.3 / 65535
buzzerPIN=16
BuzzerObj=PWM(Pin(buzzerPIN))
dht_data = Pin(14,Pin.IN,Pin.PULL_UP)
dht_sensor=PicoDHT22(dht_data,Pin(14,Pin.OUT),dht11=False)
actbzucak = 0
nodisplay = 0
dnyvtydnu = ["Pondeli", "Utery", "Streda", "Ctvrtek", "Patek", "Sobota", "Nedele"]
def leadZero(zceho = 0):
if (zceho < 10):
return "0" + str(zceho)
else:
return str(zceho)
def read_DHT(sensor1):
T,H = sensor1.read()
print("{:3.1f}'C {:3.1f}%".format(T,H))
def buzzer(buzzerPinObject,frequency,sound_duration,silence_duration):
# Set duty cycle to a positive value to emit sound from buzzer
buzzerPinObject.duty_u16(int(65536*0.2))
# Set frequency
buzzerPinObject.freq(frequency)
# wait for sound duration
sleep(sound_duration)
# Set duty cycle to zero to stop sound
buzzerPinObject.duty_u16(int(65536*0))
# Wait for sound interrumption, if needed
sleep(silence_duration)
def budicek():
# c1
buzzer(BuzzerObj,1046,0.38,0.1)
# a
buzzer(BuzzerObj,880,0.125,0.1)
# c1
buzzer(BuzzerObj,1046,0.38,0.1)
# a
buzzer(BuzzerObj,880,0.125,0.1)
# f
buzzer(BuzzerObj,698,0.125,0.1)
# f
buzzer(BuzzerObj,698,0.125,0.1)
# c
buzzer(BuzzerObj,523,0.125,0.1)
# f
buzzer(BuzzerObj,698,0.125,0.1)
# f
buzzer(BuzzerObj,698,0.125,0.1)
# a
buzzer(BuzzerObj,880,0.125,0.1)
# c1
buzzer(BuzzerObj,1046,0.38,0.1)
# a
buzzer(BuzzerObj,880,0.125,0.1)
# c1
buzzer(BuzzerObj,1046,0.38,0.1)
# a
buzzer(BuzzerObj,880,0.125,0.1)
# c1
buzzer(BuzzerObj,1046,0.125,0.2)
# c1
buzzer(BuzzerObj,1046,0.125,0.1)
# a
buzzer(BuzzerObj,880,0.125,0.1)
# c1
buzzer(BuzzerObj,1046,0.125,0.1)
# f1
buzzer(BuzzerObj,1396,0.125,0.1)
# c1
buzzer(BuzzerObj,1046,0.75,0.1)
def clear_display():
display.fill(0)
display.show()
def display_col_bin(co, col):
for x in range(0, 8):
if (bt.get_bit(co, x) > 0):
display.pixel(7 - x, col, 1)
else:
display.pixel(7 - x, col, 0)
def time_pure_Binary(cas1):
display_col_bin(cas1[6],7) # seconds
display_col_bin(cas1[5],6) # minutes
display_col_bin(cas1[4],5) # hours
display_col_bin(cas1[2],4) # day of month
display_col_bin(cas1[1],3) # month
display_col_bin(cas1[0] - 2000,2) # year (only in 21th century)
display_col_bin(0,0)
display_col_bin(cas1[3] + 1,0) # day of week (1 = Monday, 7 = Sunday)
def time_pure_BinaryW(cas1):
display_col_bin(cas1[6],0) # seconds
display_col_bin(cas1[5],1) # minutes
display_col_bin(cas1[4],2) # hours
display_col_bin(cas1[2],3) # day of month
display_col_bin(cas1[1],4) # month
display_col_bin(cas1[0] - 2000,5) # year (only in 21th century)
display_col_bin(0,6)
display_col_bin(cas1[3],7) # day of week (1 = Monday, 7 = Sunday)
def time_bcd(cas1):
sekunda1 = cas1[6]
secdes = int(sekunda1 / 10)
secjed = sekunda1 - secdes * 10
minuta1 = cas1[5]
mindes = int(minuta1 / 10)
minjed = minuta1 - mindes * 10
hodina1 = cas1[4]
hoddes = int(hodina1 / 10)
hodjed = hodina1 - hoddes * 10
# print(hoddes, hodjed, mindes, minjed, secdes, secjed)
display_col_bin(secjed, 7)
display_col_bin(secdes, 6)
display_col_bin(0, 5)
display_col_bin(minjed, 4)
display_col_bin(mindes, 3)
display_col_bin(0, 2)
display_col_bin(hodjed, 1)
display_col_bin(hoddes, 0)
def time_bcdW(cas1):
sekunda1 = cas1[6]
secdes = int(sekunda1 / 10)
secjed = sekunda1 - secdes * 10
minuta1 = cas1[5]
mindes = int(minuta1 / 10)
minjed = minuta1 - mindes * 10
hodina1 = cas1[4]
hoddes = int(hodina1 / 10)
hodjed = hodina1 - hoddes * 10
# print(hoddes, hodjed, mindes, minjed, secdes, secjed)
display_col_bin(secjed, 0)
display_col_bin(secdes, 1)
display_col_bin(0, 2)
display_col_bin(minjed, 3)
display_col_bin(mindes, 4)
display_col_bin(0, 5)
display_col_bin(hodjed, 6)
display_col_bin(hoddes, 7)
def scroll_full_timeW(cas1):
message = " " + dnyvtydnu[cas1[3]] + ", " + leadZero(cas1[2]) + "." + leadZero(cas1[1]) + "." + str(cas1[0]) + " " + leadZero(cas[4]) + ":" + leadZero(cas[5])
print(message)
# print(cas1[3])
scroll_ntext(message, 0, 0.2)
utime.sleep(1)
def scroll_timeW(cas1):
message = leadZero(cas[4]) + ":" + leadZero(cas[5])
scroll_ntext(message, 0, 0.05)
utime.sleep(1)
scroll_ntext(message, 1, 0.05)
utime.sleep(1)
budik = [13,36]
print("Budik: {}", budik)
def scroll_ntext(jaky, kam=0, rychlost=0.2):
text = jaky
delka = len(text)
znaky = []
for k in range(0, delka):
pismeno = text[(k):(k+1)]
kod = ord(pismeno) - 32
odkud = kod * 4
for i in range(0, 4):
znaky.append(zn.font[odkud + i])
# print(len(znaky))
if (len(znaky)<=8):
for i in range(0, len(znaky)):
display_col_bin(znaky[i], i)
display.show()
else:
if (kam == 0):
for j in range(0, len(znaky) - 7):
for i in range(j, j + 8):
display_col_bin(znaky[i], i - j)
display.show()
utime.sleep(rychlost)
else:
for j in reversed(range(8, len(znaky) + 1)):
#print("j:", j)
#print("\n")
for i in range(j - 8, j):
# n = 8 - i
#print("i - j:", j - i - 1)
# display_col_bin(znaky[i], 7 - (j - i - 1))
display_col_bin(znaky[i], (i - j + 8))
#pass
display.show()
utime.sleep(rychlost)
def scroll_full_time(cas1):
message = " " + dnyvtydnu[cas1[3]] + ", " + leadZero(cas1[2]) + "." + leadZero(cas1[1]) + "." + str(cas1[0]) + " " + leadZero(cas[4]) + ":" + leadZero(cas[5])
print(message)
# print(cas1[3])
scroll_ntext(message, 0, 0.2)
utime.sleep(1)
def scroll_time(cas1):
message = leadZero(cas[4]) + ":" + leadZero(cas[5])
scroll_ntext(message, 0, 0.05)
utime.sleep(1)
scroll_ntext(message, 1, 0.05)
utime.sleep(1)
def showPicotemp():
utime.sleep(1)
reading = TempSensor.read_u16() * conversion_factor
t = 27 - (reading - 0.706)/0.001721
message = " Pico teplota: " + str(round(t, 1)) + "'C."
print(message)
scroll_ntext(message, 0, 0.2)
def showDHTtemp():
utime.sleep(1)
t, hum = dht_sensor.read()
message = " DHT teplota: " + str(round(t, 1)) + " 'C."
print(message)
scroll_ntext(message, 0, 0.2)
def showDHThum():
utime.sleep(1)
t, hum = dht_sensor.read()
message = " Vlhkost: " + str(round(hum, 1)) + " %."
print(message)
scroll_ntext(message, 0, 0.2)
"""
def showBMPtemp():
utime.sleep(1)
t = bmp.temperature
message = " BMP teplota: " + str(round(t, 1)) + " 'C."
print(message)
scroll_ntext(message, 0, 0.2)
def showBMPpressure():
utime.sleep(1)
p = bmp.pressure / 100
message = " Tlak: " + str(round(p, 0)) + " hPa."
print(message)
scroll_ntext(message, 0, 0.2)
def showBMPaltitude():
utime.sleep(1)
a = bmp.altitude
message = " nadm. vyska: " + str(round(a, 0)) + " m."
print(message)
scroll_ntext(message, 0, 0.2)
"""
def decodeKeyValue(data1):
return data1
def obsluha(kod, kaddr, ctrl):
global actbzucak
global nodisplay
if kod < 0: # NEC protocol sends repeat codes.
pass
else:
print(kod)
if (kod == 176): # key "C"
actbzucak = 1
budicek()
# utime.sleep(1)
elif (kod == 48): # key "1"
showPicotemp()
if (nodisplay == 1):
clear_display()
elif (kod == 24): # key "2"
showDHTtemp()
if (nodisplay == 1):
clear_display()
elif (kod == 122): # key "3"
pass
# showBMPtemp()
if (nodisplay == 1):
clear_display()
elif (kod == 16): # key "4"
showDHThum()
if (nodisplay == 1):
clear_display()
elif (kod == 56): # key "5"
pass
# showBMPpressure()
if (nodisplay == 1):
clear_display()
elif (kod == 90): # key = "6"
pass
# showBMPaltitude()
if (nodisplay == 1):
clear_display()
elif (kod == 66): # key = "7"
scroll_time(rtc.datetime())
if (nodisplay == 1):
clear_display()
elif (kod == 74): # key = "8"
scroll_full_time(rtc.datetime())
if (nodisplay == 1):
clear_display()
elif (kod == 226): # key "Menu"
actbzucak = 0
elif (kod == 104): # key = "0"
if (nodisplay == 1):
nodisplay = 0
print("nodisplay: ", nodisplay)
else:
clear_display()
nodisplay = 1
print("nodisplay: ", nodisplay)
else:
pass
# ir receiver settings
ir = NEC_8(pin_ir, obsluha) # Instantiate receiver
ir.error_function(print_error) # Show debug information
while True:
display.fill(0)
sleep(0.15)
cas = rtc.datetime()
minuta = cas[5]
sekunda = cas[6]
hodina = cas[4]
# print(cas)
# print(minuta)
# print(cas[4])
if (minuta == budik[1] and hodina == budik[0]):
scroll_time(cas)
display.show()
budicek()
else:
if (minuta == 0):
scroll_full_time(cas)
elif ((minuta > 0) and ((minuta % 15)==0)):
scroll_time(cas)
elif ((minuta > 0) and ((minuta % 2) > 0)):
time_pure_BinaryW(cas)
elif (sekunda == 0):
print(rtc.datetime())
read_DHT(dht_sensor)
else:
time_bcdW(cas)
# time_pure_BinaryW(cas)
if (nodisplay == 0):
display.show()