2017-08-15 4 views
0

Ich habe versucht, Python mit der Pyserial-Bibliothek zu einem Arduino zu kommunizieren. Im folgenden Code zeige ich nur einige Funktionen, von denen ich versuche, die LED basierend auf dem von diesen Funktionen zurückgegebenen Wert ein- oder auszuschalten. Was ich tun möchte, ist, wenn Python sagt, die LED einzuschalten, ich möchte, dass LED für 7 Sekunden eingeschaltet wird, aber während dieser Zeit, wenn set_forbidden_list irgendeinen Wert zurückgibt, möchte ich die LED sofort ausschalten und sie ausgeschaltet lassen bis set_forbidden_list wird leer. Jede Hilfe wird sehr geschätzt.mit Verzögerung zwischen Aktionen

def openthedoor(set_accepted_list,set_list_ant_id,set_forbidden_list,set_accepted_list_frozen): 
    if(((len(set_accepted_list)) >0) & (set_forbidden_list == set()) & ((set_accepted_list_frozen == None) or ((set_accepted_list_frozen & set_accepted_list)== set_accepted_list))): 
     use_door(1) 
     delay_for_goodant(1) 
     print "open the gate" 
    else: 
     use_door(0) 
     delay_for_goodant(0) 
     print "close the gate" 
    set_for_comparison = set(set_accepted_list & set_list_ant_id) 
    list_for_comparison = list(set_for_comparison) 
    return set_for_comparison,list_for_comparison  

def establishing_connection(): 
    print ser.read(); 
    ser.write('1') 

last_action = -1 

def use_door(activate): 
    global last_action 
    if(last_action != activate): 
     send_data(activate) 
    last_action = activate 

def send_data(data): 
    if (data ==0): 
     print "manga" 
     return True 
    else: 
     print "muringa" 
     return False 

def delay_for_goodant(data): 
    print "thenga" 
    global ser 
    try: 
     if (ser == None): 
      ser = serial.Serial("COM1",9600,timeout = 0) 
      print "reconnect" 
      incoming_data = ser.readline() 
     else:       ## for turning off the LED 
      ser.write('0') 
      time.sleep(0) 
      incoming_data2 = ser.readline() 
    except IOError: 
     ser = None 

Antwort

0

Anstelle der Verwendung von time.sleep (7) um das Programm vollständig für 7 Sekunden zu stoppen, was Sie tun können, ist für einige Millisekunden in einer Schleife schlafen, die es überprüft immer wieder, wenn jeder Wert in der set_forbidden_list ist. Auch time.sleep(0) ist so gut wie überhaupt nicht zu schreiben.

for i in range(700): 
    time.sleep(0.01); 
    if len(set_forbidden_list)==0: 
     #switchon the LED 

Die obige Schleife läuft 700 Mal, während jedes Mal auf 0,01 Sekunden gewartet wird, was insgesamt 7 Sekunden ergibt.

+0

funktioniert das auch ähnlich wie time.sleep(). Das System schläft für 7 Sekunden. In der Schlafzeit, wenn 'set_forbidden_list' einen Wert zurückgibt, wird die LED nicht gedimmt. – mudaliyar

Verwandte Themen