Python Forum
Where should I place GPIO.cleanup()
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Where should I place GPIO.cleanup()
#1
My code is really long with multiple programs running at the same time. Is it really a must to use GPIO.cleanup()? And if it is, where should I use it in my code?

from tkinter import *
import RPi.GPIO as GPIO
from tkinter import ttk
from tkinter import font as tkfont
import time


GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)

GPIO.setup(17,GPIO.OUT)#motor
GPIO.setup(27,GPIO.OUT)#LED
GPIO.setup(26,GPIO.OUT)#buzzer
GPIO.output (17, False)
GPIO.output (27, False)
GPIO.output (26, False)


root = Tk()
root.geometry("2000x1900")
root.config(bg="light blue")
root.frame = Frame(root)

label = Label(root, bg = "light blue", fg = "dark blue", font=("Arial 50 italic"))
label.place(relx=0.48, rely = 0.32, anchor = CENTER)
title_label=Label(root, text="MEDICATION SCHEDULE", font = "Arial 80 ",bg="light grey",fg='black',relief='solid',bd=8)
title_label.place(relx=0.47, rely = 0.16,anchor = CENTER)


root.title("Smart Medicine Box")
alarm1_input_compare= ''
alarm2_input_compare= ''
alarm3_input_compare = ''
AFTER=None


def set_alarm1():
    global alarm1_input_compare
    alarm1_input_compare=comboHour1.get()+":"+comboMin1.get()+":00"+comboAM1.get()
    alarm1_input_display=comboHour1.get()+":"+comboMin1.get()+" "+comboAM1.get()
    alarm1_label.config(text="Time Set: "+alarm1_input_display)
    alarm1_label.place(relx=0.135, rely = 0.5, anchor = NW)
    print(alarm1_input_compare)
    comboHour1.place_forget()
    comboMin1.place_forget()
    comboAM1.place_forget()
    colon1_label.place_forget()
    morning_alarm_button.place_forget()
    change_morn_alarm_button.place(relx=0.2, rely = 0.58, anchor = CENTER)

def change_alarm1():
    change_morn_alarm_button.place_forget()
    morning_alarm_button.place(relx=0.198, rely = 0.58, anchor = CENTER)
    comboHour1.place(relx=0.16, rely = 0.52, anchor = CENTER)
    comboMin1.place(relx=0.2, rely = 0.52, anchor = CENTER)
    comboAM1.place(relx=0.235, rely = 0.52, anchor = CENTER)
    alarm1_label.place_forget()
    
def set_alarm2():
    global alarm2_input_compare
    alarm2_input_compare=comboHour2.get()+":"+comboMin2.get()+":00"+comboAM2.get()
    alarm2_input_display=comboHour2.get()+":"+comboMin2.get()+" "+comboAM2.get()
    alarm2_label.config(text="Time Set: "+alarm2_input_display)
    alarm2_label.place(relx=0.38, rely = 0.5, anchor = NW)
    print(alarm2_input_compare)
    comboHour2.place_forget()
    comboMin2.place_forget()
    comboAM2.place_forget()
    noon_alarm_button.place_forget()
    colon2_label.place_forget()
    change_aft_alarm_button.place(relx=0.45, rely = 0.58, anchor = CENTER)
   
def change_alarm2():
    change_aft_alarm_button.place_forget()
    noon_alarm_button.place(relx=0.45, rely = 0.58, anchor = CENTER)
    comboHour2.place(relx=0.415, rely = 0.52, anchor = CENTER)
    comboMin2.place(relx=0.46, rely = 0.52, anchor = CENTER)
    comboAM2.place(relx=0.495, rely = 0.52, anchor = CENTER)
    alarm2_label.place_forget()
    
def set_alarm3():
    global alarm3_input_compare
    alarm3_input_compare=comboHour3.get()+":"+comboMin3.get()+":00"+comboAM3.get()
    alarm3_input_display=comboHour3.get()+":"+comboMin3.get()+" "+comboAM3.get()
    alarm3_label.config(text="Time Set: "+alarm3_input_display)
    alarm3_label.place(relx=0.64, rely = 0.5, anchor = NW)
    print(alarm3_input_compare)
    comboHour3.place_forget()
    comboMin3.place_forget()
    comboAM3.place_forget()
    colon3_label.place_forget()
    change_even_alarm_button.place(relx=0.705, rely = 0.58, anchor = CENTER)
   
