if uart.any():是在中断里执行么?
-
下面这段程序是在中断里执行么
if uart.any():
uart_data = uart.read(1).decode()#一个字节一个字节分析,避免命令数据间断问题
if (flag==0)&(uart_data=="S"):
flag=1
elif (flag==1)&(uart_data=="T"):
flag=2
elif (flag==2)&(uart_data=="R"):
flag=3
elif(flag==3): #接收命令段2字符
cmd1=uart_data
flag=4
elif(flag==4):
cmd2=uart_data
flag=5
elif(flag==5): #接收序号2字符
num1=uart_data
flag=6
elif(flag==6):
num2=uart_data
flag=7
elif(flag==7)&(uart_data=="E"):
flag=8
elif(flag==8)&(uart_data=="N"):
flag=9
elif(flag==9)&(uart_data=="D"):
flag=10
else:flag=0
-
需要全部代码文本。
-
import sensor, image, time, math
from pyb import Pin,Timer,UARTuart = UART(3, 115200)
uart.init(115200, bits=8, parity=None, stop=1,read_buf_len=10)LED1 = Pin('P9', Pin.OUT_PP, Pin.PULL_NONE)
LED1.value(True)
sensor.reset()
sensor.set_pixformat(sensor.GRAYSCALE) #灰度图
sensor.set_framesize(sensor.VGA) # 640*480
sensor.set_windowing((640, 300)) # V Res of 80 == less work (40 for 2X the speed).
sensor.skip_frames(time = 1000)#延时1s等待设置生效
sensor.set_auto_gain(False) #关闭自动快门防止图像冲洗
clock = time.clock()
LED1.value(False)#启用定时器2,频率0.2,发送心跳反馈5s一次
def tick(timer):
LED1.value(True)
#uart.write("STRHBEND")#发送心跳反馈
#print("心跳STRHBEND")
time.sleep(1)
LED1.value(False)
tim = Timer(2, freq=0.2) # create a timer object using timer 2 - trigger at 1Hz
tim.callback(tick) # set the callback to our tick function#条码类型定义
def barcode_name(code):
if(code.type() == image.EAN2):
return "EAN2"
if(code.type() == image.EAN5):
return "EAN5"
if(code.type() == image.EAN8):
return "EAN8"
if(code.type() == image.UPCE):
return "UPCE"
if(code.type() == image.ISBN10):
return "ISBN10"
if(code.type() == image.UPCA):
return "UPCA"
if(code.type() == image.EAN13):
return "EAN13"
if(code.type() == image.ISBN13):
return "ISBN13"
if(code.type() == image.I25):
return "I25"
if(code.type() == image.DATABAR):
return "DATABAR"
if(code.type() == image.DATABAR_EXP):
return "DATABAR_EXP"
if(code.type() == image.CODABAR):
return "CODABAR"
if(code.type() == image.CODE39):
return "CODE39"
if(code.type() == image.PDF417):
return "PDF417"
if(code.type() == image.CODE93):
return "CODE93"
if(code.type() == image.CODE128):
return "CODE128"
#num=0#扫码计数
flag=0#串口接收标志位
uart_data=0#串口数据
cmd1=b'0'#命令字节1
cmd2=b'0'#命令字节2while(True):
clock.tick()
code_data="code_data"#条码相关信息
#读串口命令
if uart.any():
uart_data = uart.read(1).decode()#一个字节一个字节分析,避免命令数据间断问题
if (flag==0)&(uart_data=="S"):
flag=1
elif (flag==1)&(uart_data=="T"):
flag=2
elif (flag==2)&(uart_data=="R"):
flag=3
elif(flag==3): #接收命令段2字符
cmd1=uart_data
flag=4
elif(flag==4):
cmd2=uart_data
flag=5
elif(flag==5): #接收序号2字符
num1=uart_data
flag=6
elif(flag==6):
num2=uart_data
flag=7
elif(flag==7)&(uart_data=="E"):
flag=8
elif(flag==8)&(uart_data=="N"):
flag=9
elif(flag==9)&(uart_data=="D"):
flag=10
else:flag=0#收到STR_ _END 开始读码 if (flag==10)&(cmd1=="R")&(cmd2=="C") :#READ CODE命令 flag=0 #接收标志清零 img = sensor.snapshot() codes = img.find_barcodes() i = 0#条码个数统计 for code in codes: img.draw_rectangle(code.rect(),color=50,thickness=5) print_args = (barcode_name(code), code.payload(), code.quality(), clock.fps(),num1,num2) print("条码类型 %s, 码值 \"%s\", 数量 %d, 帧率 %f, 计数 %s%s" % print_args) #print(", 计数%d"%num)#不换行 , end = '' #计数值和条码位宽值位2位数,切条码位宽<21,直接发 if ( len(str(code.payload()))>9 ) & ( len(str(code.payload()))<21 ): #发送STRCV 计数值 条码位宽 条码值 END code_data=("STRCV%s%s%s%sEND"%(num1,num2,len(str(code.payload())), str(code.payload()))) elif len(str(code.payload())) < 10:#计数补一个字符0,凑足2位 #发送STRCV 计数值 "0"条码位宽 条码值 END code_data=("STRCV%s%s0%s%sEND"%(num1,num2,len(str(code.payload())), str(code.payload()))) i = i+1#条码个数统计 #LED1.value(False) #time.sleep(2) #判断有几个码 if i==1:#只有一个码,直接上传,指示灯闪亮一次 LED1.value(True) uart.write(code_data) LED1.value(False) else:#没有码或者多个码,报错,发NR uart.write("STRNR%s%sEND"%(num1,num2)) print("没有码, 帧率:%f,计数%s%s" % (clock.fps(),num1,num2 ) ) #flag=0 #心跳信号 elif(flag==10)&(cmd1=="H")&(cmd2=="B"): uart.write("STRHB%s%sEND"%(num1,num2) ) flag=0#清除命令接收标志