Compare commits

...

3 Commits

Author SHA1 Message Date
Siwat Sirichai 5e7a923c3a add piano example 2022-04-09 01:10:39 +07:00
Siwat Sirichai 99432ea074 add siwatlib 2022-04-09 01:10:31 +07:00
Siwat Sirichai b242d5cb6e ignore pycache 2022-04-09 01:10:20 +07:00
4 changed files with 53 additions and 6 deletions

2
.gitignore vendored Normal file
View File

@ -0,0 +1,2 @@
siwatlib/__pycache__/

View File

@ -1,20 +1,26 @@
from time import sleep from time import sleep
from telemetrix_rpi_pico import telemetrix_rpi_pico from telemetrix_rpi_pico import telemetrix_rpi_pico
from siwatlib.debounce import debounce
from siwatlib.sound import beep
import winsound import winsound
index_shift = 2 index_shift = 2
sound = [261.6256,293.6648,329.6276,349.2282,391.9954,440.0000,493.8833,523.2511] freqs = [261.6256,293.6648,329.6276,349.2282,391.9954,440.0000,493.8833,523.2511]
debouncers = []
def handle_button_press(data): def handle_button_press(data):
freq = sound[data[1]-index_shift] freq = freqs[data[1]-index_shift]
print(freq) print(freq)
if data[2] == 0: recieved_state = not data[2]
winsound.Beep(int(freq),500) if debouncers[data[1]-index_shift].set_state(state=recieved_state):
beep(frequency=freq,duration=0.25)
mcu = telemetrix_rpi_pico.TelemetrixRpiPico(com_port='COM10') mcu = telemetrix_rpi_pico.TelemetrixRpiPico(com_port='COM10')
for i in range(2,10): for i in range(2,10):
debouncers.append(debounce(state=False,debounce_time=0.15))
mcu.set_pin_mode_digital_input(i,callback=handle_button_press) mcu.set_pin_mode_digital_input(i,callback=handle_button_press)
while True: while True:
sleep(100) sleep(100)

12
siwatlib/debounce.py Normal file
View File

@ -0,0 +1,12 @@
from time import perf_counter as seconds
class debounce:
def __init__(self,state: bool, debounce_time: float) -> None:
self.last_pressed = seconds()
self.debounce_time = debounce_time
self.state = state
def set_state(self, state: bool) -> bool:
if seconds()-self.last_pressed > self.debounce_time:
self.state = state
return self.state
else:
return self.state

27
siwatlib/sound.py Normal file
View File

@ -0,0 +1,27 @@
from pysine import pysine
import winsound
import threading
MODE = 'pysine'
global __beeper__
def __beeper_therad__(frequency: float, duration: float):
if MODE == 'winsound':
winsound.Beep(frequency=int(frequency), duration=int(duration*1000))
elif MODE == 'pysine':
pysine.sine(frequency=frequency,duration=duration)
__beeper__ = threading.Thread(target=__beeper_therad__,
kwargs={'frequency': 0, 'duration': 0}
)
def beep(frequency: float, duration: float):
global __beeper__
if not __beeper__.is_alive():
__beeper__ = threading.Thread(target=__beeper_therad__,
kwargs={'frequency': frequency, 'duration': duration}
)
__beeper__.start()