OPENV接收和发送串口的数据

12 篇文章 5 订阅
import sensor, image, time
from pyb import UART
from pyb import Pin, Timer, LED


import re

sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
sensor.skip_frames(time = 2000)

uart=UART(1,115200)  #PA9 txd   PA10--rxd 微翻版OPENMV接口PA9和PA10就好。
#uart = UART(3, 9600)  #正式openmv的接口P4和P5
uart.init(115200, bits=8, parity=None, stop=1) # init with given parameters timeout_char=1000
clock = time.clock()


#def tick(timer):
    #Uart_recv()
##5ms读取一次检测一次串口,t=5ms f=1/t=200hz
#tim = Timer(3, freq=200)      # create a timer object using timer 2 - trigger at 1Hz
#tim.callback(tick)          # set the callback to our tick function

g_uart_cmdA_flag=0   # 将变量声明为全局变量,如此才可改变其数值
g_uart_cmdB_flag=0
#*********************************************************************************************
#串口接收函数的定义
def Uart_recv():  # 串口接收数据
    global g_uart_cmdA_flag
    global g_uart_cmdB_flag
    if (uart.any()):   # 更新串口接收数据
        recv_data = eval(str(uart.read()))  #接收读取的字符串
        print(recv_data)
        #uart.write(recv_data)
        if ("&" in recv_data) :  #如果接收的字符串中有&号。注意,这个不是第一个字符串,只要有&就行,可以修改下,检查帧头
            print("Openmv has recved CMD data.")
            if ("lightA" in recv_data): #如果接收字符串有light1,比如&light1
                print(len(recv_data))
                g_uart_cmdA_flag = 1
                print("Ready for light 1!")
## &lightA0 或者&lightA99 提取A后面的数据,必须是正数,后面不能加换行符号,否则长度改变
## 字符串的下标计数从0开始,它是一个标记特殊的list(数据结构会讲到)
                if len(recv_data)>8:
                    ddd=(int(recv_data[7])-48)*10
                    ddd=ddd+(int(recv_data[8])-48)
                    print(ddd)
                elif len(recv_data)==8:
                    ddd=(int(recv_data[7])-48)
                    print(ddd)


            if ("lightB1" in recv_data):#如果接收字符串有B,比如&B
                g_uart_cmdB_flag = 1
                print("Ready for B!")
#*********************************************************************************************
#定义两个数据,测试发送
adata =10.2
bdata =123
#定义两个数据,测试发送
cdata=88.65
ddata=896
while(True):
    clock.tick()
    img = sensor.snapshot()
    Uart_recv() #主函数中不断检测,可以在串口中断中进行接收,或者是开辟一个定时器,定时5ms-10ms检查一次这个函数(这方法好像有问题,定时器的),
    if g_uart_cmdA_flag ==1  :  #命令A的回应
       # uart.write("loc"+(str)adata+"num"+(str)bdata+"#")   # 串口发送
        uart.write("adata:%0.2f,bdata:%d\r\n"%(adata,bdata)) #发送字符串,字符串中包括了数据,数据可以根据检测得到,浮点数或者是整数
        g_uart_cmdA_flag = 0
    if g_uart_cmdB_flag ==1  : #命令B的回应
        uart.write("cdata:%0.2f,ddata:%d\r\n"%(cdata,ddata))#发送字符串,字符串中包括了数据,数据可以根据检测得到,浮点数或者是整数
        g_uart_cmdB_flag = 0
    time.sleep(100)

  • 1
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值