start penna zip

This commit is contained in:
PanSi21 2025-11-18 16:01:22 +01:00
parent e60146cdfe
commit 88b607c42f
Signed by untrusted user who does not match committer: PanSi21
GPG key ID: 198E46F625BADD13
188 changed files with 236868 additions and 0 deletions

50
serial_dexp.py Normal file
View file

@ -0,0 +1,50 @@
# contact ST32 microcontroller via serial,
# gather the single bytes we recieve and put them together (two by two),
# plot the 16bits numbers.
import serial
import sys
from matplotlib import pyplot as plt
import numpy as np
SERIAL_PORT = '/dev/ttyACM0'
BAUDRATE = 115200
TIMEOUT = 1
CONTROL_CHAR = 'h' # trigger char for sending data configured on the board
# define the expected resulting function and plot it
AMP = 40000
TAU1 = 25
TAU2 = 8
def dexp(x):
exp1 = AMP * np.exp(-x/TAU1)
exp2 = AMP * np.exp(-x/TAU2)
return exp1-exp2
x_coord = np.linspace(0,100,1000)
plt.plot(x_coord, dexp(x_coord), linestyle='dashed', linewidth='0.7', color='blue', label='expected')
# init serial port
try:
ser = serial.Serial(SERIAL_PORT, BAUDRATE, timeout=TIMEOUT)
except serial.SerialException as e:
print(f"Serial port init error: {e}")
sys.exit(1)
# send the control char in ascii encoding (single byte)
ser.write(CONTROL_CHAR.encode('ascii'))
# read the full content being sent
recieved = bytearray(ser.readall())
# join the bytes two by two to get numbers back
# (note: they were stored with little endianess i think, so set appropriate 'byteorder' value)
numbers = [int.from_bytes(recieved[i:i+2], byteorder='little', signed=False) for i in range(0,len(recieved),2)]
# plot the result (both the single points and the curve connecting them)
plt.plot(range(0,100), numbers, linewidth='0.8', color='orange', label='result')
plt.scatter(range(0,100), numbers, marker='+', color='orange')
plt.legend()
plt.grid(True)
plt.show()
ser.close()