tkinterface.py 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. #!/usr/bin/env python3
  2. from tkinter import *
  3. from PIL import Image, ImageTk
  4. import sys
  5. import readYUV422
  6. import threading
  7. import logging
  8. logging.basicConfig(level="INFO", format="%(name)s - %(levelname)s - %(message)s")
  9. logging.debug("Starting...")
  10. cam_width = 320 #Cam resolution
  11. cam_height = 240
  12. buffer_reg = {"RID":"","WID":"","VAL":""}
  13. image_file = Image.new(mode="RGB", size = (cam_width, cam_height)) #Image init
  14. window = Tk() #Tkinter init
  15. window.geometry("340x480")
  16. window.title("OV7670")
  17. colour = IntVar()
  18. register_read_value = StringVar()
  19. cam_frame = Frame(window,bd=1,height=cam_height,width=cam_width) #Frame init
  20. cam_frame.place(x=10,y=10)
  21. cam_label = Label(cam_frame) #Label init
  22. cam_label.place(x=0,y=0)
  23. input_read_frame = Frame(window,bd=1,height=110,width=310)
  24. input_read_frame.place(x=0,y=290)
  25. input_write_frame = Frame(window,bd=1,height=110 ,width=310)
  26. input_write_frame.place(x=0,y=400)
  27. input_switch_frame = Frame(window,bd=1,height=30, width=310)
  28. input_switch_frame.place(x=0,y=260)
  29. def alter_read_buffer():
  30. buffer_reg["RID"] = register_read_input.get()
  31. def alter_write_buffer():
  32. buffer_reg["WID"] = register_write_input.get()
  33. buffer_reg["VAL"] = register_write_value.get()
  34. label_read = Label(input_read_frame,text="Read register")
  35. button_read = Button(input_read_frame,text="Read",command=alter_read_buffer)
  36. register_read_input = Entry(input_read_frame)
  37. register_read_output = Entry(input_read_frame,textvariable=register_read_value,state="readonly")
  38. label_read.pack(side = TOP)
  39. button_read.pack(side = RIGHT)
  40. register_read_input.pack(side = TOP)
  41. register_read_output.pack(side = TOP)
  42. label_write = Label(input_write_frame,text="Write register")
  43. button_write = Button(input_write_frame,text="Write",command=alter_write_buffer)
  44. register_write_input = Entry(input_write_frame)
  45. register_write_value = Entry(input_write_frame)
  46. toggle_colours = Checkbutton(input_switch_frame,text="Colours",variable=colour,onvalue=1,offvalue=0)
  47. label_write.pack(side = TOP)
  48. button_write.pack(side = RIGHT)
  49. register_write_input.pack(side = TOP)
  50. register_write_value.pack(side = TOP)
  51. toggle_colours.pack(side = TOP)
  52. if len(sys.argv) == 2: #Checks if user selected a different port
  53. port = sys.argv[1]
  54. else:
  55. port = "/dev/ttyACM0" #Default port
  56. def refreshImage(): #Threading
  57. global buffer_reg
  58. global cam_width
  59. global cam_height
  60. global port
  61. global register_read_value
  62. while True:
  63. if buffer_reg["RID"]:
  64. logging.debug("Read register")
  65. register_read_value.set(readYUV422.readImage(port_dev=port,regId=int(buffer_reg["RID"],16),colour=colour.get()))
  66. buffer_reg["RID"] = ""
  67. elif buffer_reg["WID"]:
  68. logging.debug("Write register")
  69. readYUV422.readImage(port_dev=port,regId=int(buffer_reg["WID"],16),regVal=int(buffer_reg["VAL"],16),colour=colour.get())
  70. buffer_reg["WID"] = ""
  71. buffer_reg["VAL"] = ""
  72. else:
  73. logging.debug("Image requested")
  74. bitmap = readYUV422.readImage(port_dev=port,width=cam_width,height=cam_height,colour=colour.get())
  75. index = 0
  76. for y in range(cam_height):
  77. for x in range(cam_width):
  78. image_file.putpixel((x, y), bitmap[index])
  79. index += 1
  80. logging.debug("Image received")
  81. photo = ImageTk.PhotoImage(image_file)
  82. cam_label.config(image = photo)
  83. Refresh = threading.Thread(target=refreshImage, daemon=True).start()
  84. window.mainloop()