2013-05-01 66 views
5

私はこの小さな目覚まし時計を私の兄弟から少し助けて作った。私は昨夜、nonBlockingRawInputを出してそれを試してみましたが、うまくいきましたが、nonBlockingRawInputでうまくいきませんでした。今日私はそれを試みましたが、どちらもうまくいきません!私はnonBlockingRawInputと "非"ファイルでコードを掲示します。 nonBlockingRawInputのコードを使用しない場合は、尋ねてください。Python目覚まし時計

ありがとうございます。

アラームrpi.py

import time 
import os 
from non import nonBlockingRawInput 

name = input("Enter your name.") 

print("Hello, " + name) 

alarm_HH = input("Enter the hour you want to wake up at") 
alarm_MM = input("Enter the minute you want to wake up at") 

print("You want to wake up at " + alarm_HH + ":" + alarm_MM) 

while True: 
    now = time.localtime() 
    if now.tm_hour == int(alarm_HH) and now.tm_min == int(alarm_MM): 
     print("ALARM NOW!") 
     os.popen("open mpg321 /home/pi/voltage.mp3") 
     break 

    else: 
     print("no alarm") 
    timeout = 60 - now.tm_sec 
    if nonBlockingRawInput('', timeout) == 'stop': 
     break 

non.py

import signal 

class AlarmException(Exception): 
    pass 

def alarmHandler(signum, frame): 
    raise AlarmException 

def nonBlockingRawInput(prompt='', timeout=20): 
    signal.signal(signal.SIGALRM, alarmHandler) 
    signal.alarm(timeout) 
    try: 
     text = input(prompt) 
     signal.alarm(0) 
     return text 
    except AlarmException: 
     pass 
    signal.signal(signal.SIGALRM, signal.SIG_IGN) 
    return '' 
+2

ここにコードを入力します。 – Marcin

+0

チェックが完全に時間に当たらない場合にトリガーできるように時間の範囲を指定したい場合があります – Chachmu

+3

何が動作していないのですか? –

答えて

7

私は今、しばらくの間、あなたのコードを見てきました。あなたが理解できる限り、アラームを実行できるようにしたいと同時に、プログラムを終了するためにシェルに "stop"をタイプすることができれば、アラームをスレッドにすることができます。スレッドは、「ALARM!」と言う時間があるかどうかをチェックします。 mp3を開きます。ユーザーがシェルでstopをタイプしなかった場合、スレッドはスリープして後で再度チェックします。

私は基本的にあなたのコードを使用し、ちょうどアラームスレッドクラスにそれを置く:

import time 
import os 
import threading 


class Alarm(threading.Thread): 
    def __init__(self, hours, minutes): 
     super(Alarm, self).__init__() 
     self.hours = int(hours) 
     self.minutes = int(minutes) 
     self.keep_running = True 

    def run(self): 
     try: 
      while self.keep_running: 
       now = time.localtime() 
       if (now.tm_hour == self.hours and now.tm_min == self.minutes): 
        print("ALARM NOW!") 
        os.popen("voltage.mp3") 
        return 
      time.sleep(60) 
     except: 
      return 
    def just_die(self): 
     self.keep_running = False 



name = raw_input("Enter your name: ") 

print("Hello, " + name) 

alarm_HH = input("Enter the hour you want to wake up at: ") 
alarm_MM = input("Enter the minute you want to wake up at: ") 

print("You want to wake up at: {0:02}:{1:02}").format(alarm_HH, alarm_MM) 


alarm = Alarm(alarm_HH, alarm_MM) 
alarm.start() 

try: 
    while True: 
     text = str(raw_input()) 
     if text == "stop": 
      alarm.just_die() 
      break 
except: 
    print("Yikes lets get out of here") 
    alarm.just_die() 

それはスレッドがして、寝ているときに、注目に値する:

time.sleep(60) 

そして、あなたが入力しましたそれが死んでいることに気づく前に目を覚まさなければならないシェルで停止してください。最悪の場合、プログラムが終了するまで待ってください!

0
import winsound,time 

a= int(input("Enter how many times I have beep :")) 
b= int(input("Enter when to wake up (in seconds) :")) 

time.sleep(b) 

for i in range(a): 
    winsound.Beep(3000,100) 
    winsound.Beep(2500,100) 
    winsound.Beep(2000,100)  
    winsound.Beep(1000,100)  
    winsound.Beep(500,100) 
関連する問題