from picozero import GPIO, PWMOut
from pigpio_pico import pulseio
from asyncio import sleep, run
PAGE = 10
IR_PIN = 0
ACTIVATE = 34
OUT = GPIO.OUT
IN = GPIO.IN
buzzer = PWMOut(4)
numbers = {
104: 0,
48: 1,
24: 2,
122: 3,
16: 4,
56: 5,
90: 6,
66: 7,
74: 8,
82: 9
}
GPIO.setup(IR_PIN, GPIO.IN)
GPIO.setup(2, OUT)
GPIO.setup(3, OUT)
GPIO.setup(28, IN)
def read_button():
while True:
low = pulseio.pulse_in(IR_PIN, 0, 100000)
if low > 8000:
break
high = pulseio.pulse_in(IR_PIN, 1, 100000)
if not (3500 <= high <= 5500):
return None
bits = []
for i in range(32):
low = pulseio.pulse_in(IR_PIN, 0, 100000)
high = pulseio.pulse_in(IR_PIN, 1, 100000)
if high > 1000:
bits.append(1)
else:
bits.append(0)
raw = 0
for i in range(32):
raw |= bits[i] << i
address = raw & 255
command = (raw >> 16) & 255
return address, command, raw
async def page():
print("PAGED")
buzzer.duty_u16(60000)
while True:
buzzer.freq(450)
GPIO.output(2, 1)
GPIO.output(3, 0)
await sleep(1)
buzzer.freq(350)
GPIO.output(2, 0)
GPIO.output(3, 1)
await sleep(1)
async def main(pagernum):
last = ""
num = ""
while True:
result = read_button()
if result is not None:
try:
num += str(numbers[int(result[1])])
except KeyError:
if result[1] == ACTIVATE and num != last:
print(num)
try:
if int(num) == pagernum:
await page()
except ValueError:
pass
last = num
num = ""
if __name__ == "__main__":
run(main(PAGE))