import sensor, image, time, lcd, math
from pyb import UART
uart = UART(3, 115200)
sensor.reset() # Initialize the camera sensor.
sensor.set_pixformat(sensor.RGB565) # or sensor.GRAYSCALE
sensor.set_framesize(sensor.QQVGA2) # Special 128x160 framesize for LCD Shield.
sensor.skip_frames(10)
sensor.set_auto_gain(False) # must be turned off for color tracking
sensor.set_auto_whitebal(False)
lcd.init(type=1) # Initialize the lcd screen.
clock = time.clock()
lcd.display(sensor.snapshot())
message=" "
thresholds = [(0, 100, 16, 127, -96, 127),
(0, 100, -128, -28, -128, 127),
(0, 100, -128, 127, -128, -17)]
red_k=0
green_k=1
blue_k=2
roi_1=(0,10,160,45)
roi_2=(0,65,160,45)
roi_line1_1=(0,10,160,10)
roi_line1_2=(0,55,160,55)
roi_line2_1=(0,65,160,65)
roi_line2_2=(0,110,160,110)
f=0
q=0
s=0
while(True):
img = sensor.snapshot().replace(vflip=True, hmirror=False, transpose=True )
lcd.display(img)
if uart.any():
a=uart.readline().decode().strip()
print(a)
if a=='1' and q==0:
print(1)
uart.write(" * \r\n")
flagcode=1
i=0.003
while(flagcode==1):
clock.tick()
img = sensor.snapshot().replace(vflip=True, hmirror=False, transpose=True )
img.lens_corr(i) # strength of 1.8 is good for the 2.8mm lens.
lcd.display(img)
codes=img.find_qrcodes()
for code in img.find_qrcodes():
img.draw_rectangle(code.rect(), color = (255, 0, 0))
lcd.display(img)
if code.payload() :
print(code)
message=code.payload()
flagcode=0
q=1
f=1
i+=0.003
uart.write(message+'\r\n')
if a=='2' and s==0:
f=1
print(2)
uart.write(" * \r\n")
flag=1
while flag==1:
clock.tick()
img = sensor.snapshot().replace(vflip=True, hmirror=False, transpose=True )
img.draw_line(roi_line1_1)
img.draw_line(roi_line1_2)
lcd.display(img)
blobs=img.find_blobs([thresholds[green_k]],roi=roi_1, pixels_threshold=200, area_threshold=200, merge=True)
if blobs:
a1=[]
c1=[]
for b in blobs:
img.draw_rectangle(b[0:4])
img.draw_cross(b[5], b[6],(0,255,0))
lcd.display(img)
a1.append(b[4])
c1.append(b[5])
d1=max(a1)
gg=a1.index(d1)
gg1=c1[gg]
blobs=img.find_blobs([thresholds[red_k]],roi=roi_1, pixels_threshold=200, area_threshold=200, merge=True)
if blobs:
a2=[]
c2=[]
for b in blobs:
img.draw_rectangle(b[0:4])
img.draw_cross(b[5], b[6],(255,0,0))
lcd.display(img)
a2.append(b[4])
c2.append(b[5])
d2=max(a2)
rr=a2.index(d2)
rr1=c2[rr]
blobs=img.find_blobs([thresholds[blue_k]],roi=roi_1, pixels_threshold=200, area_threshold=200, merge=True)
if blobs:
a3=[]
c3=[]
for b in blobs:
img.draw_rectangle(b[0:4])
img.draw_cross(b[5], b[6],(0,0,255))
lcd.display(img)
a3.append(b[4])
c3.append(b[5])
d3=max(a3)
bb=a3.index(d3)
bb1=c3[bb]
w=[]
w.append(rr1)
w.append(gg1)
w.append(bb1)
w_max=0
w_min=200
for index in range(0,3):
if w[index]>w_max :
w_max=w[index]
if w[index]<w_min :
w_min=w[index]
w1=w.index(w_max)+1
w3=w.index(w_min)+1
w2=5-w1-w3+1
upcolor='{}{}{}-'.format(str(w1),str(w2),str(w3))
flag=0
print(upcolor)
flag=1
while flag==1:
clock.tick()
#img = image.Image("660mm.bmp", copy_to_fb=True)
img = sensor.snapshot().replace(vflip=True, hmirror=False, transpose=True )
img.draw_line(roi_line2_1)
img.draw_line(roi_line2_2)
lcd.display(img)
blobs=img.find_blobs([thresholds[green_k]],roi=roi_2, pixels_threshold=200, area_threshold=200, merge=True)
if blobs:
a1=[]
c1=[]
for b in blobs:
img.draw_rectangle(b[0:4])
img.draw_cross(b[5], b[6],(0,255,0))
lcd.display(img)
a1.append(b[4])
c1.append(b[5])
d1=max(a1)
gg=a1.index(d1)
gg1=c1[gg]
blobs=img.find_blobs([thresholds[red_k]],roi=roi_2, pixels_threshold=200, area_threshold=200, merge=True)
if blobs:
a2=[]
c2=[]
for b in blobs:
img.draw_rectangle(b[0:4])
img.draw_cross(b[5], b[6],(255,0,0))
lcd.display(img)
a2.append(b[4])
c2.append(b[5])
d2=max(a2)
rr=a2.index(d2)
rr1=c2[rr]
blobs=img.find_blobs([thresholds[blue_k]],roi=roi_2, pixels_threshold=200, area_threshold=200, merge=True)
if blobs:
a3=[]
c3=[]
for b in blobs:
img.draw_rectangle(b[0:4])
img.draw_cross(b[5], b[6],(0,0,255))
lcd.display(img)
a3.append(b[4])
c3.append(b[5])
d3=max(a3)
bb=a3.index(d3)
bb1=c3[bb]
w=[]
w.append(rr1)
w.append(gg1)
w.append(bb1)
w_max=0
w_min=200
for index in range(0,3):
if w[index]>w_max :
w_max=w[index]
if w[index]<w_min :
w_min=w[index]
w1=w.index(w_max)+1
w3=w.index(w_min)+1
w2=5-w1-w3+1
downcolor='{}{}{}\r\n'.format(str(w1),str(w2),str(w3))
flag=0
print(downcolor)
uart.write(upcolor+downcolor)
s=1