定时器的回调函数代码运行出错
-
import sensor, image, time from pyb import UART,Timer,Servo has_data = False # 初始化为没有数据读入 def is_data_coming(timer): global uart global has_data if uart.any(): has_data = True else: has_data = False sensor.reset() # Initialize the camera sensor. sensor.set_pixformat(sensor.RGB565) # use RGB565. sensor.set_framesize(sensor.QQVGA) # use QQVGA for speed. sensor.skip_frames(10) # Let new settings take affect. sensor.set_auto_whitebal(False) # turn this off. clock = time.clock() # Tracks FPS. s1=Servo(1) uart = UART(3, 115200) uart.init(115200, bits=8, parity=None, stop=1) timer = Timer(4) timer.init(freq=10) timer.callback(is_data_coming) while(True): if uart.readline()==b'a': print('yes') #s1.angle(-90) else: continue while(True): img = sensor.snapshot() #print(has_data) if has_data: data = uart.readline() if data==b'b': break else: print('not b') while(True): pass
利用定时器的回调函数检测串口是否有数据,在运行uart.readline()==b'a',当底下加上控制舵机代码s1.angle(-90)时即使发送字符b,第二个while中 if has_data也检测不到串口有数据;如果删除s1.angle(-90),发送字符b,if has_data成功检测到数据并跳出循环,这是为什么?
-
你这是要做什么?为什么逻辑要这么诡异?
-
@kidswong999 这是从一个大程序里简化出来的,也是出问题的地方。我想先让摄像头保持待机,当接收到串口发送的字符时转动舵机,同时进入下一个程序段完成第二个任务,第二个任务是一直进行的,直到串口发送来相应的字符时终止第二个任务的程序段,跳到进行第三个任务的程序段。
-
@kidswong999 就是想实现中断的功能
-
如果是我的话,我会用状态机轮询。三个嵌套的while循环+中断,我是看不下去
-
@kidswong999 所以我没贴完整代码啊,太长了
-
@kidswong999 状态机轮询是什么?有教程链接么?