import os import sys import time import tkinter as tk from tkinter import ttk from tkinter import messagebox import RPi.GPIO as GPIO # Add the parent directory to the module search path sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), ".."))) from interface_board_libs.adc_mcp3208 import MCP3208 from interface_board_libs.shift_register import ShiftRegister from interface_board_pins import * # Import pin assignments from tab_control import create_control_tab from tab_control import set_updating_enabled as tab_control__set_updating_enabled from tab_adc_plot import create_adc_plot_tab from tab_adc_plot import set_updating_enabled as tab_analog_plot__set_updating_enabled from tab_digital_plot import create_digital_plot_tab from tab_digital_plot import set_updating_enabled as tab_digital_plot__set_updating_enabled from tab_exit import create_exit_tab # Initialize ADC & Shift Register adc = MCP3208() shift_reg = ShiftRegister(GPIO_SHIFT_REG_DATA, GPIO_SHIFT_REG_LATCH, GPIO_SHIFT_REG_CLOCK) # GPIO Setup GPIO.setmode(GPIO.BCM) for pin in GPIO_DIGITAL_INPUTS.values(): GPIO.setup(pin, GPIO.IN) GPIO.setup(GPIO_PWM1, GPIO.OUT) GPIO.setup(GPIO_PWM2, GPIO.OUT) pwm1 = GPIO.PWM(GPIO_PWM1, 1000) pwm2 = GPIO.PWM(GPIO_PWM2, 1000) pwm1.start(0) pwm2.start(0) # Tkinter GUI root = tk.Tk() root.title("Raspberry Pi Interface Board") root.attributes('-fullscreen', True) root.configure(bg="black") # Tabbed Interface notebook = ttk.Notebook(root) notebook.pack(expand=True, fill="both") # Track active tab def on_tab_change(event): active_tab = event.widget.tab(event.widget.index("current"), "text") print (f"INFO: switched to tab {active_tab}") match active_tab: case "ADC Plot": tab_control__set_updating_enabled(False) tab_analog_plot__set_updating_enabled(True) tab_digital_plot__set_updating_enabled(False) case "Digital Inputs": tab_control__set_updating_enabled(False) tab_analog_plot__set_updating_enabled(False) tab_digital_plot__set_updating_enabled(True) case "Controls": tab_control__set_updating_enabled(True) tab_analog_plot__set_updating_enabled(False) tab_digital_plot__set_updating_enabled(False) case "EXIT": pass case _: print(f"unhandled change to tab {active_tab}") notebook.bind("<>", on_tab_change) # Add tabs create_control_tab(notebook, adc, shift_reg, pwm1, pwm2) create_adc_plot_tab(notebook, adc) create_digital_plot_tab(notebook) create_exit_tab(notebook, root, pwm1, pwm2) # Run GUI try: root.mainloop() except KeyboardInterrupt: print('Keyboard interrupt -> exiting') exit()