I think first script runs second script and first script wait while second script finish its process. After second script finish its process, first script continue work. Ok. I hare my code
PGUI.py
#! /usr/bin/python
# -*-coding: utf-8 -*-
#-Library setting-#
import RPi.GPIO as gpio
import time
from timeit import default_timer as timer
import serial
from Tkinter import Tk, Label
from PIL import ImageTk, Image
import threading
import subprocess
import pigpio
import os
import signal
pi=pigpio.pi()
print (pi.connected)
gpio.setmode(gpio.BCM)
gpio.setwarnings(False)
gpio.setup(33, gpio.IN)
gpio.setup(30, gpio.OUT)
gpio.setup(39, gpio.OUT)
##pwm=gpio.PWM(30,100)
##pwm.start(0)
#-Buffer definition-#
dataarray=''
data=''
uartData=''
shadowdata=[]
dstflg=False
dspflg=False
dataflg=False
testflg=False
floorinfoflg=False
screenflg=False
soundflg=False
doorflg=False
control_count=0
#-Serial port config-#
try:
stmSer=serial.Serial(port='/dev/ttyAMA0', baudrate=115200,
parity=serial.PARITY_NONE,
stopbits=serial.STOPBITS_ONE,
bytesize=serial.EIGHTBITS,
timeout=0.01
)
except serial.SerialException:
import traceback
traceback.print_exc()
print "Stmser except error"
def serialflush():
stmSer.flushInput()
stmSer.reset_input_buffer()
serialflush()
def screenopen():
global screenflg
## screenflg=False
print "screen open start"
gpio.setwarnings(False)
gpio.output(39,1)
pi.set_PWM_dutycycle(30,255)
try:
for i in range(0,155,30):
pi.set_PWM_frequency(30,i)
time.sleep(0.01)
print "screen open end"
except:
import traceback
traceback.print_exc()
prgloop()
def screenclose():
global screenflg
## screenflg=True
print "screenclose start"
gpio.setwarnings(False)
gpio.output(39,0)
pi.set_PWM_frequency(30,255)
try:
for i in range(155,0,-5):
pi.set_PWM_dutycycle(30,i)
time.sleep(0.03)
print "screenclose end"
except:
import traceback
traceback.print_exc()
prgloop()
#-GUI update according to data of 'CARSTAT'-#
def updateGUI(data):
global left_character
global right_character
global call_up
global call_down
global travel_up
global travel_down
global chime
global floorinfoflg
global control
global shadowdata
global car_light
global screenflg
global soundflg
global doorflg
try:
left_character=(data[10:12]).decode("hex")
#print "left_character:"+left_character
right_character=(data[12:14]).decode("hex")
#print"right_character:"+right_character
petra_status_1=format(ord(data[14:16].decode("hex")),'08b')
#print "status:"+petra_status_1
petra_status_2=format(ord(data[16:18].decode("hex")),'08b')
# print "UP:"+travel_up
# print "DOWN:"+travel_down
## katno.config(text=left_character+right_character, font=("Arial", 300))
#print "UpdaaeGUI work"
screencl=threading.Thread(target=screenclose)
screenop=threading.Thread(target=screenopen)
## sound=threading.Thread(target=Announce)
if shadowdata!=data:
chime=petra_status_1[7]
travel_down=petra_status_1[4]
travel_up=petra_status_1[3]
car_light=petra_status_1[2]
doorAopen=petra_status_2[3]
doorAclose=petra_status_2[4]
doorBopen=petra_status_2[5]
doorBclose=petra_status_2[6]
## print "chime"+chime
## print "UP:"+travel_up
## print "DOWN:"+travel_down
##
## print "doorAOP:"+doorAopen
## print "doorACL:"+doorAclose
##
## print "doorBOP:"+doorBopen
## print "doorBCL:"+doorBclose
## if chime=='1':
## soundflg=True
## print "soundflg True"
##
## if doorAopen=='1' and soundflg==True:
## if chime=='1':
## doorflg=False
## else:
## doorflg=True
## soundflg=False
## print "doorflg True"
## time.sleep(0.1)
## sound.start()
if car_light=='0' and screenflg==False :
#screenclose()
screenflg=True
screencl.start()
elif car_light=='1' and screenflg==True:
#screenopen()
screenflg=False
screenop.start()
#print "carlight"+car_light
if travel_up=="1":
image=Image.open("/home/pi/Petra/upArrow2.png")
photo=ImageTk.PhotoImage(image)
label.config(image=photo)
label.photo_ref=photo
if left_character=="1" or left_character=="2":
katno.config(text=left_character+right_character, font=("Arial", 210))
katno.place(x=0,y=40)
else:
katno.config(text=left_character+right_character, font=("Arial", 300))
katno.place(x=-90,y=-30)
elif travel_down=="1":
image=Image.open("/home/pi/Petra/downArrow2.png")
photo=ImageTk.PhotoImage(image)
label.config(image=photo)
label.photo_ref=photo
if left_character=="1" or left_character=="2":
katno.config(text=left_character+right_character, font=("Arial", 210))
katno.place(x=0,y=40)
else:
katno.config(text=left_character+right_character, font=("Arial", 300))
katno.place(x=-90,y=-30)
elif travel_up=="0" and travel_down=="0":
image=Image.open("/home/pi/Petra/upArrow2.png")
photo=ImageTk.PhotoImage(image)
label.config(image='')
label.photo_ref=photo
if left_character=="0":
katno.config(text=left_character+right_character, font=("Arial", 300))
katno.place(x=-150, y=-30)
elif left_character=="1" or left_character=="2":
katno.config(text=left_character+right_character, font=("Arial", 300))
katno.place(x=-150, y=-30)
else:
katno.config(text=left_character+right_character, font=("Arial", 300))
katno.place(x=-190, y=-30)
#time.sleep(0.01)
else:
print "travel conditions ERROR"
else:
time.sleep(0.01)
#print "control GUI"
dataarray=''
root.after(20,loop)
except:
import traceback
traceback.print_exc()
print "UpdateGUI Error"
prgloop()
#-Announce-#
##def Announce():
## global soundflg
## global right_character
## global left_character
## global doorflg
##
## """Kapı kapanma ile birlikte anons aktif hale getirildi
##seslerin üstüste binmemesi için bekleme zamanı koyuldu."""
## print "Announce start"
## try:
## if left_character=="0":
## soundproc=subprocess.Popen(['omxplayer', '/home/pi/Petra/Announced/Entrance.wav'],stdin=subprocess.PIPE, shell=False)
## elif right_character=="1" and doorflg==True:
## soundproc=subprocess.Popen(['omxplayer', '/home/pi/Petra/Announced/floor1.wav'],stdin=subprocess.PIPE, shell=False)
## elif right_character=="2" and doorflg==True:
## soundproc=subprocess.Popen(['omxplayer', '/home/pi/Petra/Announced/floor2.wav'],stdin=subprocess.PIPE, shell=False)
## elif right_character=="3" and doorflg==True:
## soundproc=subprocess.Popen(['omxplayer', '/home/pi/Petra/Announced/floor3.wav'],stdin=subprocess.PIPE, shell=False)
## elif right_character=="4" and doorflg==True:
## soundproc=subprocess.Popen(['omxplayer', '/home/pi/Petra/Announced/floor4.wav'],stdin=subprocess.PIPE, shell=False)
## elif right_character=="5" and doorflg==True:
## soundproc=subprocess.Popen(['omxplayer', '/home/pi/Petra/Announced/floor5.wav'],stdin=subprocess.PIPE, shell=False)
## elif right_character=="6" and doorflg==True:
## soundproc=subprocess.Popen(['omxplayer', '/home/pi/Petra/Announced/floor6.wav'],stdin=subprocess.PIPE, shell=False)
## elif right_character=="7" and doorflg==True:
## soundproc=subprocess.Popen(['omxplayer', '/home/pi/Petra/Announced/floor7.wav'],stdin=subprocess.PIPE, shell=False)
## else:
## time.sleep(1)
##
## time.sleep(4)
## doorflg=False
##
## print "Announce stop"
#### if soundproc.poll() is None:
#### try:
#### soundproc.stdin.write('q')
#### except:
#### pass
#### try:
#### soundproc.terminate()
#### except:
#### pass
##
##
## except:
## import traceback
## traceback.print_exc()
## print "Announce Error"
## prgloop()
#-Reset-#
def prgloop():
print "reset loop"
testflg=False
root.after(20,loop)
###-Data Read -#
def readuart():
global dataread
global datalist
global dataarray
global dstflg
global dspflg
global testflg
global stmSer
while True:
try:
if stmSer.inWaiting()>0:
dataread=stmSer.read(1)
if testflg==True:
dstflg=True
dspflg=True
if dataread=='@' and dstflg==False:
dstflg=True
dspflg=False
dataarray=''
elif dataread=='$' and dspflg==False:
dspflg=True
dstflg=False
#print "dataarray: "+dataarray
return dataarray
import contr
else:
if dstflg==True and dspflg==False:
dataarray=dataarray+''.join(dataread)
elif dstflg==True and dspflg==True:
print "Reset loop"
dataarray=''
uartData=''
testflg=False
dstflg=False
dspflg=False
root.after(50,readuart)
elif dstflg==False and dspflg==False:
print "Reset loop"
dataarray=''
uartData=''
testflg=False
dstflg=False
dspflg=False
root.after(50,readuart)
else:
print "ERROR!!"
input_value = gpio.input(33) ##Button Pgm_DW
if input_value == True:
testflg=True
dataarray=''
uartData=''
print('The button has been pressed...')
else:
time.sleep(0.02)
#data gelmediği zaman program burada uykuya girmeli
#print "Data bekleniyor."
except:
import traceback
traceback.print_exc()
print "readUart Error"
prgloop()
#-Furcation to update function -#
def loop():
global dataread
global datalist
global dataarray
global dstflg
global uartData
global dspflg
global data
global start_time
global end_time
start_time=time.time()
dspflg=False
try:
uartData=readuart()
if uartData[:8]=='CARSTAT,':
updateGUI(uartData)
#print "data: "+uartData
end_time=time.time()
## print end_time-start_time
else:
#print "İnvalid Data"
root.after(20,loop)
except:
print "Update ERROR"
import traceback
traceback.print_exc()
prgloop()
screenOpBoot=threading.Thread(target=screenopen())
screenOpBoot.start()
#-Graphical Design-#
try:
root=Tk()
root.title('V0.8')
root.overrideredirect(0)
katno=Label(root, text='1', font=("Arial", 300), width=2, fg='white', bg='#2080FF')
katno.place(x=-90, y=-40)
katno.config(padx=170)
image=Image.open('/home/pi/Petra/upArrow2.png')
photo=ImageTk.PhotoImage(image)
label=Label(image=photo, bg="#2080FF")
label.image=photo
label.place(x=30, y=50)
image2=Image.open('/home/pi/Petra/image_new.jpg')
photo2=ImageTk.PhotoImage(image2)
label2=Label(image=photo2, bg="#142F5E")
label2.image=photo2
label2.config(height=375, width=480)
label2.place(x=0, y=430)
root.configure(background="#2080FF")
root.geometry('480x400+0+0')
root.after(30,loop)
root.mainloop()
except:
import traceback
traceback.print_exc()
L5=Label(root, text=(traceback.print_exc()))
L5.place(x=10, y=40)
print "GUI ERROR"
reset.py
#!/usr/bin/python
from watchdog import Watchdog
import os
import time
import PGUI
##def function():
## print PGUI.start_time
## print PGUI.end_time
## print "reset function end "
def wait():
time.sleep(0.01)
go()
def go():
for i in range(0,50,1):
print PGUI.dataarray
time.sleep(0.01)
wait()
try:
with Watchdog(1):
go()
except Watchdog:
print "function took too long to complete"
## os.system('sudo reboot')
script1.py
import PGUI
PGUI.dataarray.append('spam')
My main program is PGUI. PGUI work with uart and it show incoming data on GUI. "reset" program is check for PGUI run or not. If PGUI does not work, "reset" program will reboot Rpi. script1.py is your suggestion, I try. So data of PGUI should work on "reset" program same time. Any freeze in GUI should start "reset.py"