def change_alarm3():
    change_even_alarm_button.place_forget()
    even_alarm_button.place(relx=0.705, rely = 0.58, anchor = CENTER)
    comboHour3.place(relx=0.67, rely = 0.52, anchor = CENTER)
    comboMin3.place(relx=0.718, rely = 0.52, anchor = CENTER)
    comboAM3.place(relx=0.753, rely = 0.52, anchor = CENTER) 
    alarm3_label.place_forget()
    

def add_medication1():
    noon_med_button["state"]='disabled'
    even_med_button["state"]='disabled'
    morn_med_Text.place(relx=0.21, rely = 0.85, anchor = CENTER)
    morn_med_label.place_forget()
    morn_med_button.place_forget()
    confirm_button1.place(relx=0.105, rely = 0.85, anchor = CENTER)
    keyboard(1)
    
    
def confirm1():
    noon_med_button["state"]='normal'
    even_med_button["state"]='normal'
    morn_med=morn_med_Text.get("1.0",END)
    morn_med_label.place(relx=0.21, rely = 0.88, anchor = CENTER)
    morn_med_Text.place_forget()
    confirm_button1.place_forget()
    morn_med_button.place(relx=0.21, rely = 0.72, anchor = CENTER)
    morn_med_label.config(text=morn_med)
    root.frame.grid_forget()

            
def add_medication2():
    morn_med_button["state"]='disabled'
    even_med_button["state"]='disabled'
    noon_med_Text.place(relx=0.45, rely = 0.845, anchor = CENTER)
    noon_med_button.place_forget()
    noon_med_label.place_forget()
    confirm_button2.place(relx=0.345, rely = 0.85, anchor = CENTER)
    keyboard(2)


def confirm2():
    morn_med_button["state"]='normal'
    even_med_button["state"]='normal'
    noon_med=noon_med_Text.get("1.0",END)
    noon_med_label.place(relx=0.46, rely = 0.88,anchor = CENTER)
    noon_med_Text.place_forget()
    confirm_button2.place_forget()
    noon_med_button.place(relx=0.458, rely = 0.72, anchor = CENTER)
    noon_med_label.config(text=noon_med)
    root.frame.grid_forget()
        
    
def add_medication3():
    noon_med_button["state"]='disabled'
    morn_med_button["state"]='disabled'
    even_med_Text.place(relx=0.72, rely = 0.85, anchor = CENTER)
    even_med_button.place_forget()
    even_med_label.place_forget()
    confirm_button3.place(relx=0.615, rely = 0.85, anchor = CENTER)
    keyboard(3)

def confirm3():
    noon_med_button["state"]='normal'
    morn_med_button["state"]='normal'
    even_med=even_med_Text.get("1.0",END)
    even_med_label.place(relx=0.72, rely = 0.88,anchor = CENTER)
    even_med_Text.place_forget()
    confirm_button3.place_forget()
    even_med_button.place(relx=0.72, rely = 0.72, anchor = CENTER)
    even_med_label.config(text=even_med)
    root.frame.grid_forget()


