Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
RT-Thread一般讨论
国民技术_N32G45x
【N32G457】基于 RT-Thread 和N32G457的便携测距模块
发布于 2022-03-16 19:09:47 浏览:905
订阅该版
背景:基于RT-Thread系统和N32G457开发板开发的一款便携测距小模块; 可应用在测量无人实验室,无人小车,自动避让障碍,近距离测量物体的距离,不用传统的尺子测量。更加快速的测量到墙面,以及地面,可以在给施工装修等工人提供便捷的测距。 硬件部分由SSD1306模块,TTL转485模块,测距模块,N32G457主控板等组成; 软件部分实现实时采集数据上传,屏幕显示,数据采集等功能。 **硬件框架:** 模块使用的TTL转485模块,测距模块是485的,需要转换一下。 OLED0.96寸的SSD1306模块,大家可以学习一下怎么配置I2C配置。 超声波测距模块,市面上的超声波测距传感器,距离是可以定制的。 N32G457主控板,负责处理数据显示数据,实时的控制显示。 LED控制,通过程序控制,发送的时候灯闪烁。 ![设计框图.png](https://oss-club.rt-thread.org/uploads/20220316/42b181f6b1025b31f81e44bdb13eadac.png) **软件框架:** 软件模块说明, 利用定时控制显示,测距以后实时显示测距 通过DAP升级,即USB串口升级。 超声波测距--------> N32G457-------->SSD1306 上位机数据------------^ **效果图:**![测距图片.jpg](https://oss-club.rt-thread.org/uploads/20220316/ac290836b3124d8f7c0907151fca58ec.jpg.webp) 示例代码: ``` //定时器3设定 RT_SECTION(".irq.Timer3Int") void Timer3Int(uint32_t timeus) { rt_err_t ret_ = RT_EOK; rt_hwtimer_mode_t mode=HWTIMER_MODE_PERIOD; rt_hwtimerval_t timeout_s; timer3_ = rt_device_find(SAMPLE_TIMER3_NAME); ret_ = rt_device_open(timer3_, RT_DEVICE_OFLAG_RDWR); rt_device_set_rx_indicate(timer3_, timeout_cb); ret_ = rt_device_control(timer3_, HWTIMER_CTRL_MODE_SET, &mode); timeout_s.sec = 0; timeout_s.usec = timeus; if (rt_device_write(timer3_, 0, &timeout_s, sizeof(timeout_s)) != sizeof(timeout_s)) { rt_kprintf("Tips : Timer Int Error.\r\n"); } else { rt_kprintf("Tips : Timer Int Success.\r\n"); } } RT_SECTION(".irq.timeout_cb") rt_err_t timeout_cb(rt_device_t dev, rt_size_t size) { Timer3_10ms++; if(sensor_overTime != 0){ sensor_overTime--; } if(Timer3_10ms%50==0) { Timer3_10ms = 0; get_time ++; } return 0; } //传感器发送: void sensor_analysis_fun() { uint8_t str1[6] = { 0xFC, 0x01, 0xB2, 0x00, 0x00, 0xAF }; uint8_t str2[6] = { 0xFC, 0x01, 0xC3, 0x00, 0x00, 0xC0 }; if (sensor_analysis_bit != 0) { led_0_Write(1); rt_device_write(serial2, 0, str1, (sizeof(str1))); rt_thread_mdelay(50);//白 rt_device_write(serial2, 0, str2, (sizeof(str2))); } led_0_Write(0); } //OLED初始化: void OLED_Init(void) { GPIO_InitType GPIO_InitStructure; RCC_EnableAPB2PeriphClk(OLED_GPIO_CLK, ENABLE); GPIO_InitStructure.Pin = (OLED_SIP_SCK|OLED_SIP_SDA); GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitPeripheral(OLED_SIP_PORT, &GPIO_InitStructure); GPIO_SetBits(OLED_SIP_PORT,(OLED_SIP_SCK|OLED_SIP_SDA)); rt_thread_mdelay(200); OLED_WR_Byte(0xAE,OLED_CMD);//--turn off oled panel OLED_WR_Byte(0x00,OLED_CMD);//---set low column address OLED_WR_Byte(0x10,OLED_CMD);//---set high column address OLED_WR_Byte(0x40,OLED_CMD);//--set start line address Set Mapping RAM Display Start Line (0x00~0x3F) OLED_WR_Byte(0x81,OLED_CMD);//--set contrast control register OLED_WR_Byte(0xCF,OLED_CMD);// Set SEG Output Current Brightness OLED_WR_Byte(0xA1,OLED_CMD);//--Set SEG/Column Mapping 0xa0左右反置 0xa1正常 OLED_WR_Byte(0xC8,OLED_CMD);//Set COM/Row Scan Direction 0xc0上下反置 0xc8正常 OLED_WR_Byte(0xA6,OLED_CMD);//--set normal display OLED_WR_Byte(0xA8,OLED_CMD);//--set multiplex ratio(1 to 64) OLED_WR_Byte(0x3f,OLED_CMD);//--1/64 duty OLED_WR_Byte(0xD3,OLED_CMD);//-set display offset Shift Mapping RAM Counter (0x00~0x3F) OLED_WR_Byte(0x00,OLED_CMD);//-not offset OLED_WR_Byte(0xd5,OLED_CMD);//--set display clock divide ratio/oscillator frequency OLED_WR_Byte(0x80,OLED_CMD);//--set divide ratio, Set Clock as 100 Frames/Sec OLED_WR_Byte(0xD9,OLED_CMD);//--set pre-charge period OLED_WR_Byte(0xF1,OLED_CMD);//Set Pre-Charge as 15 Clocks & Discharge as 1 Clock OLED_WR_Byte(0xDA,OLED_CMD);//--set com pins hardware configuration OLED_WR_Byte(0x12,OLED_CMD); OLED_WR_Byte(0xDB,OLED_CMD);//--set vcomh OLED_WR_Byte(0x40,OLED_CMD);//Set VCOM Deselect Level OLED_WR_Byte(0x20,OLED_CMD);//-Set Page Addressing Mode (0x00/0x01/0x02) OLED_WR_Byte(0x02,OLED_CMD);// OLED_WR_Byte(0x8D,OLED_CMD);//--set Charge Pump enable/disable OLED_WR_Byte(0x14,OLED_CMD);//--set(0x10) disable OLED_WR_Byte(0xA4,OLED_CMD);// Disable Entire Display On (0xa4/0xa5) OLED_WR_Byte(0xA6,OLED_CMD);// Disable Inverse Display On (0xa6/a7) OLED_Clear(); OLED_WR_Byte(0xAF,OLED_CMD); } ``` **实验用挡板阻挡测量距离,根据实际显示的可以知道距离,可以应用在无人实验室测量是否有物体,以及近距离测距,实现测量实际距离,方便用户在使用中更便捷知道物体与设备的实时距离,便携设备的测量通过显示屏,串口,把数据及时传给上位机。 本程序逻辑让使用者I2C通讯,以及常规的定时器和串口2,3来同时通讯 此测距模块是超声波模块,我们可以针对这个模块进行更深的开发利用。 **视频:**[便携测距设备.mp4](https://oss-club.rt-thread.org/uploads/20220316/2e7a0b579df6cb48373e7aeecae60c5e.mp4) **代码地址:**[user_code.zip](https://oss-club.rt-thread.org/uploads/20220401/50f3db9a509be0848d197d8b94f73e07.zip)
0
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
梁小浩
6年嵌入式中级工程师,专注于软硬件开发,操作系统会RTTHREAD,FREERTOS等操作系统,有问题欢迎探讨和共同学习进步
文章
1
回答
0
被采纳
0
关注TA
发私信
相关文章
1
有关动态模块加载的一篇论文
2
最近的调程序总结
3
晕掉了,这么久都不见layer2的踪影啊
4
继续K9ii的历程
5
[GUI相关] FreeType 2
6
[GUI相关]嵌入式系统中文输入法的设计
7
20081101 RT-Thread开发者聚会总结
8
嵌入式系统基础
9
linux2.4.19在at91rm9200 上的寄存器设置
10
[转]基于嵌入式Linux的通用触摸屏校准程序
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
DMA
USB
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
I2C_IIC
ESP8266
UART
WIZnet_W5500
ota在线升级
cubemx
PWM
BSP
flash
freemodbus
packages_软件包
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
编译报错
中断
Debug
rt_mq_消息队列_msg_queue
keil_MDK
ulog
SFUD
msh
C++_cpp
MicroPython
本月问答贡献
三世执戟
7
个答案
1
次被采纳
KunYi
5
个答案
1
次被采纳
RTT_逍遥
4
个答案
1
次被采纳
xiaorui
1
个答案
1
次被采纳
JonasWen
1
个答案
1
次被采纳
本月文章贡献
出出啊
1
篇文章
3
次点赞
小小李sunny
1
篇文章
1
次点赞
张世争
1
篇文章
3
次点赞
crystal266
2
篇文章
2
次点赞
whj467467222
2
篇文章
2
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部