Files
guadaloop_lev_control/sensor/sensor_simplerNew.py
2025-11-15 13:13:07 -06:00

169 lines
5.3 KiB
Python

import serial
import serial.tools.list_ports
import pandas as pd
import os
from pynput import keyboard
from datetime import datetime
from time import sleep
import sys
import numpy as np
#import termios
import tkinter as tk
# COMPORT = "/dev/cu.usbmodem11301"
COMPORT = "COM10"
SAMPLES=200
# print([port.device for port in serial.tools.list_ports.comports()])
arduino = serial.Serial()
class App:
# def forward(self, x):
# A = 43.20978
# B = 0.286
# C = 1.0373300741204
# K = 900.0010210040905
# v = 0.1
# real = A + (K - A)/ (1 + np.exp(-1 * B(x-C)))**(1/v)
def inverse(self, y):
# A = 43.20978
# B = 0.286
# C = 1.0373300741204
# K = 900.0010210040905
# v = 0.1
A = -9.824360913609562
K = 871.4744633266955
B = 0.2909366235093304
C = 4.3307594408159495
v = 0.2822807132259202
y = float(y)
#print(y)
real = C - (1.0 / B) * np.log((( (K - A) / (y - A) ) ** v) - 1.0)
return real
def __init__(self):
self.running = True
self.paused = False
self.snap = False
self.counter = 0
self.dist = False
self.current_dist = 1
self.dataset = {}
self.trialNumber = 0
self.arduino = serial.Serial(port=COMPORT, baudrate=115200, timeout=5)
def run_machine(self):
with keyboard.Listener(on_press=self.on_press) as listener:
while self.arduino.is_open and self.running:
try:
data = self.arduino.readline().decode(errors='ignore')
except:
print("Triggered Termination")
break
if self.paused:
## PILOT--SENDING INPUTS, SWITCHING SENSOR INDEX
sleep(0.1)
#termios.tcflush(sys.stdin, termios.TCIOFLUSH)
msg = input("Enter message: ").strip()
self.arduino.write(bytes(msg, 'utf-8'))
self.paused = False
sleep(0.5)
elif self.dist:
sleep(0.1)
#termios.tcflush(sys.stdin, termios.TCIOFLUSH)
msg = input("Enter dist: ")
self.current_dist = float(msg)
self.dataset[self.current_dist] = []
junk = self.arduino.read_all()
self.dist = False
else:
try:
data = self.arduino.readline().decode(errors='ignore')
if self.snap and self.counter < SAMPLES:
if (self.counter == 0):
self.dataset[self.current_dist] = []
real = data.strip()
#real = self.inverse(real)
# print( self.inverse(real) )
print(real)
self.dataset[self.current_dist].append(real)
self.counter += 1
# if (self.counter == SAMPLES):
# temp = 0
# for value in self.dataset[self.current_dist] :
# temp += float(value)
# temp = temp / 99
# print("Average distance guessed", self.inverse(temp))
else:
self.snap = False
self.counter = 0
except KeyboardInterrupt:
print("Triggered Termination")
break
print("Arduino Disconnected!")
print("====")
print(self.dataset)
df = pd.DataFrame(self.dataset)
#lb is taped
df.to_csv(r'C:\Users\k28ad\OneDrive\Documents\sensor\dataSensor3New.csv')
listener.stop()
arduino.close()
return
def on_press(self, key):
try:
if key.char == 'p':
self.paused = True
elif key.char == 's':
self.snap = True
elif key.char == 'd':
self.dist = True
# def submit_slider1():
# value = slider1.get()
# self.current_dist = value
# def update_label1(val):
# label1.config(text=f"Value: {val}")
# # Create main window
# root = tk.Tk()
# root.title("Slider Example")
# root.geometry("300x200")
# # Slider 1
# slider1 = tk.Scale(root, from_=0, to=3, orient=tk.HORIZONTAL, command=update_label1)
# slider1.pack()
# label1 = tk.Label(root, text="Value: 0")
# label1.pack()
# button1 = tk.Button(root, text="Submit Slider 1", command=submit_slider1)
# button1.pack()
# root.mainloop()
except:
if key == keyboard.Key.esc:
print("are you here??")
self.running = False
app = App()
app.run_machine()