def keyboard(number):
    root.frame = Frame(bg="light blue")
    root.frame.grid()
    
    def select(value):
        if number==1:
            cursor_position=morn_med_Text.index(INSERT)
            if value == "Clear":
                morn_med_Text.delete(1.0,END)
            elif value == "Enter":
                morn_med_Text.insert(INSERT,'\n')
            elif value=="Bkspce":
                text=morn_med_Text.get(1.0,cursor_position)
                newtext=text[:-1]
                morn_med_Text.delete(1.0,cursor_position)
                morn_med_Text.insert(INSERT,newtext)
            else:
                morn_med_Text.insert(cursor_position, value)
        elif number==2:
            cursor_position=noon_med_Text.index(INSERT)
            if value == "Clear":
                noon_med_Text.delete(1.0,END)
            elif value == "Enter":
                noon_med_Text.insert(INSERT,'\n')
            elif value=="Bkspce":
                text=noon_med_Text.get(1.0,cursor_position)
                newtext=text[:-1]
                noon_med_Text.delete(1.0,cursor_position)
                noon_med_Text.insert(INSERT,newtext)

            else:
                noon_med_Text.insert(cursor_position,value)
        else:
            cursor_position=even_med_Text.index(INSERT)
            if value == "Clear":
                even_med_Text.delete(1.0,END)
            elif value == "Enter":
                even_med_Text.insert(INSERT,'\n')
            elif value=="Bkspce":
                text=even_med_Text.get(1.0,cursor_position)
                newtext=text[:-1]
                even_med_Text.delete(1.0,cursor_position)
                even_med_Text.insert(INSERT,newtext)
            else:
                even_med_Text.insert(cursor_position, value)
    buttons=[
    '~','1','2','3','4','5','6','7','8','9','0','Bkspce',
    'q','w','e','r','t','y','u','i','o','p','-','"',
    'a','s','d','f','g','h','j','k','l','+','Enter','Clear',
    'z','x','c','v','b','n','m',',','.','/','(',')',
    ' '
]

    label1=Label(root.frame,text='\n\n\n\n\n\n\n\n')
    label1.grid(row=7,columnspan=1)
    label2=Label(root.frame,text='\n\n\n\n\n\n\n')
    label2.grid(row=15,columnspan=1)
    varRow=9
    varColumn=0

    for button in buttons:
        command=lambda x=button: select(x)
        if button!=" ":
            Button(root.frame,text=button,width=7,bg="black",fg="white",
                       activebackground="white",activeforeground="black",relief='raised',padx=0,
                       pady=7,bd=4,command=command,font=("Arial",28 )).grid(row=varRow,column=varColumn)
        if button==" ":
            Button(root.frame,text=button,width=80,bg="black",fg="white",
                       activebackground="white",activeforeground="black",relief='raised',padx=4,
                       pady=7,bd=8,command=command,font=("Arial",15 )).grid(row=13,columnspan=17)
        varColumn+=1
        if varColumn>11 and varRow==9:
            varColumn=0
            varRow+=1
        if varColumn>11 and varRow==10:
            varColumn=0
            varRow+=1
        if varColumn>11 and varRow==11:
            varColumn=0
            varRow+=1
            
def alarm_message():
    root.frame = Frame(bg="red")
    root.frame.grid()
    change_colour()
    title_message=Label(root.frame, text="TAKE YOUR \n MEDICATION ", font = "Arial 150 ",fg='white',bg='black')
    title_message.grid(row=0,column=0,padx=80,pady=300)
    taken_button = Button(root.frame, text="Done",command=button_pressed, font=("Arial", 80),bd=10)  
    taken_button.grid(row=0,column=1,padx=45,pady=100)
        
def change_colour():
    global AFTER
    colour1=root.frame.cget("bg")
    if colour1=="red":
        GPIO.output(27, True)
        root.frame.config(bg="blue")
    if colour1=="blue":
        GPIO.output(27, False)
        root.frame.config(bg="red")                

    AFTER=root.after(1000,change_colour)
    
root.after(1000,change_colour)

    
def button_pressed():
    root.frame.grid_forget()
    print('Button pressed')
    root.after_cancel(AFTER)
    GPIO.output (27, False)
    GPIO.output (26, False)
    time.sleep(0.2)


def tick():
    current_time_display = time.strftime("%I:%M %p, %d %B %Y, %A", time.localtime())
    current_time_compare = time.strftime("%I:%M:%S%p", time.localtime())
    label.config(text=current_time_display)

    if (alarm1_input_compare == current_time_compare) or (alarm2_input_compare== current_time_compare) or (alarm3_input_compare== current_time_compare):
        root.frame.grid_forget()
        root.after_cancel(AFTER)
        print("1on")
        #GPIO.output (27, True)#LED
        GPIO.output (26, True)#buzzer            
        GPIO.output (17, True)#motor
        time.sleep(5)
        GPIO.output (17, False)
        alarm_message()
            
    #updates label every 200ms
    label.after(200, tick)

