pun_emo_speaker_utils/takway/board/orangepi.py

90 lines
3.2 KiB
Python
Raw Normal View History

2024-05-11 22:34:08 +08:00
from takway.board.base_hd import BaseHardware
import subprocess
import datetime
import threading
t=0
last_status = False
class OrangePi(BaseHardware):
def __init__(self, hd_trigger='button', hd_detect_threshold=50):
super().__init__(hd_trigger, hd_detect_threshold)
self.BUTTON_PIN_red = 6
self.LED_PIN_red = 2
self.BUTTON_PIN_blue = 8
self.LED_PIN_blue = 5
self.shared_hd_status_2 = False
self.led_set_status_2 = False
self.button_init()
self.init_hd_thread()
def button_init(self):
subprocess.run(["gpio", "mode", str(self.LED_PIN_red), "out"])
subprocess.run(["gpio", "mode", str(self.BUTTON_PIN_red), "in"])
subprocess.run(["gpio", "mode", str(self.LED_PIN_blue), "out"])
subprocess.run(["gpio", "mode", str(self.BUTTON_PIN_blue), "in"])
def init_hd_thread(self):
hd_threads = [threading.Thread(target=self.hd_detection_loop),
threading.Thread(target=self.hd_detection_loop_2)]
for hd_thread in hd_threads:
hd_thread.start()
@property
def button_status(self):
return self.shared_hd_status
def hd_detection_loop(self):
keyboard_status = False
while True:
self.shared_hd_status = True if subprocess.run(["gpio", "read", str(self.BUTTON_PIN_red)], capture_output=True, text=True).stdout.strip() == '0' else False
if self.shared_hd_status:
# 打开LED输出高电平
subprocess.run(["gpio", "write", str(self.LED_PIN_red), "1"])
else:
# 关闭LED输出低电平
subprocess.run(["gpio", "write", str(self.LED_PIN_red), "0"])
global t, last_status
if not self.shared_hd_status and last_status:
print(f"pres time: {datetime.datetime.now()}")
last_status = self.shared_hd_status
t+=1
@property
def button2_status(self):
return self.shared_hd_status_2
def hd_detection_loop_2(self):
keyboard_status = False
while True:
if self.led_set_status_2:
self.set_led2_on()
continue
self.shared_hd_status_2 = True if subprocess.run(["gpio", "read", str(self.BUTTON_PIN_blue)], capture_output=True, text=True).stdout.strip() == '0' else False
if self.shared_hd_status_2:
# 打开LED输出高电平
subprocess.run(["gpio", "write", str(self.LED_PIN_blue), "1"])
else:
# 关闭LED输出低电平
subprocess.run(["gpio", "write", str(self.LED_PIN_blue), "0"])
def set_led1_on(self):
subprocess.run(["gpio", "write", str(self.LED_PIN_red), "1"])
def set_led1_off(self):
subprocess.run(["gpio", "write", str(self.LED_PIN_red), "0"])
def set_led2_on(self):
self.led_set_status_2 = True
subprocess.run(["gpio", "write", str(self.LED_PIN_blue), "1"])
def set_led2_off(self):
self.led_set_status_2 = False
subprocess.run(["gpio", "write", str(self.LED_PIN_blue), "0"])