树莓派4B+Ubuntu24.04 电应普超声波传感器串口输出 保姆级教程
1. 背景
我的机器人上要用到超声波测距,因此就选了电应普的1拖4的超声波测距模块。用的是UART受控输出。这个模块的使用很简单,这里做一个笔记,也是对大家的一个参考。
2. 保姆级教程
刚刚说了,这东西很简单,就是一个串口的编程。但是在时间上,有一点点要注意。
我的程序的大框架是有一个50ms的任务,我的相关控制都在这50ms任务里完成。所以,我写一个超声波测距的独立的函数,放到50ms任务里就行了。这个独立的函数,会每50ms被执行一次。
2.1 函数的头文件
#ifndef _DIS_SENSOR_H_
#define _DIS_SENSOR_H_#include "main.h"
#include <wiringPi.h>
#include <wiringSerial.h>typedef struct {uint16_t dis1;uint16_t dis2;uint16_t dis3;uint16_t dis4;} dis_sensor_data_t;uint8_t dis_sensor_init(void);void dis_sensor_run_50ms(void);#endif // _DIS_SENSOR_H_
2.2 函数的实现文件
#include "main.h"#include "dis_sensor.h"/* 超声波测距的同时工作的反应时间是70多ms */
/* 每50ms 发一次触发命令,在100ms处能读到结果,也就是每100ms读到一次结果 */uint8_t dis_sensor_init(void)
{const char* dis_sensor_addr = "/dev/ttyAMA2"; // use uart2dis_sensor_data1.dis1 = 0;dis_sensor_data1.dis2 = 0;dis_sensor_data1.dis3 = 0;dis_sensor_data1.dis4 = 0;fd_dis_sensor = serialOpen(dis_sensor_addr, 9600);if(fd_dis_sensor < 0){printf("dis sensor initialize fail\n");return 0;}printf("dis sensor initialize success, fd_dis_sensor=%d\n", fd_dis_sensor);return 1;
}void dis_sensor_run_50ms(void)
{uint8_t trigger_command = 0x55;uint8_t tmp_dis[10] = {0};int data_len = 0;int checksum = 0;// send trigger commandserialPutchar(fd_dis_sensor, trigger_command);// read datadata_len = serialDataAvail(fd_dis_sensor);printf("dis sensor data length = %d\n", data_len);if(data_len>0){for(int i=0; i<10; i++){tmp_dis[i] = serialGetchar(fd_dis_sensor);printf("dis sensor data: %d, %02x\n", i, tmp_dis[i]);}// check checksumfor(int i=0; i<9; i++){checksum += tmp_dis[i];}checksum = checksum & 0xFF;if(checksum == tmp_dis[9]){printf("dis sensor checksum OK\n");}else{printf("dis sensor checksum error, checksum=%d, tmp_dis[9]=%d\n", checksum, tmp_dis[9]);}// save datadis_sensor_data1.dis1 = tmp_dis[1]*256+tmp_dis[2];dis_sensor_data1.dis2 = tmp_dis[3]*256+tmp_dis[4];dis_sensor_data1.dis3 = tmp_dis[5]*256+tmp_dis[6];dis_sensor_data1.dis4 = tmp_dis[7]*256+tmp_dis[8];printf("dis sensor data: %dmm, %dmm, %dmm, %dmm\n", dis_sensor_data1.dis1, dis_sensor_data1.dis2, dis_sensor_data1.dis3, dis_sensor_data1.dis4);}
}
2.3 函数的调用
void task_50ms_hook(int a ) // int a, a no used parameter
{// for time displayprintf("======task start======");print_current_time();// for distance sensordis_sensor_run_50ms();// for time displayprintf("======task end======");print_current_time();}
3. 结果检验
可以看到,读到距离传感器数据的间隔是100ms。
也就是1秒钟可以得到10个数据。基本可以满足机器人的判断使用。
4. 使用中的探讨
现在看到我这个结果是每100ms可以读到一个数据,实际上最开始用的时候,是差不多300ms才有一个数据,我觉得这个间隔有点大,就问厂家,厂家建议将输出方式从轮询(缺省)输出改为同时输出,可以用串口发送指令
01 06 02 16 00 01 + ModbusCRC16校验码
来进行修改。可以用sscom来修改,也可以用电应普的调试助手来修改。
5. 好了,大功告成,亲个嘴儿。
相关文章:
树莓派4B+Ubuntu24.04 电应普超声波传感器串口输出 保姆级教程
1. 背景 我的机器人上要用到超声波测距,因此就选了电应普的1拖4的超声波测距模块。用的是UART受控输出。这个模块的使用很简单,这里做一个笔记,也是对大家的一个参考。 2. 保姆级教程 刚刚说了,这东西很简单,就是一…...
Aloudata Agent :基于 NoETL 明细语义层的分析决策智能体
今天的分享包含四方面内容。首先,谈谈企业在数据分析智能体(Agent)探索时所面临的挑战;其次,介绍 Aloudata Agent 的关键技术创新点;第三,作为首次亮相,我们将通过产品演示揭晓产品 …...
C++学习-入门到精通-【1】C++编程入门,输入/输出和运算符
C学习-入门到精通-【1】C编程入门,输入/输出和运算符 C编程入门,输入/输出和运算符 C学习-入门到精通-【1】C编程入门,输入/输出和运算符第一个C程序:输出一行文本算术运算 第一个C程序:输出一行文本 // 文本打印程序…...
力扣-234.回文链表
题目描述 给你一个单链表的头节点 head ,请你判断该链表是否为回文链表。如果是,返回 true ;否则,返回 false 。 class Solution { public:bool isPalindrome(ListNode* head) {//快慢指针找到中间结点p1(偶数个结点…...
Electron从入门到入门
项目说明 项目地址 项目地址:https://gitee.com/ruirui-study/electron-demo 本项目为示例项目,代码注释非常清晰,给大家当做入门项目吧。 其实很多东西都可以在我这基础上添加或修改、市面上有些已开源的项目,但是太臃肿了&am…...
【华为HCIP | 华为数通工程师】821—多选解析—第十七页
多选835、IS-IS协议所使用的NSAP地址主要由哪几个部分构成? A、AREA ID B、SEL C、DSCp D、SYSTEM ID 解析:NSAP地址:网络服务访问点(Network Service Access Point)是 OSI 协议中用于定位资源的地址。NSAP 的地址结构如图所示,它由 IDP(Initial Domain …...
electron-builder 打包安装与启动手动安装,最终解决方案,之前的文章与其他的人都不用看了。
介绍 最近官网出了个electron-forge,但打包之后的软件包有问题会有个多余的遮罩物挡在软件的最前面,太恶心了。研究了很久硬是没法去掉。没办法只能重温electron-builder工具来进行打包。之前用过这个安装过一次,也是耗费了好几天。而且也做好了笔记,有资料的情况下,我万万…...
conda安装cuda+cudnn+pytorch【一条龙服务,以cuda12.1版本为例】
安装步骤在Windows和ubuntu系统中应该是一致的,建议浏览一遍文章再尝试配置环境 一、创建新的虚拟环境 这里以Anaconda为例,打开终端 创建新的虚拟环境,test_torch可替换为别的名字(自定义),3.10也可以改…...
ElementUi的tabs样式太难修改,自定义tabs标签页
ElementUi的Tabs组件在某些情况下难以是自己想要的样式,这时候自定义 Tabs 会是一个更好的选择,可以根据自己想要而设置样式,如图: 一、ElementUi的Tabs样式 链接:Tabs 标签页 | Element Plus 基础: 选…...
制作一款打飞机游戏23:编辑器ui
今天,我想重点介绍编辑器的实际用户界面(UI)。 关于Excel的讨论 很多人使用Excel来编辑他们程序的数据,因为大多数时候它都能很好地完成工作。Excel就像是一把瑞士军刀,可以修改各种数据。但是,在某些情况…...
课程9. 机器翻译,Seq2Seq与Attention
课程9. 机器翻译,Seq2Seq与Attention 机器翻译的任务. Seq2Seq 架构通过实战理解加载和预处理数据构建 Seq2Seq 模型编码器解码器Seq2Seq网络训练 Seq2Seq 架构问题注意力机制(Attention)注意选项Transformer 架构介绍——BERT 课程计划 机器…...
ASP.NET MVC 入门指南二
9. 表单处理与提交 9.1 创建表单视图 在视图文件夹下创建一个用于创建产品的视图,如 Create.cshtml: html model YourNamespace.Product{ViewBag.Title "创建产品"; }<h2>创建产品</h2>using (Html.BeginForm()) {Html.Anti…...
JavaWeb学习打卡-Day3-MyBatis相关
MyBatis 什么是MyBatis? MyBatis是一款优秀的持久层框架,用于简化JDBC的开发。MyBatis免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。 JDBC JDBC(Java DataBase Connectivity):使用Java语言操作关系型数据库的…...
浅谈AI Agent 演进之路
1、了解下 AI Agent 的定义 AI Agent(人工智能代理)简单来说是一种能够感知环境、进行决策和执行动作的智能实体。与传统的人工智能相比,AI Agent 具备独立思考和调用工具逐步完成目标的能力。 例如:当要求 AI Agent 帮助下单外…...
佳博票据和标签打印:Web网页端与打印机通信 | iOS
文章目录 引言I Web网页端与打印机通信webSDK(包含示例页)打印测试II iOS与佳博打印机通信引言 佳博工具下载ESC是票据打印指令,TSC是标签打印指令 工业打印机:佳博GP-H430F工业机标签条码打印机物流快递电子面单条码机碳带机 应用场景:打印商品价格标签、打印交易小票 I…...
视频噪点多,如何去除画面噪点?
你是否遇到过这样的困扰?辛辛苦苦拍摄的视频,导出后却满屏 “雪花”,夜景变 “噪点盛宴”,低光环境秒变 “马赛克现场”? 无论是日常拍摄的vlog、珍贵的家庭录像,还是专业制作的影视作品,噪点问…...
微信小程序直传阿里云 OSS 实践指南(V4 签名 · 秒传支持 · 高性能封装)
文章目录 前言一、为什么要使用直传 OSS?二、整体架构与实现思路三、阿里云 OSS 配置(V4 签名)1. 权限设置2. 后端生成签名参数(返回给小程序) 四、微信小程序端上传流程(功能模块拆解与封装)第…...
云原生--核心组件-容器篇-1-Docker和云原生关系(Docker是云原生的基石)
1、基本概念 (1)、云原生(Cloud Native) 是一种构建和运行应用程序的方法论,旨在充分利用云计算环境(公有云、私有云、混合云)的特性,通过容器化、微服务、服务网格、声明式API等技…...
GAEA情感坐标背后的技术原理
基于GAEA的去中心化物理基础设施网络(DePIN),用户有机会在GAEA平台上获得宝贵的数据共享积分。为了提升这些洞察的丰富性,用户必须花费一定数量的积分,将过去的网络数据与当前的情感数据绑定,从而产生一种新…...
day01_编程语言介绍丶Java语言概述丶开发环境搭建丶常用DOS命令
编程语言介绍 编程语言是一种用于人与计算机之间通信的语言,允许程序员编写代码,这些代码告诉计算机要执行哪些操作。编程语言可以被视为计算机可以理解并执行的指令集合,它是一种标准化的交流技巧,用于向计算机发出指令。…...
STM32系列官方标准固件库的完整下载流程
一、官网导航与版本确认 访问ST官网 打开浏览器进入 ST官网,点击左侧 “工具与软件” 标签,展开后选择 “嵌入式软件” 。若页面未直接显示,可在搜索框输入“STM32 Standard Peripheral Libraries”查找。 → “STM32标准外设库”࿰…...
Android 14 系统统一修改app启动时图标大小和圆角
Android 14 统一修改app启动时图标大小和圆角 修改如下: 目录:frameworks/base/core/java/android/window/SplashScreenView.java frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/startingsurface/SplashscreenContentDrawer.ja…...
MySQL 详解之函数:数据处理与计算的利器
在 MySQL 中,函数可以接受零个或多个输入参数,并返回一个值。这些函数可以在 SELECT 语句的字段列表、WHERE 子句、HAVING 子句、ORDER BY 子句以及 UPDATE 和 INSERT 语句中使用。合理利用函数,可以简化 SQL 语句,提高开发效率。 MySQL 提供了大量的内置函数 (Built-in F…...
Tailwind CSS 实战:基于 Kooboo 构建企业官网页面(一)
目录 一、技术选型:为什么选择Tailwind Kooboo? 二、CDN方案 vs 传统安装 三、CDN方式实战步骤 一、技术选型:为什么选择Tailwind Kooboo? 1.1 黄金组合优势 Tailwind CSS:原子化CSS框架,提供&#x…...
Java基础 — 条件结构与随机数
介绍 Java条件结构与随机数是程序逻辑控制的重要工具。条件结构通过if-else和switch实现分支判断:if(条件){代码}用于单分支,else if添加多条件判断,switch则基于固定值匹配不同case。随机数生成常用两种方式:Math.random()方法返…...
AI网络渗透kali应用(gptshell)
kali安装gptshell 一、shellGPT 工具介绍 ShellGPT是一款由AI大型语言模型(LLM)驱动的终端命令行工具。它能帮助用户直接在终端与AI交互,自动生成、解释、执行各类 Linux 命令,大大提升了运维和开发效率。ShellGPT 支持接入 O…...
如何实现Android屏幕和音频采集并启动RTSP服务?
技术背景 在移动直播和视频监控领域,实现高效的屏幕和音频采集并提供流媒体服务是关键技术之一。本文将详细介绍如何基于大牛直播SDK实现Android屏幕和麦克风/扬声器采集,并启动轻量级RTSP服务以对外提供拉流的RTSP URL。在Android平台上,轻…...
大模型提示词如何编写
一、提示词的核心三要素 明确目标(What) 告诉 AI「你要它做什么」,越具体越好。 ❌ 模糊:写一篇文章 ✅ 清晰:写一篇 800 字的高考作文,主题 “坚持与创新”,结构分引言、三个论点(…...
Serverless 在云原生后端的实践与演化:从函数到平台的革新
📝个人主页🌹:慌ZHANG-CSDN博客 🌹🌹期待您的关注 🌹🌹 一、引言:从服务器到“无服务器”的后端演变 在传统后端开发中,我们需要为服务配置并维护服务器资源,无论是物理机、虚拟机还是容器化服务,都需要: 管理系统运行环境 监控负载与扩缩容 保证高可用与安…...
反爬虫机制中的验证码识别:类型、技术难点与应对策略
在互联网数据抓取领域,验证码识别是爬虫过程中的关键环节之一。下面对常见验证码类型、技术难点及应对策略进行详细解析,并提供多种场景下的代码实现示例。 一、验证码类型与技术难点 (一)图形验证码 1. 字符验证码 特征&#…...
.NET 10 中的新增功能
.NET 运行时 .NET 10 运行时引入了新功能和性能改进。 关键更新包括: 数组接口方法反虚拟化:JIT 现在可以取消虚拟化和内联数组接口方法,从而提高数组枚举的性能。数组枚举去抽象化:改进功能以通过枚举器减少数组迭代的抽象开销…...
通过音频的pcm数据格式利用canvas绘制音频波形图
上面是一个完整的音频的波形图,可以大概知道音频整个的简略信息 数据准备:需要有这个音频的pcm数据,也就是时域采样值,每个数字代表某一时刻音频波形的振幅。 <!DOCTYPE html> <html lang"en"> <head&…...
Dubbo负载均衡策略深度解析
互联网大厂Java求职者面试:Dubbo负载均衡策略详解 第一轮提问: 面试官:马架构,您好!请问您了解Dubbo的负载均衡策略吗?Dubbo支持哪些负载均衡策略呢? 马架构:您好!Dub…...
【高频考点精讲】async/await原理剖析:Generator和Promise的完美结合
async/await原理剖析:Generator和Promise的完美结合 今天咱们聊聊async/await,这玩意儿用起来是真香,但你知道它背后是怎么运作的吗?其实它就是Generator和Promise的"爱情结晶"。 1. 先搞懂Generator Generator&…...
量子加密通信技术及其应用:构建无条件安全的通信网络
一、引言 在数字化时代,信息安全成为全球关注的焦点。随着量子计算技术的快速发展,传统的加密算法面临着前所未有的挑战。量子加密通信技术应运而生,它利用量子力学的基本原理,如量子叠加态和量子纠缠,实现了无条件安全…...
软考中级-软件设计师 知识点速过1(手写笔记)
第一章:数值及其转换 没什么可说的,包括二进制转八进制和十六进制 第二章:计算机内部数据表示 真值和机器数: 原码(后面都拿x 19举例) : 反码: 补码: 移码: 定点数&…...
【prompt是什么?有哪些技巧?】
Prompt(提示词)是什么? Prompt 是用户输入给AI模型(如ChatGPT、GPT-4等)的指令或问题,用于引导模型生成符合预期的回答。它的质量直接影响AI的输出效果。 Prompt 的核心技巧 1. 明确目标(Clar…...
C++进阶----多态
目录 引言1.多态的概念2.多态的定义及实现2.1 多态的构成条件2.2虚函数2.3 虚函数的重写2.4 关键字override和final2.5 重载、覆盖(重写)、隐藏对比 3.抽象类3.1 抽象类概念 4.多态的原理4.1 虚函数表4.2虚函数表的底层4.3多态的原理4.4 动态绑定和静态绑…...
银发科技:AI健康小屋如何破解老龄化困局
随着全球人口老龄化程度的不断加深,如何保障老年人的健康、提升他们的生活质量,成为了社会各界关注的焦点。 在这场应对老龄化挑战的战役中,智绅科技顺势而生,七彩喜智慧养老系统构筑居家养老安全网。 而AI健康小屋作为一项创新…...
【黑马 微服务面试篇】
分布式事务 cap定理-Availability CAP定理-Partition tolerance BASE理论 BASE理论是对CAP的一种解决思路,包含三个思想: BasicallyAvailable(基本可用):分布式系统在出现故障时,允许损失部分可用性&#…...
斗鱼娱乐电玩平台源码搭建实录
在本篇文章中,我们将以技术人的角度详细拆解一款风格接近850平台的斗鱼娱乐电玩系统源码,包含完整服务器端、前台补全资源和双端APP构建流程。基于七月最新更新内容,本教程将突出技术关键点、实战配置与代码示范,旨在为开发者和搭…...
缓存与数据库一致性深度解析与解决方案
缓存与数据库一致性深度解析与解决方案 一、一致性问题本质与挑战 1. 核心矛盾分析 缓存与数据库一致性问题源于数据存储的异步性与分布性,核心挑战包括: 读写顺序不确定性:并发场景下写操作顺序可能被打乱(如先写缓存后写数据…...
Flutter 弹窗队列管理:支持优先级的线程安全通用弹窗队列系统
在复杂的 Flutter 应用开发中,弹窗管理是一个常见难题。手动管理弹窗的显示顺序和条件判断不仅繁琐,还容易出错。为此,我们实现了一个支持优先级的线程安全通用弹窗队列管理系统。它能够自动管理弹窗的显示顺序,支持条件判断&…...
【Langchain】RAG 优化:提高语义完整性、向量相关性、召回率--从字符分割到语义分块 (SemanticChunker)
RAG 优化:提高语义完整性、向量相关性、召回率–从字符分割到语义分块 (SemanticChunker) 背景:提升 RAG 检索质量 在构建基于知识库的问答系统(RAG)时,如何有效地将原始文档分割成合适的文本块(Chunks&a…...
Linux 官方蓝牙协议栈 BlueZ 第一篇:入门与架构概览
Linux 官方蓝牙协议栈 BlueZ,包含内核驱动、用户态守护进程和 DBus 接口,支持 Classic Bluetooth 和 BLE。本篇将从协议栈演进、架构组件、安装调试、核心流程和开发入门五个角度,结合 PlantUML 图、C/Python 代码示例,帮助你全面掌握 BlueZ 基础。 目录 协议栈演进与概念 …...
多层级的对象如何修改、或json格式
场景: 对象有多层级,一层套一层,list套对象,对象套list。 现在需要修改期中一个list的内容,怎么弄呢? 注:每一层都new一个新list再set不可取,太麻烦,看起来乱而且还容易错。 最好…...
产品动态|千眼狼sCMOS科学相机捕获单分子荧光信号
单分子荧光成像技术,作为生物分子动态研究的关键工具,对捕捉微弱信号要求严苛。传统EMCCD相机因成本高昂,动态范围有限,满阱容量低等问题,制约单分子研究成果产出效率。 千眼狼精准把握科研需求与趋势,自研…...
VsCode如何使用默认程序打开word Excel pdf等文件
如何使用在VsCode使用默认程序打开文件? 1.在插件市场里搜open插件并安装 2.安装完后,右键文件打开,点击Open with default application,就可以了 是不是非常方便!!!...
【T-MRMSM】文本引导多层次交互多尺度空间记忆融合多模态情感分析
在特征提取的部分用了k-means abstract (背景) 近年来,随着多模态数据量的迅速增加,多模态情感分析(MSA)越来越受到关注.该方法通过整合不同数据模态间的信息,提高了情感极性提取的准确性,从而实现了信息的全面融合,提高了情感分析的精度。 (针对创新处的不足) …...
python pymysql如何保证数据库更新成功
python pymysql如何保证数据库更新成功 在使用Python的PyMySQL库与MySQL数据库交互时,确保数据库更新操作成功执行,可以通过以下几种方式: 使用execute()和commit() 当执行一个更新(UPDATE)、插入(INSERT)或删除(DELETE)操作时,你需要调用execute()方法来执行SQL语句…...