#morning combobox
comboHour1= ttk.Combobox(root,  width = 3, values=["01","02","03","04","05","06","07","08","09","10","11","12"],font=("Arial", 20))
comboMin1 = ttk.Combobox(root, width = 3,values=["00","01","02","03","04","05","06","07","08","09", "10","11","12","13","14" ,"15","16","17","18","19","20","21","22","23","24", "25", "26","27","28","29","30","31","32","33","34", "35","36","37", "40","41","42","43" ,"44","45","47","48", "50","51","54", "55","57"],font=("Arial", 20))
comboHour1.current(0)
comboMin1.current(0)
comboAM1 = ttk.Combobox(root, width = 3,values=["AM","PM"],font=("Arial", 20))
comboAM1.current(0)

#set font for "Morning/Afternoon/Evening" labels
fontlabel=tkfont.Font(family='Arial', size=46,weight=tkfont.BOLD,underline=1)

#"Morning" label
alarm1_label1=Label(root, text="Morning", font = fontlabel,bg="light blue")
alarm1_label1.place(relx=0.135, rely = 0.4, anchor = NW)
#time set label
alarm1_label=Label(root,bg="light blue",font="Arial 20 italic bold",fg="maroon")
#colon in between morning combobox
colon1_label=Label(root, text=":", font = "Arial 20",bg="light blue")
colon1_label.place(relx=0.176, rely = 0.504, anchor = NW)

#button to set morning alarm
morning_alarm_button = Button(root, text="Set Morning Alarm", command=set_alarm1,font=("Arial", 18))
change_morn_alarm_button = Button(root, text="Change Morning Alarm", command=change_alarm1,font=("Arial", 18))
change_alarm1()
#afternoon combobox
comboHour2= ttk.Combobox(root,  width = 3, values=["01","02","03","04","05","06","07","08","09","10","11","12"],font=("Arial", 20))
comboMin2 = ttk.Combobox(root, width = 3,values=["00", "05", "10", "15", "20", "22","23","24","25", "30", "35", "40", "45", "50", "55"],font=("Arial", 20))
comboHour2.current(0)
comboMin2.current(0)
comboAM2 = ttk.Combobox(root, width = 3,values=["AM","PM"],font=("Arial", 20))
comboAM2.current(0)

#"Afternoon" label
alarm2_label1=Label(root, text="Afternoon", font = fontlabel,bg="light blue")
alarm2_label1.place(relx=0.37, rely = 0.4, anchor = NW)

#colon in between afternoon combobox
colon2_label=Label(root, text=":", font = "Arial 20 ",bg="light blue")
colon2_label.place(relx=0.435, rely = 0.504, anchor = NW)
alarm2_label=Label(root, bg="light blue",font="Arial 20 bold italic",fg="maroon")
#button to set afternoon alarm
noon_alarm_button = Button(root, text="Set Afternoon Alarm", command=set_alarm2, font=("Arial", 18))  
change_aft_alarm_button = Button(root, text="Change Afternoon Alarm", command=change_alarm2,font=("Arial", 18))
change_alarm2()
#evening combobox
comboHour3= ttk.Combobox(root,  width = 3, values=["01","02","03","04","05","06","07","08","09","10","11","12"],font=("Arial", 20))
comboMin3 = ttk.Combobox(root, width = 3,values=["00", "05", "10", "15", "20", "25", "30", "35", "40", "45", "50", "55"],font=("Arial", 20))
comboHour3.current(0)
comboMin3.current(0)
comboAM3 = ttk.Combobox(root, width = 3,values=["AM","PM"],font=("Arial", 20))
comboAM3.current(0)

#"Evening" label
alarm3_label1=Label(root, text="Evening", font = fontlabel,bg="light blue")
alarm3_label1.place(relx=0.64, rely = 0.4, anchor = NW)
alarm3_label=Label(root, bg="light blue",font="Arial 20 bold italic",fg="maroon")
#colon in between evening combobox
colon3_label=Label(root, text=":", font = "Times 20",bg="light blue")
colon3_label.place(relx=0.69, rely = 0.504, anchor = NW)

