|
|
- # -*- coding: utf-8 -*-
- """
- Created on Wed Feb 15 10:44:49 2023
-
- @author: david
- """
-
- from threading import Thread
- import collections #Colección de datos para graficarlos
- import matplotlib.pyplot as plt #Gráficación de datos
- import matplotlib.animation as animation #Animar la gráfica
- import time
- import serial
- #import numpy as np
- from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg #Crear una figura para insertar en tkinter
- import tkinter as tk #Para la interfaz
- #from matplotlib.lines import Line2D
-
-
- def leer_datos():
- time.sleep(1.0)
- arduino.reset_input_buffer()
- print("leyendo")
- while(isRun):
- global isReceiving
- global dato1
- print("RECIBIENDO...")
- dato1 = float(arduino.readline().decode("utf-8").strip())
- print(dato1)
- var.set("TEMPERATURA: " + str(dato1) + " °C")
- isReceiving = True
-
- def iniciarGrafica(self, muestras,lines):
- global dato1
- data.append(dato1)
- lines.set_data(range(muestras), data)
- global isRun
- isReceiving = False
- isRun = True
- dato1 = 0.0
- serialPort = 'COM3'
- baudRate = 9600
-
- def conectar_serial():
- global arduino
- try:
- arduino = serial.Serial(serialPort, baudRate)
- arduino.timeout = 0.5
- time.sleep(0.5)
- print("CONECTADO")
- btnStart.config(state = "normal")
- btnConectar.config(state = "disabled")
- except:
- print("Error de conexión")
-
- def iniciar_hilo():
- global thread
- thread = Thread(target=leer_datos)
- thread.start()
- btnStart.config(state = "disabled")
- btnPause.config(state = "normal")
-
- def guardarGrafica():
- plt.savefig('miFigura.png')
-
- def control1():
- window2 = tk.Toplevel()
- window2.resizable(width = 0, height = 0)
- window2.title('Control Manual')
- window2.geometry('500x300')
-
- def control2():
- window3 = tk.Toplevel()
- window3.resizable(width = 0, height = 0)
- window3.title('Control ON/OFF')
- window3.geometry('500x300')
-
- def pausar():
- anim.event_source.stop()
- btnResume.config(state = "normal")
- btnPause.config(state = "disabled")
-
- def reanudar():
- anim.event_source.start()
- btnResume.config(state = "disabled")
- btnPause.config(state = "normal")
-
- def desconectar_serial():
- global isRun
- anim.event_source.stop()
- isRun = False
- arduino.close()
- btnPause.config(state = "disabled")
- btnResume.config(state = "disabled")
-
-
- muestras = 100
- data = collections.deque([0] * muestras, maxlen = muestras)
- tiempoMuestreo = 100
-
- fig = plt.figure(facecolor = '0.94')
- ax = plt.axes(xlim=(0,100), ylim=(-40, 150))
- plt.title("Sensor 1 - Arduino")
- ax.set_xlabel("Muestras")
- ax.set_ylabel("Voltaje")
- lines = ax.plot([], [])[0]
-
- root= tk.Tk()
- root.title("Sistema de calentamiento")
-
- var = tk.StringVar()
- frame = tk.Frame(root, bd=2)
- frame.grid(column=0, row=3, columnspan=2, sticky="nsew")
- frame1 = tk.Frame(root)
- frame1.grid(column=0, row=1, columnspan=2, sticky="EW")
- frame2 = tk.Frame(root)
- frame2.grid(column=0, row=2, columnspan=2, sticky="EW")
- frame0 = tk.Frame(root)
- frame0.grid(column=0, row=0, columnspan=2, sticky="EW")
-
- root.columnconfigure(0, weight=1)
- root.columnconfigure(1, weight=1)
- #self.master.rowconfigure(0, weigh=1)
- #self.master.rowconfigure(1, weigh=1)
- #self.master.rowconfigure(2, weigh=1)
- root.rowconfigure(3, weigh=5)
-
- canvas = FigureCanvasTkAgg(fig, master=frame)
- canvas.get_tk_widget().pack(padx=0, pady=0, expand=True, fill='both')
- btnManual = tk.Button(frame2, text = "Manual", command = control1)
- btnManual.grid(row=0, column=0, pady=2, padx=10)
- btnOnOff = tk.Button(frame2, text = "ON/OFF", command = control2)
- btnOnOff.grid(row=0, column=1, pady=2, padx=10)
- btnConectar = tk.Button(frame1, text = "Connect", command = conectar_serial, bg="#00F1FC")
- btnConectar.grid(row=0, column=0, pady=2, padx=10)
- btnStart = tk.Button(frame1, text = "Start", command = iniciar_hilo, bg="#008C17", state="disabled")
- btnStart.grid(row=0, column=1, pady=2, padx=10)
- btnPause = tk.Button(frame1, text = "Pause", command = pausar, bg="#E2E200", state="disabled")
- btnPause.grid(row=0, column=2, pady=2, padx=10)
- btnResume = tk.Button(frame1, text = "Resume", command = reanudar, bg="#00F428", state="disabled")
- btnResume.grid(row=0, column=3, pady=2, padx=10)
- btnDesconectar = tk.Button(frame2, text='Disconnect', command = desconectar_serial, bg="#FE5E5E")
- btnDesconectar.grid(row=0, column=3, pady=2, padx=10)
- labelData = tk.Label(frame2, textvariable=var)
- labelData.grid(row=0, column=4, pady=2, padx=500)
-
- barraMenu = tk.Menu(frame0)
- barra1 = tk.Menu(barraMenu)
- barra1.add_command(label="Guardar gráfica", command=guardarGrafica)
- barraMenu.add_cascade(label="Archivo", menu=barra1)
- root.config(menu=barraMenu)
-
- anim = animation.FuncAnimation(fig, iniciarGrafica, fargs=(muestras, lines), interval = tiempoMuestreo)
-
- root.geometry('1000x600')
- root.mainloop()
-
|