diff --git a/controller/main.py b/controller/main.py index 26e7f35..d093cca 100644 --- a/controller/main.py +++ b/controller/main.py @@ -1,12 +1,12 @@ -import tkinter as tk, robomasterpy as rm +import tkinter as tk, robomasterpy as rm, datetime from tkinter import ttk -import datetime class RobomasterUI: def __init__(self, master, cmd): self.master = master master.title("Robomaster Control") self.cmd = cmd + self._command_executor(cmd.led_control, comp="all", effect="solid", r=255, g=0, b=0) master.configure(bg='#121212') @@ -19,7 +19,16 @@ class RobomasterUI: style.map('TButton', background=[('active', '#555555')], foreground=[('active', 'white')]) - + style.configure('TCombobox', + background='#333333', + foreground='white', + fieldbackground='#333333', + selectbackground='#555555', + selectforeground='white', + insertcolor='white') + style.map('TCombobox', + fieldbackground=[('readonly', '#333333'), ('!readonly', '#333333')], + background=[('readonly', '#333333'), ('!readonly', '#333333')]) self.output_text = tk.Text(master, height=10, width=50, state=tk.DISABLED, fg='white', bg='#121212', insertbackground='white', selectbackground='#555555', selectforeground='white') self.output_text.grid(row=6, column=0, columnspan=4, padx=10, pady=10) @@ -54,8 +63,40 @@ class RobomasterUI: ttk.Button(gripper_frame, text="Close Gripper", command=self.close_gripper).grid(row=2, column=0, columnspan=2, pady=5, sticky="we") ttk.Button(gripper_frame, text="Gripper Status", command=self.get_gripper_status).grid(row=3, column=0, columnspan=2, pady=5, sticky="we") - chassis_frame = ttk.LabelFrame(master, text="Chassis Control") - chassis_frame.grid(row=1, column=0, columnspan=2, padx=10, pady=10, sticky="n") + led_frame = ttk.LabelFrame(master, text="LED Control") + led_frame.grid(row=0, column=2, padx=10, pady=10, sticky="n") + + led_comp_values = ["all", "top_all", "top_right", "top_left", "bottom_all", "bottom_front", "bottom_back", "bottom_left", "bottom_right"] + tk.Label(led_frame, text="Comp:", fg='white', bg='#121212').grid(row=0, column=0, padx=5, pady=5, sticky="e") + self.comp_combo = ttk.Combobox(led_frame, values=led_comp_values, width=10, style='DarkCombobox.TCombobox') + self.comp_combo.set(led_comp_values[0]) + self.comp_combo.grid(row=0, column=1, padx=5, pady=5) + + led_effect_values = ["solid", "off", "pulse", "blink", "scrolling"] + tk.Label(led_frame, text="Effect:", fg='white', bg='#121212').grid(row=1, column=0, padx=5, pady=5, sticky="e") + self.effect_combo = ttk.Combobox(led_frame, values=led_effect_values, width=10, style='DarkCombobox.TCombobox') + self.effect_combo.set(led_effect_values[0]) + self.effect_combo.grid(row=1, column=1, padx=5, pady=5) + + tk.Label(led_frame, text="R:", fg='white', bg='#121212').grid(row=2, column=0, padx=5, pady=5, sticky="e") + self.r_entry = tk.Entry(led_frame, width=5, fg='white', bg='#333333', insertbackground='white') + self.r_entry.insert(0, "255") + self.r_entry.grid(row=2, column=1, padx=5, pady=5) + + tk.Label(led_frame, text="G:", fg='white', bg='#121212').grid(row=3, column=0, padx=5, pady=5, sticky="e") + self.g_entry = tk.Entry(led_frame, width=5, fg='white', bg='#333333', insertbackground='white') + self.g_entry.insert(0, "255") + self.g_entry.grid(row=3, column=1, padx=5, pady=5) + + tk.Label(led_frame, text="B:", fg='white', bg='#121212').grid(row=4, column=0, padx=5, pady=5, sticky="e") + self.b_entry = tk.Entry(led_frame, width=5, fg='white', bg='#333333', insertbackground='white') + self.b_entry.insert(0, "255") + self.b_entry.grid(row=4, column=1, padx=5, pady=5) + + ttk.Button(led_frame, text="Set LED", command=self.led_control_ui).grid(row=5, column=0, columnspan=2, pady=5, sticky="we") + + chassis_frame = ttk.LabelFrame(master, text="Chassis Control (WASDQE)") + chassis_frame.grid(row=1, column=0, columnspan=3, padx=10, pady=10, sticky="n") tk.Label(chassis_frame, text="XY Speed (m/s):", fg='white', bg='#121212').grid(row=0, column=0, padx=5, pady=5, sticky="e") self.chassis_x_speed_entry = tk.Entry(chassis_frame, width=5, fg='white', bg='#333333', insertbackground='white') @@ -85,6 +126,7 @@ class RobomasterUI: master.bind("", self.deselect_textbox) master.columnconfigure(0, weight=1) master.columnconfigure(1, weight=1) + master.columnconfigure(2, weight=1) def deselect_textbox(self, event): focused_widget = self.master.focus_get() @@ -161,10 +203,26 @@ class RobomasterUI: except ValueError: self._display_output("Error: Invalid speed value") + def led_control_ui(self): + comp_str = self.comp_combo.get() + effect_str = self.effect_combo.get() + r_str = self.r_entry.get() + g_str = self.g_entry.get() + b_str = self.b_entry.get() + try: + r = int(r_str) + g = int(g_str) + b = int(b_str) + if not all(0 <= color <= 255 for color in [r, g, b]): + return self._display_output("Error: R, G, B values must be between 0 and 255") + except ValueError: + return self._display_output("Error: Invalid R, G, B values") + self._command_executor(self.cmd.led_control, comp=comp_str, effect=effect_str, r=r, g=g, b=b) + def main(): ip_address = "192.168.2.1" try: - cmd = rm.Commander(ip=ip_address) + cmd = rm.Commander(ip=ip_address, timeout=5) print(f"Connected to Robomaster. Version: {cmd.version()}") root = tk.Tk() root.resizable(False, False)