#button to set evening alarm
even_alarm_button = Button(root, text="Set Evening Alarm", command=set_alarm3, font=("Arial", 18))  
change_even_alarm_button = Button(root, text="Change Evening Alarm", command=change_alarm3,font=("Arial", 18))
change_alarm3()
#Textbox to input morning medications
morn_med_Text=Text(root,width=18,height=8,font=("Arial", 20))
morn_med_label=Label(root,bg="light blue", font=("Arial",20))
morn_med_button = Button(root, text="Add Medication(s)", command=add_medication1, font=("Arial", 18),state='normal')  
morn_med_button.place(relx=0.21, rely = 0.72, anchor = CENTER)
confirm_button1=Button(root, text="Confirm", command=confirm1, font=("Arial", 18)) 


med_label1=Label(root, text="Morning Medication(s): ",bg="light blue", font=("Arial 18 bold"))
med_label1.place(relx=0.14, rely = 0.66)
#Textbox to input afternoon medications
noon_med_Text=Text(root,width=18,height=8,font=("Arial", 20))
noon_med_label=Label(root,bg="light blue", font=("Arial",20 ))

#button to input medications;converts input in textbox to label
noon_med_button = Button(root, text="Add Medication(s)", command=add_medication2, font=("Arial", 18),state='normal')  
noon_med_button.place(relx=0.458, rely = 0.72, anchor = CENTER)
confirm_button2=Button(root, text="Confirm", command=confirm2, font=("Arial", 18)) 

med_label2=Label(root, text="Afternoon Medication(s): ",bg="light blue", font=("Arial 18 bold"))
med_label2.place(relx=0.385, rely = 0.66)
even_med_label=Label(root, bg="light blue", font=("Arial",20 ))
#Textbox to input evening medications
even_med_Text=Text(root,width=18,height=8,font=("Arial", 20))

#button to input medications;converts input in textbox to label
even_med_button = Button(root, text="Add Medication(s)", command=add_medication3, font=("Arial", 18),state='normal')  
even_med_button.place(relx=0.72, rely = 0.72, anchor = CENTER)
confirm_button3=Button(root, text="Confirm", command=confirm3, font=("Arial", 18)) 


med_label3=Label(root, text="Evening Medication(s): ",bg="light blue", font=("Arial 18 bold"))
med_label3.place(relx=0.65, rely = 0.66)



#call clock function
tick()
root.mainloop()
Reply


Messages In This Thread
Where should I place GPIO.cleanup() - by shallanq - Apr-09-2020, 05:20 AM

Possibly Related Threads…
Thread Author Replies Views Last Post
  place 2 windows exactly above each other janeik 3 933 Jul-23-2023, 03:12 AM
Last Post: deanhystad
  function return boolean based on GPIO pin reading caslor 2 1,192 Feb-04-2023, 12:30 PM
Last Post: caslor
  class Update input (Gpio pin raspberry pi) caslor 2 801 Jan-30-2023, 08:05 PM
Last Post: caslor
  Webhook, post_data, GPIO partial changes DigitalID 2 996 Nov-10-2022, 09:50 PM
Last Post: deanhystad
  Seemingly unstable GPIO output while executing from RetroPie LouF 6 3,942 Feb-19-2021, 06:29 AM
Last Post: LouF
  Cannot 'break' from a "for" loop in a right place tester_V 9 4,000 Feb-17-2021, 01:03 AM
Last Post: tester_V
  Picture changing triggered by GPIO q_nerk 2 2,590 Dec-14-2020, 03:32 PM
Last Post: DeaD_EyE
  GPIO high if network IP has good ping duckredbeard 3 2,349 Oct-12-2020, 10:41 PM
Last Post: bowlofred
  raspberry pi tank gpio help jatgm1 1 2,423 May-06-2020, 09:00 PM
Last Post: Larz60+
  Orange PI Win steering LEDs connect to GPIO djmcg 0 1,546 Dec-27-2019, 08:26 AM
Last Post: djmcg

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020