• 安装星瞳实验室APP,快速收到回复。扫描二维码或者点击 https://singtown.com/app/
  • 必看:玩转星瞳论坛了解一下图片上传,代码格式等问题。
  • 一个提问,一个帖子,标题为问题的介绍
  • 请贴出具体的代码,与报错提示。
  • 代码一定要让别人可以运行的文本,不要贴图片
  • 定时器的回调函数代码运行出错



    • 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 状态机轮询是什么?有教程链接么?🙃