pun_emo_speaker_utils/takway/board/orangepi.py

90 lines
3.2 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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"])