# Tone Ringer
from machine import Pin, PWM
from time import sleep
sequence = 1 # 1 1 0 3 4 1
cadence = 4 # 4 4 4 4 8 9
speed = 9 # 7 20 16 16 32 6
frequency = round(455_000 / (14*2 * 3*4*5))
# GPIO pins on same PWM slice
pwm = [
PWM(Pin(14), duty_u16=0x0000, invert=False), # 0%
PWM(Pin(15), duty_u16=0xffff, invert=True), # 100% inverted
]
sequences = (
(3, 4),
(3, 4, 5),
(4, 5),
(5, 4),
(8, 7),
)
cadences = (
(1, 0), # continuous
(1, 1), # SR
(1, 2), # JP
(1, 3), # BE
(1, 4), # ITU
(1, 5), # AT
(1.25, 3.75), # HU
(1.5, 3.5), # FR
(2, 4), # US
(0.4, 0.2, 0.4, 2), # UK
(0.4, 0.2, 0.4, 3), # HK
(0.4, 0.2, 0.4, 4), # SZ
)
c = cadences[cadence]
s = sequences[sequence]
while True:
for j in range(0, len(c), 2):
d = c[j] / speed
pwm[0].duty_u16(0x8000) # ≈50%
pwm[1].duty_u16(0x8000) # ≈50% inverted
for i in range(speed):
f = s[i % len(s)] * frequency
pwm[0].freq(f)
#pwm[1].freq(f) # not necessary if pins on same slice
sleep(d)
pwm[0].duty_u16(0x0000) # 0%
pwm[1].duty_u16(0xffff) # 100% inverted
sleep(c[j+1])