コード例 #1
0
ファイル: main.py プロジェクト: gseddon/baymax
class Baymax():
    queries = None

    def __init__(self):
        self.queries = {
            "start": self.start,
            "stop": self.stop,
            "hello": self.hello,
            "inflate": self.inflate,
            "ouch": self.inflate,
            "how are you": self.how_are_you,
            "deflate": self.deflate,
        }
        GPIO.setmode(GPIO.BCM)
        GPIO.setup(11, GPIO.OUT)
        GPIO.setup(10, GPIO.OUT)
        GPIO.output(11, GPIO.LOW)
        GPIO.output(10, GPIO.LOW)
        result_queue = queue.Queue()
        self.recogniser = Audio(result_queue, list(self.queries.keys()))
        self.recogniser.start()
        pygame.init()
        #self.play_sound_duration('care.mp3',2)
        #sleep(1)
        #self.play_sound_duration('hello_baymax.mp3',2)
        #sleep(1)
        while 1:
            result = result_queue.get(True)
            self.queries[result]()

    def hello(self):
        print("hello")
        self.toggle_pin_play_sound_duration(pin=11,
                                            sound="hello_baymax.mp3",
                                            duration=5)
        self.rate_pain()

    def start(self):
        pass

    def stop(self):
        pass

    def inflate(self):
        print("inflate")
        self.toggle_pin_play_sound_duration(pin=11,
                                            sound="openingSound.mp3",
                                            duration=5)
        self.play_sound_duration(sound="hello_baymax.mp3", duration=5)
        # self.queries = {"start": self.start,
        #            "deflate": self.deflate,
        #            "can you scan me" : self.scan}
        # self.recogniser.update_queries(self.queries)
        self.rate_pain()

    def deflate(self):
        print("deflating...")
        GPIO.output(10, GPIO.HIGH)
        GPIO.output(11, GPIO.LOW)
        sleep(180)
        GPIO.output(11, GPIO.LOW)
        GPIO.output(10, GPIO.LOW)
        # sleep(180)
        print("G00d by3 :)")
        quit()

    def rate_pain(self):
        print("rate pain")
        self.toggle_pin_play_sound_duration(11, "ratePain.mp3", duration=4)
        self.queries = {
            "1": lambda: self.respond_to_rating(1),
            "2": lambda: self.respond_to_rating(2),
            "3": lambda: self.respond_to_rating(3),
            "4": lambda: self.respond_to_rating(4),
            "5": lambda: self.respond_to_rating(5),
            "6": lambda: self.respond_to_rating(6),
            "7": lambda: self.respond_to_rating(7),
            "8": lambda: self.respond_to_rating(8),
            "9": lambda: self.respond_to_rating(9)
        }
        self.recogniser.update_queries(self.queries)

    def respond_to_rating(self, rating):
        print("rating pain")
        if (rating <= 5):
            pass
        else:
            self.scan()
        print(rating)

    def scan(self):
        print("scanning...")
        self.play_sound_duration("scanning.mp3", 2)
        sleep(2)
        self.play_sound_duration("scanComplete.mp3", 1)
        sleep(1)
        self.play_sound_duration('Puberty.mp3', 4)
        sleep(1)
        self.play_sound_duration('care.mp3', 3)
        sleep(4)
        self.queries = {"yes": self.deflate, "no": self.rate_pain}
        self.recogniser.update_queries(self.queries)

    def how_are_you(self):
        print("How are you?")

    def play_sound_duration(self, sound, duration):
        mixer.music.load("assets/" + sound)
        mixer.music.play()
        sleep(duration)
        mixer.music.stop()

    def toggle_pin_play_sound_duration(self, pin, sound, duration):
        mixer.music.load("assets/" + sound)
        mixer.music.play()
        GPIO.output(pin, GPIO.HIGH)
        sleep(duration)
        mixer.music.stop()