added uninterruptable comms loop

This commit is contained in:
2026-02-25 22:35:41 +01:00
parent 333f1af929
commit 6775b5abec

View File

@@ -3,12 +3,14 @@ import utime
import time
import math
import sys
import select
lens_cs = machine.Pin(7, machine.Pin.IN)
body_cs = machine.Pin(8, machine.Pin.OUT)
vd_lens = machine.Pin(9, machine.Pin.OUT)
tx_pin = machine.Pin(16, machine.Pin.OUT)
poll_obj = ''
focal_length = 0
aperture_raw = 0
@@ -16,18 +18,22 @@ focus = 0
focus_limit = 0
status_sent = False
counter = 0
ap = 2.8
ap_odd = False
ap_closing = True
counter = 0 #VD_LENS pulse counter
ap = 4884 #aperture
ap_odd = False #variable for controlling one bit in send messages
focus_pos = 0 #focus position to be set manually
af_in_progress = False
focus_mode = "MF" #AF/MF
focus_min = 16116
focus_max = 19415
focus_min = 12000
focus_max = 23000
ap_min = 4884
ap_max = 6132
focus_pos = 0
change_focus = False
utime.sleep(1)
vd_lens.value(1)
@@ -50,17 +56,49 @@ time.sleep_ms(20)
rx_ack = False
def Comms_Init():
global poll_obj
poll_obj = select.poll()
poll_obj.register(sys.stdin, select.POLLIN)
def Comms_Read():
global poll_obj, ap, focus_mode, change_focus, focus_pos
poll_results = poll_obj.poll(1)
if poll_results:
rw = sys.stdin.readline().strip()
rw = rw.upper()
if "APERTURE" in rw:
data = rw.split(' ')
ap = int(data[1])
if "FOCUS" in rw:
data = rw.split(' ')
focus_pos = int(data[1])
change_focus = True
if "AF" in rw:
focus_mode = "AF"
if "MF" in rw:
focus_mode = "MF"
def focal_length_conv(raw):
return (math.exp((raw+92063.3)/8082.9)+406.979)/3256.82
def aperture(value, leftMin=2.8, leftMax=16, rightMin=4884, rightMax=6132):
def aperture_count(value, leftMin=2.8, leftMax=16, rightMin=4884, rightMax=6132):
leftSpan = leftMax - leftMin
rightSpan = rightMax - rightMin
valueScaled = float(value - leftMin) / float(leftSpan)
return rightMin + (valueScaled * rightSpan)
def aperture(value):
if value < ap_min:
value = ap_min
if value > ap_max:
value = ap_max
return value
def rx_end(pin):
rx_ack = True
@@ -218,22 +256,26 @@ def shutdown():
time.sleep_ms(6)
def normal_loop():
global ap, ap_closing, af_in_progress, focus_mode, focus_pos
vd_pulse()
time.sleep_ms(10)
send_aperture(ap)
send_focus(focus_mode, af_in_progress)
time.sleep_ms(6)
print_rx()
vd_pulse()
time.sleep_ms(10)
send_aperture(ap)
send_focus(focus_mode, af_in_progress)
time.sleep_ms(6)
print_rx()
global ap, ap_closing, af_in_progress, focus_mode, focus_pos, change_focus
if change_focus:
move_focus(focus_pos)
change_focus = False
else:
vd_pulse()
time.sleep_ms(10)
send_aperture(ap)
send_focus(focus_mode, af_in_progress)
time.sleep_ms(6)
print_rx()
vd_pulse()
time.sleep_ms(10)
send_aperture(ap)
send_focus(focus_mode, af_in_progress)
time.sleep_ms(6)
print_rx()
Comms_Init()
lens_cs.irq(handler=rx_end, trigger=machine.Pin.IRQ_FALLING)
vd_pulse()
@@ -266,23 +308,8 @@ tx(b'\xf0\x19\x00\x02\x00\x0a\xff\xff\x03\x00\x00\x00\x00\x00\x3f\x00\x00\x00\x0
print_rx()
time.sleep_ms(10)
"""
for i in range(0,120):
normal_loop()
move_focus(15000)
for i in range(0,120):
normal_loop()
move_focus(17000)
for i in range(0,120):
normal_loop()
move_focus(20000)
for i in range(0,120):
normal_loop()
"""
#send_af()
#for i in range(0,6):
# normal_loop()
#stop_af()
while True:
normal_loop()
Comms_Read()