-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathMain.py
113 lines (93 loc) · 4.39 KB
/
Main.py
1
2
3
4
5
6
7
8
9
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
import serial
import csv
import statistics
from PyQt5 import QtCore, QtGui, QtWidgets, uic
from PyQt5.QtGui import QStandardItem, QStandardItemModel
#Importar metodos para los botones
from Metodos.Normalizar import normalizar
from Metodos.Estandarizar import estandarizar
from Metodos.ComplementoNormativo import complemento_normativo
from Metodos.IQR import iqr
from Metodos.PuntZ import puntuacion_z
# Cargar la interfaz gráfica desde el archivo .ui
qtCreatorFile = "UI_Proyecto3.ui"
Ui_MainWindow, QtBaseClass = uic.loadUiType(qtCreatorFile)
class MyWindow(QtWidgets.QMainWindow, Ui_MainWindow):
def __init__(self):
super(MyWindow, self).__init__()
Ui_MainWindow.__init__(self)
self.setupUi(self)
# Configurar la conexión serial con Arduino
self.arduino = serial.Serial('COM3', 9600, timeout=1)
# Crear el modelo de lista para mostrar los datos
self.list_model = QStandardItemModel()
# Obtener la referencia al QListView
self.list_view = self.viewDatos
# Establecer el modelo de lista en el QListView
self.list_view.setModel(self.list_model)
# Conectar el botón "Leer datos" con la función que lee los valores del potenciómetro
self.btnStart.clicked.connect(self.leer_datos)
self.btnNormalizacion.clicked.connect(self.leer_datos)
self.btnEstandarizacion.clicked.connect(self.leer_datos)
self.btnComplemento.clicked.connect(self.leer_datos)
self.btnIQR.clicked.connect(self.leer_datos)
self.btnZ.clicked.connect(self.leer_datos)
self.btnCVS.clicked.connect(self.crear_csv)
def crear_csv(self):
# Obtener los datos de la lista
rows = []
for i in range(self.list_model.rowCount()):
row = []
for j in range(self.list_model.columnCount()):
item = self.list_model.item(i, j)
if item is not None:
row.append(item.text())
rows.append(row)
# Escribir los datos en un archivo CSV
filename, _ = QtWidgets.QFileDialog.getSaveFileName(self, "Guardar archivo CSV", "", "Archivos CSV (*.csv)")
if filename:
with open(filename, 'w', newline='') as csvfile:
writer = csv.writer(csvfile)
writer.writerows(rows)
def leer_datos(self):
# Leer N valores del potenciómetro desde Arduino
valores = []
while len(valores) < 30:
lectura = self.arduino.readline().decode().strip()
if lectura:
valores = list(map(int, lectura.strip().rstrip(',').split(',')))
print("Valores recibidos:", valores)
#Area para los metodos
normalizado = normalizar(valores)
estandar = estandarizar(valores)
complemento = complemento_normativo(valores)
intercuartil = iqr(valores)
z = puntuacion_z(valores)
# Calcular la moda, media, mediana, mayor y menor
moda = statistics.mode(valores)
media = statistics.mean(valores)
mediana = statistics.median(valores)
mayor = max(valores)
menor = min(valores)
# Limpiar el modelo de lista
self.list_model.clear()
# Agregar los datos al modelo de lista
self.list_model.appendRow(QStandardItem("Valores recibidos: " + str(valores)))
self.list_model.appendRow(QStandardItem("Moda: " + str(moda)))
self.list_model.appendRow(QStandardItem("Media: " + str(media)))
self.list_model.appendRow(QStandardItem("Mediana: " + str(mediana)))
self.list_model.appendRow(QStandardItem("Mayor: " + str(mayor)))
self.list_model.appendRow(QStandardItem("Menor: " + str(menor)))
self.list_model.appendRow(QStandardItem("Valores normalizados: " + str(normalizado)))
self.list_model.appendRow(QStandardItem("Valores estandarizados: " + str(estandar)))
self.list_model.appendRow(QStandardItem("Valores complementados normativo: " + str(complemento)))
self.list_model.appendRow(QStandardItem("Valores Intercuartiles: " + str(intercuartil)))
self.list_model.appendRow(QStandardItem("Valores Puntuación Z: " + str(z)))
def closeEvent(self, event):
# Cerrar la conexión serial con Arduino al cerrar la aplicación
self.arduino.close()
if __name__ == '__main__':
app = QtWidgets.QApplication([])
window = MyWindow()
window.show()
app.exec_()