OpenMV驱动自己的1.8寸TFT屏

如果没有OpenMV配套LCD屏,而手边恰好有TFT屏,那怎么能用TFT平替一下呢,今天就把它当作一个独立的OpenMV扩展板给各位父老乡亲们享用(不占用UART端口),屏幕本身所占引脚比OpenMV官网模块还少,而且成本就屏幕本身20块钱。

下面就用追踪黄色小球举例

IO接线:
LED       ---> 3.3V (背光控制) 
SCK       ---> P2(SCLK)            SCLK 时钟线
SDA       ---> P0(MOSI)            SDA 数据线
AO          ---> P8                    数据命令选择线
RESET   ---> P7                    复位线
CS          ---> P3                    片选线
GND       ---> GND
VCC       ---> 3.3V

#OpenMV连接TFT追踪黄色小球
import sensor, image, time, math, json, pyb, ustruct ,lcd
from pyb import UART
from pyb import Timer
from machine import UART

# 颜色跟踪阈值(L Min, L Max, A Min, A Max, B Min, B Max)
thresholds1 =[
(44, 60, 23, 52, 73, 51)
]

sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QQVGA)
sensor.skip_frames(time = 2000)
sensor.set_contrast(0)
sensor.set_auto_gain(False) # 颜色跟踪必须关闭自动增益
sensor.set_auto_whitebal(False) # 颜色跟踪必须关闭白平衡
sensor.set_auto_exposure(True,1)
clock = time.clock()
uart = UART(3, 115200)
uart.init(115200, bits=8, parity=None, stop=1)
lcd.init() # Initialize the lcd screen.

left_roi = [10,10,140,100]  ##感性区域,设计颜色识别的有效区域-

start_x=80   
start_y=120
interval_x=80  
interval_y=80
roi_temp = 20
roi_sum = 0
roi_r=12     

roi_x=roi_r   
roi_y=roi_r


left_1_1 = (start_x,                       start_y,  roi_r)  ##通过比例计算框位
left_1_2 = (start_x+interval_x+(roi_x*2),  start_y,  roi_r)

ROI=(75,55,10,10)
def find_max(blobs):
    max_size=0
    for blob in blobs:
        if blob.pixels() > max_size:
            max_blob = blob
            max_size = blob.pixels()
    return max_blob


time_log=5
def tick(timer):      #这里开启了一个定时器
    time_log  = 1

tim = Timer(2, freq=1)
tim.callback(tick)

Lmin = 1
Lmax = 1
Amin = 1
Amax = 1
Bmin = 1
Bmax = 1

while(True):
    clock.tick()
    img = sensor.snapshot().lens_corr(strength = 1.6, zoom = 1.0)
    lcd.display(img) # Take a picture and display the image.
    statistics=img.get_statistics(roi=ROI)   ###查询这个区域的颜色值
    color_l=statistics.l_mean()
    color_a=statistics.a_mean()
    color_b=statistics.b_mean()
    #print(color_l,color_a,color_b)

    img.draw_rectangle(left_roi)       ##绘制主框
    img.draw_rectangle(ROI,color=(255,255,100))    ##绘制校准区域

    Lmin = color_l - 10
    Lmax = color_l + 10
    Amin = color_a - 10
    Amax = color_a + 10
    Bmin = color_b - 10
    Bmax = color_b + 10

    blobs = img.find_blobs(thresholds1,roi=left_roi,pixels_threshold=50, area_threshold=50,merge = True)
    if blobs:
        max_blob1 = find_max(blobs)
        img.draw_edges(max_blob1.min_corners(), color=(0,255,128))
        img.draw_cross(max_blob1[5], max_blob1[6],color=(0,255,128))
        data = ustruct.pack("<bBBb",      #格式为俩个字符俩个短整型(2字节)
               0xFF,                      #帧头1
               int(max_blob1[5]), # up sample by 4    #数据1
               int(max_blob1[6]), # up sample by 4    #数据2
               0xFE)
        uart.write(data);  #必须要传入一个字节数组
        print(max_blob1[5],max_blob1[6])
注意1.8寸TFT屏分辨率为160*128,所以选择图像为QQVGA或QQVGA2。
sensor.set_framesize(sensor.QQVGA)

  保存完运行,得到如下结果。

 

 

  • 2
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
驱动1.8TFT,可以使用STM32F103C8T6微控制器。首先,需要了解TFT的通信方式。常见的通信方式有SPI和I2C。对于1.8TFT,通常使用SPI通信。 使用STM32F103C8T6驱动1.8TFT的步骤如下: 1. 准备硬件:将TFT的引脚连接到STM32F103C8T6的相应引脚。具体的连接方式可参考TFT和STM32F103C8T6的数据手册。 2. 配置SPI:在STM32F103C8T6的寄存器中,配置SPI的参数,例如主从模式、时钟极性和相位等。同时,设置SPI的速度,以使其与TFT的通信速度相匹配。 3. 初始化TFT:通过SPI发送相应的命令和数据来初始化TFT。根据TFT的数据手册,设置TFT的分辨率、颜色模式、方向等。 4. 绘制图像:使用SPI发送图像数据到TFT的显存中。根据TFT的数据手册,将像素颜色数据转换为对应的字节格式,并发送到TFT。 5. 控制显示:通过发送命令和数据,控制TFT的亮度、对比度、清、显示和关闭等功能。 6. 实时更新:如果需要实现实时更新的功能,可以通过修改图像数据的方式,来更新TFT的显示内容。需要注意的是,实时更新可能会造成显示闪烁,可以考虑使用双缓冲技术来减少闪烁。 以上是使用STM32F103C8T6驱动1.8TFT的基本步骤。具体的实现方式可以根据TFT和STM32F103C8T6的数据手册进行调整和优化。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值