import rp2
from machine import Pin
from rp2 import PIO
from time import sleep as wait
motionsensor = machine.Pin(16, machine.Pin.IN, machine.Pin.PULL_DOWN) #defining pins
elecricution = machine.Pin(17, machine.Pin.OUT, machine.Pin.PULL_DOWN)
insulinlevel = machine.ADC(26)
nexttime = machine.Pin(22, machine.Pin.IN, machine.Pin.PULL_UP)
prevtime = machine.Pin(28, machine.Pin.IN, machine.Pin.PULL_UP)
time_minutes = 23
time_hours = 10.3833333
display_value = str(int(time_hours)) + str(int(time_minutes))
digits = [
[0, 0, 0, 0, 0, 0, 1, 1], # 0
[1, 0, 0, 1, 1, 1, 1, 1], # 1
[0, 0, 1, 0, 0, 1, 0, 1], # 2
[0, 0, 0, 0, 1, 1, 0, 1], # 3
[1, 0, 0, 1, 1, 0, 0, 1], # 4
[0, 1, 0, 0, 1, 0, 0, 1], # 5
[0, 1, 0, 0, 0, 0, 0, 1], # 6
[0, 0, 0, 1, 1, 1, 1, 1], # 7
[0, 0, 0, 0, 0, 0, 0, 1], # 8
[0, 0, 0, 0, 1, 0, 0, 1], # 9
]
@rp2.asm_pio(out_init=[PIO.OUT_LOW])
def echo(): # setting up the buzzer
wrap_target()
mov(pins, isr)
mov(isr, invert(isr))
pull(noblock)
mov(x, osr)
mov(y, x)
label("loop")
jmp(y_dec, "loop")
wrap()
def scan_display(timer_int): #7 segment display
global time_minutes
global time_hours
t2 = int(time_minutes)
t3 = int(time_hours)
if len(str(t2)) < 2:
for i in range(2 - len(str(t2))):
t2 = "0" + str(t2)
if len(str(t3)) < 2:
for i in range(2 - len(str(t3))):
t3 = "0" + str(t3)
display_value = str(t3) + str(t2)
for i in range(4):
dp = False
if i == 0:
dp = True
display_digit(display_value[i], i, dp)
machine.Pin(11-i, machine.Pin.OUT, machine.Pin.PULL_UP).toggle()
wait(timer_int)
machine.Pin(11-i, machine.Pin.OUT, machine.Pin.PULL_UP).toggle()
pass
def display_digit(digit_value, digit_index, dp_enable=False): #7 segment digit display
global digits
for i in range(7):
machine.Pin(i, machine.Pin.OUT, machine.Pin.PULL_UP).value(digits[int(digit_value)][i])
pass
machine.Pin(12, machine.Pin.OUT, machine.Pin.PULL_DOWN).value(0)
def playnoise(freq):
if freq:
buzzer.put(1_000_000//freq)
else:
buzzer.put(0)
def skiptime(pin):
global time_minutes
global time_hours
time_minutes += 10
time_hours += 0.166666666667
def reverttime(pin):
global time_minutes
global time_hours
time_minutes -= 10
time_hours -= 0.166666666667
def eat(pin):
global time_hours
if time_hours >= 21 or time_hours <= 7:
elecricution.value(1)
wait(1)
elecricution.value(0)
motionsensor.irq(trigger=machine.Pin.IRQ_RISING, handler=eat)
nexttime.irq(trigger=machine.Pin.IRQ_RISING, handler=skiptime)
prevtime.irq(trigger=machine.Pin.IRQ_RISING, handler=reverttime)
buzzer = rp2.StateMachine(0, echo, freq=100000, out_base=Pin(27))
while True:
buzzer.active(0)
if insulinlevel.read_u16() < 15707:
buzzer.active(1)
else:
buzzer.active(0)
time_minutes = (time_minutes + 0.01) % 60
time_hours = (time_hours + 0.01/60) % 24
display_value = str(int(time_hours)) + str(int(time_minutes))
scan_display(0.01)
wait(0.01)