零知增强板-摄像头 串口输出/LCD显示-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 3210|回复: 0

零知增强板-摄像头 串口输出/LCD显示

[复制链接]
发表于 2019-1-7 17:07 | 显示全部楼层 |阅读模式
零知增强板-DCMI接口 OV2640 摄像头 串口输出/LCD显示
http://www.lingzhilab.com/forum. ... d=893&fromuid=2

零知-平台软件源码,上位机调试工具、上位机工具源码请到零知官网下载。


本文将演示在零知增强板上进行摄像头的显示和传输,零知增强板自带摄像头接口,可以直接接入OV2640\OV7670等相同接口的摄像头模块。

1、硬件连接:

本文使用OV2640模块:http://www.lingzhilab.com/forum. ... 96&highlight=ov
该模块可以直接接入零知-增强板,不需要其他连线,如果要在LCD上显示,则按照之前的教程接入TFT屏的连线即可。

2、程序:


1)在LCD上直接显示图像,在工程代码camera.h中:
#define JPEG_OUTPUT_MODE//注释掉此行代码,表示RGB565模式,不注释就是JPG模式


2)抓取JPG格式图像,然后通过串口传输到PC显示


图像存储到了jpeg_buf中,然后我们把数据通过串口发送出去,这里使用Serial3传输图像数据,波特率设置为 460800,这样可以有比较高的帧率。
位机解析并显示:

3)上位机解析数据并显示
在PC端,串口收到数据后,按照jpg图像格式解析并显示,以下为Qt平台的代码:


[mw_shl_code=arduino,true]
        QByteArray str1;
        QByteArray str2;
        QByteArray str3;
        QByteArray str4;

        bool start = false;

        str1 = m_serial->read(1);
        if(str1.contains(start_flag.at(0))){
            str2 = m_serial->read(1);
            if(str2.contains(start_flag.at(1))){
                str3 = m_serial->read(1);
                if(str3.contains(start_flag.at(2))){
                    str4 = m_serial->read(1);
                    if(str4.contains(start_flag.at(3))){
                        start = true;
                    }
                }
            }
        }

        if(start == false){
            continue;
        }

        QByteArray str;
        str.append(str1);
        str.append(str2);
        str.append(str3);
        str.append(str4);

//        if(str.contains(start_flag))
        {
            qDebug()<<"frame start,num="<<m_fram_num;

            m_frameBuff.clear();
            m_frameBuff.append(str);

            while(1){
                if(m_serial->bytesAvailable()){

                    if(!m_serial->isOpen()){
                        return;
                    }

                    QByteArray bytes = m_serial->read(1);

                    m_frameBuff.append(bytes);

                    if(bytes.contains(end_flag.at(0))){
                        QByteArray byte2 = m_serial->read(1);

                        m_frameBuff.append(byte2);

                        if(byte2.contains(end_flag.at(1))){

                            break;
                        }
                    }

                }
                QCoreApplication::processEvents(QEventLoop::AllEvents, 100);
            }

            qDebug()<<"frame read done"<<","<<m_frameBuff.size();
            qDebug()<<"buff:"<<m_frameBuff.toHex();

            QString picname = QString("temp%1.jpg").arg(m_fram_num);

            m_fram_num++;

            QImage img = QImage::fromData(m_frameBuff);

            QPixmap pixmap = QPixmap::fromImage(img);

            ui->labelPIC->setPixmap(pixmap);[/mw_shl_code]

20190107155907.jpg

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-11-28 06:29 , Processed in 0.097032 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表