Compare commits
3 Commits
d67087a37d
...
5e7a923c3a
Author | SHA1 | Date |
---|---|---|
Siwat Sirichai | 5e7a923c3a | |
Siwat Sirichai | 99432ea074 | |
Siwat Sirichai | b242d5cb6e |
|
@ -0,0 +1,2 @@
|
||||||
|
|
||||||
|
siwatlib/__pycache__/
|
18
piano.py
18
piano.py
|
@ -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)
|
|
@ -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
|
|
@ -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()
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue