多点电容触摸屏实验
目录
一、简介
二、硬件原理
编辑1、CT_INT
2、I2C2_SCL和I2C2_SDA
3、RESET复位引脚
三、FT54x6/FT52x6电容触摸芯片
四、代码编写
1、编写ft5426.h
2、编写ft5426.c
3、main函数
一、简介
电容屏只需要手指轻触即可,而电阻屏是需要手指给予一定的压力才有反应,而且电容触摸芯片输出的触摸点坐标信息为对应的屏幕像素点信息,因此不需要校准,电阻屏需要校准。如今多点电容触摸屏已经得到了广泛的应用,手机、平板、电脑、广告机等等,如果要做人机交互设备的开发,多点电容触摸屏基本是不可能绕过去的
电容触摸屏需要一个IC驱动控制的,一般是I2C接口,多点触摸屏驱动最终就是一个I2C外设驱动
二、硬件原理
找到RGB的原理图
1、CT_INT
触摸中断线

连接到了GPIO1_IO09,查数据手册

可以复用为GPIO1_IO09
2、I2C2_SCL和I2C2_SDA

I2C2_SCL:连接到了UART5_TXD;I2C2_SDA:连接到了UART5_RXD,查数据手册


都可以复用
3、RESET复位引脚

连接到了SNVS_TAMPER9,查数据手册

可以看到就复位为GPIO5_IO09
三、FT54x6/FT52x6电容触摸芯片
使用到的部分寄存器如下
| 寄存器地址 | 位 | 寄存器功能 | 描述 |
| 0X00 | [6:4] | 模式寄存器 | 设置 FT5426 的工作模式: 000:正常模式。001:系统信息模式100:测试模式。 |
| 0X02 | [3:0] | 触摸状态寄存器 | 记录有多少个触摸点,有效值为 1~5。 |
| 0X03 | [7:6] | 第一个触摸点 X 坐标高位数据 | 事件标志: 00:按下。01:抬起10:接触11:保留 |
| [3:0] | X 轴坐标值高 4 位。 |
| 0X04 | [7:0] | 第一个触摸点 X 坐标低位数据 | X 轴坐标值低 8 位 |
| 0X05 | [7:4] | 第一个触摸点 Y 坐标高位数据 | 触摸点的 ID。 |
| [3:0] | Y 轴坐标高 4 位 | ||
| 0X06 | [7:0] | 第一个触摸点 Y 坐标低位数据 | Y 轴坐标低 8 位 |
| 0X09 | [7:6] | 第二个触摸点 X 坐标高位数据 | 与寄存器 0X03 含义相同。 |
| [3:0] | |||
| 0X0A | [7:0] | 第二个触摸点 X 坐标低位数据 | 与寄存器 0X04 含义相同。 |
| 0X0B | [7:4] | 第二个触摸点 Y 坐标高位数据 | 与寄存器 0X05 含义相同。 |
| [3:0] | |||
| 0X0C | [7:0] | 第二个触摸点 Y 坐标低位数据 | 与寄存器 0X06 含义相同 |
| 0X0F | [7:6] | 第三个触摸点 X 坐标高位数据 | 与寄存器 0X03 含义相同。 |
| [3:0] | |||
| 0X10 | [7:0] | 第三个触摸点 X 坐标低位数据 | 与寄存器 0X04 含义相同。 |
| 0X11 | [7:4] | 第三个触摸点 Y 坐标高位数据 | 与寄存器 0X05 含义相同。 |
| [3:0] | |||
| 0X12 | [7:0] | 第三个触摸点 Y 坐标低位数据 | 与寄存器 0X06 含义相同 |
| 0X15 | [7:6] | 第四个触摸点 X 坐标高位数据 | 与寄存器 0X03 含义相同。 |
| [3:0] | |||
| 0X16 | [7:0] | 第四个触摸点 X 坐标低位数据 | 与寄存器 0X04 含义相同。 |
| 0X17 | [7:4] | 第四个触摸点 Y 坐标高位数据 | 与寄存器 0X05 含义相同。 |
| [3:0] | |||
| 0X18 | [7:0] | 第四个触摸点 Y 坐标低位数据 | 与寄存器 0X06 含义相同 |
| 0X1B | [7:6] | 第五个触摸点 X 坐标高位数据 | 与寄存器 0X03 含义相同。 |
| [3:0] | |||
| 0X1C | [7:0] | 第五个触摸点 X 坐标低位数据 | 与寄存器 0X04 含义相同。 |
| 0X1D | [7:4] | 第五个触摸点 Y 坐标高位数据 | 与寄存器 0X05 含义相同。 |
| [3:0] | |||
| 0X1E | [7:0] | 第五个触摸点 Y 坐标低位数据 | 与寄存器 0X06 含义相同 |
| 0XA1 | [7:0] | 版本寄存器 | 版本高字节 |
| 0XA2 | [7:0] | 版本低字节 | |
| 0XA4 | [7:0] | 中断模式寄存器 | 用于设置中断模式: 0:轮询模式1:触发模式 |
这里使用设备的IIC地址为0X38
四、代码编写
创建文件

1、编写ft5426.h
#ifndef __BSP_FT5426_H
#define __BSP_FT5426_H#include "imx6ul.h"
#include "bsp_gpio.h"
#include "bsp_int.h"
#include "bsp_delay.h"
#include "bsp_i2c.h"
#include "stdio.h"/*寄存器宏*/
#define FT5426_ADDR 0X38 /* FT5426设备地址 */#define FT5426_DEVICE_MODE 0X00 /* 模式寄存器 */
#define FT5426_IDGLIB_VERSION 0XA1 /* 固件版本寄存器 */
#define FT5426_IDG_MODE 0XA4 /* 中断模式 */
#define FT5426_TD_STATUS 0X02 /* 触摸状态寄存器 */
#define FT5426_TOUCH1_XH 0X03 /* 触摸点坐标寄存器,* 一个触摸点用4个寄存器存储坐标数据*/#define FT5426_XYCOORDREG_NUM 30 /* 触摸点坐标寄存器数量 */
#define FT5426_INIT_FINISHED 1 /* 触摸屏初始化完成 */
#define FT5426_INIT_NOTFINISHED 0 /* 触摸屏初始化未完成 */#define FT5426_TOUCH_EVENT_DOWN 0x00 /* 按下 */
#define FT5426_TOUCH_EVENT_UP 0x01 /* 释放 */
#define FT5426_TOUCH_EVENT_ON 0x02 /* 接触 */
#define FT5426_TOUCH_EVENT_RESERVED 0x03 /* 没有事件 *//* 触摸屏结构体 */
struct ft5426_dev_struc
{ unsigned char initfalg; /* 触摸屏初始化状态 */unsigned char intflag; /* 标记中断有没有发生 */unsigned char point_num; /* 触摸点 */unsigned short x[5]; /* X轴坐标 */unsigned short y[5]; /* Y轴坐标 */};extern struct ft5426_dev_struc ft5426_dev;void ft5426_init();
void gpio1_io09_irqhandler(unsigned int gicciar,void *param);
unsigned char ft5426_writeonebyte(unsigned char addr,unsigned char reg, unsigned char data);
unsigned char ft5426_readonebyte(unsigned char addr,unsigned char reg);
void ft5426_read_len(unsigned char addr,unsigned char reg,unsigned char len,unsigned char *buf);
void ft5426_read_tpcoord();
#endif
2、编写ft5426.c
#include "bsp_ft5426.h"struct ft5426_dev_struc ft5426_dev;
/*初始化5426*/
void ft5426_init()
{unsigned char reg_value[2];/* 1、初始化IIC2 IO* I2C2_SCL -> UART5_TXD* I2C2_SDA -> UART5_RXD*/IOMUXC_SetPinMux(IOMUXC_UART5_TX_DATA_I2C2_SCL,1);/*复用为I2C2_SCL*/IOMUXC_SetPinMux(IOMUXC_UART5_RX_DATA_I2C2_SDA,1);/*复用为I2C2_SDA*//* 配置I2C2 IO属性 *bit 16:0 HYS关闭*bit [15:14]: 1 默认47K上拉*bit [13]: 1 pull功能*bit [12]: 1 pull/keeper使能 *bit [11]: 0 关闭开路输出*bit [7:6]: 10 速度100Mhz*bit [5:3]: 110 驱动能力为R0/6*bit [0]: 1 高转换率*/IOMUXC_SetPinConfig(IOMUXC_UART5_TX_DATA_I2C2_SCL,0x70b0);IOMUXC_SetPinConfig(IOMUXC_UART5_RX_DATA_I2C2_SDA,0x70b0);/*初始化INT引脚,使能中断*/gpio_pin_config_t ctint_config;IOMUXC_SetPinMux(IOMUXC_GPIO1_IO09_GPIO1_IO09,0);/*复用为GPIO1_IO09*/IOMUXC_SetPinConfig(IOMUXC_GPIO1_IO09_GPIO1_IO09,0xf080);/* 中断IO初始化 */ctint_config.direction =kGPIO_IntRisingOrFallingEdge;gpio_init(GPIO1 , 9 , &ctint_config);GIC_EnableIRQ(GPIO1_Combined_0_15_IRQn);system_register_irqhandler(GPIO1_Combined_0_15_IRQn,(system_irq_handler_t)gpio1_io09_irqhandler,NULL);gpio_enableint(GPIO1 , 9);/*复位引脚rst初始化*/gpio_pin_config_t ctrst_config;IOMUXC_SetPinMux(IOMUXC_SNVS_SNVS_TAMPER9_GPIO5_IO09,0);/*复用为GPIO5_IO09*/IOMUXC_SetPinConfig(IOMUXC_SNVS_SNVS_TAMPER9_GPIO5_IO09,0x10b0);gpio_init(GPIO5 , 9 , &ctrst_config);gpio_pinwrite(GPIO5 , 9 , 0);/*复位*/delayms(50);gpio_pinwrite(GPIO5 , 9 , 1);/*停止复位*/delayms(50);/*I2C2初始化*/i2c_init(I2C2);/*ft5426初始化*/ft5426_read_len(FT5426_ADDR,FT5426_IDGLIB_VERSION,2,reg_value);printf("touch frimware version:%#x\r\n",((unsigned short)reg_value[0] << 8) | reg_value[1]);/*设置工作在正常模式*/ft5426_writeonebyte(FT5426_ADDR,FT5426_DEVICE_MODE,0);/*设置中断模式*/ft5426_writeonebyte(FT5426_ADDR,FT5426_IDG_MODE,1);ft5426_dev.initfalg = FT5426_INIT_FINISHED;}
/*中断处理函数*/
void gpio1_io09_irqhandler(unsigned int gicciar , void *param)
{if(ft5426_dev.initfalg == FT5426_INIT_FINISHED){ft5426_read_tpcoord();}/*清除中断标志位*/gpio_clearintflags(GPIO1,9);
}
/*向FT5426写入数据*/
unsigned char ft5426_writeonebyte(unsigned char addr,unsigned char reg, unsigned char data)
{unsigned char status=0;unsigned char writedata=data;struct i2c_transfer masterXfer;/* 配置I2C xfer结构体 */masterXfer.slaveAddress = addr; /* 设备地址 */masterXfer.direction = kI2C_Write; /* 写入数据 */masterXfer.subaddress = reg; /* 要写入的寄存器地址 */masterXfer.subaddressSize = 1; /* 地址长度一个字节 */masterXfer.data = &writedata; /* 要写入的数据 */masterXfer.dataSize = 1; /* 写入数据长度1个字节 */if(i2c_master_transfer(I2C2, &masterXfer))status=1;return status;
}
/*从FT5426读数据*/
unsigned char ft5426_readonebyte(unsigned char addr,unsigned char reg)
{unsigned char val=0;struct i2c_transfer masterXfer; masterXfer.slaveAddress = addr; /* 设备地址 */masterXfer.direction = kI2C_Read; /* 读取数据 */masterXfer.subaddress = reg; /* 要读取的寄存器地址 */masterXfer.subaddressSize = 1; /* 地址长度一个字节 */masterXfer.data = &val; /* 接收数据缓冲区 */masterXfer.dataSize = 1; /* 读取数据长度1个字节 */i2c_master_transfer(I2C2, &masterXfer);return val;
}
/*从FT5426读多个寄存器数据*/
void ft5426_read_len(unsigned char addr,unsigned char reg,unsigned char len,unsigned char *buf)
{struct i2c_transfer masterXfer; masterXfer.slaveAddress = addr; /* 设备地址 */masterXfer.direction = kI2C_Read; /* 读取数据 */masterXfer.subaddress = reg; /* 要读取的寄存器地址 */masterXfer.subaddressSize = 1; /* 地址长度一个字节 */masterXfer.data = buf; /* 接收数据缓冲区 */masterXfer.dataSize = len; /* 读取数据长度1个字节 */i2c_master_transfer(I2C2, &masterXfer);
}
/*读取触摸坐标信息*/
void ft5426_read_tpcoord()
{unsigned char pointbuf[FT5426_XYCOORDREG_NUM],i=0,type=0;ft5426_dev.point_num = ft5426_readonebyte(FT5426_ADDR,FT5426_TD_STATUS);printf("touch num = %d\r\n",ft5426_dev.point_num);/*触摸点信息寄存器*/ft5426_read_len(FT5426_ADDR,FT5426_TOUCH1_XH,FT5426_XYCOORDREG_NUM,pointbuf);for(i=0;i<ft5426_dev.point_num;i++){unsigned char *buf = &pointbuf[i*6];ft5426_dev.y[i] = ((buf[0] << 8) | buf[1]) & 0xfff;ft5426_dev.x[i] = ((buf[2] << 8) | buf[3]) & 0xfff;type = buf[0] >> 6;if(type == FT5426_TOUCH_EVENT_DOWN){}else if(type == FT5426_TOUCH_EVENT_UP){}else if(type == FT5426_TOUCH_EVENT_ON){}else{}}}
3、main函数
#include "bsp_clk.h"
#include "bsp_delay.h"
#include "bsp_led.h"
#include "bsp_beep.h"
#include "bsp_key.h"
#include "bsp_int.h"
#include "bsp_uart.h"
#include "bsp_lcd.h"
#include "bsp_lcdapi.h"
#include "bsp_rtc.h"
#include "bsp_icm20608.h"
#include "bsp_spi.h"
#include "stdio.h"
#include "bsp_ft5426.h"
#include "bsp_gt9147.h"/** @description : main函数* @param : 无* @return : 无*/
int main(void)
{unsigned char i = 0;unsigned char state = OFF;int_init(); /* 初始化中断(一定要最先调用!) */imx6u_clkinit(); /* 初始化系统时钟 */delay_init(); /* 初始化延时 */clk_enable(); /* 使能所有的时钟 */led_init(); /* 初始化led */beep_init(); /* 初始化beep */uart_init(); /* 初始化串口,波特率115200 */lcd_init(); /* 初始化LCD */ /* 初始化触摸屏 */ gt9147_init();if(gt_init_fail==1) //判断gt系列初始化是否失败{ft5426_init();}tftlcd_dev.forecolor = LCD_RED;lcd_show_string(50, 10, 400, 24, 24, (char*)"ALPHA-IMX6UL TOUCH TEST"); /* 显示字符串 */lcd_show_string(50, 40, 200, 16, 16, (char*)"MY@4384"); lcd_show_string(50, 60, 200, 16, 16, (char*)"2023/2/22"); lcd_show_string(50, 110, 400, 16, 16, (char*)"TP Num :"); lcd_show_string(50, 130, 200, 16, 16, (char*)"Point0 X:"); lcd_show_string(50, 150, 200, 16, 16, (char*)"Point0 Y:"); lcd_show_string(50, 170, 200, 16, 16, (char*)"Point1 X:"); lcd_show_string(50, 190, 200, 16, 16, (char*)"Point1 Y:"); lcd_show_string(50, 210, 200, 16, 16, (char*)"Point2 X:"); lcd_show_string(50, 230, 200, 16, 16, (char*)"Point2 Y:"); lcd_show_string(50, 250, 200, 16, 16, (char*)"Point3 X:"); lcd_show_string(50, 270, 200, 16, 16, (char*)"Point3 Y:"); lcd_show_string(50, 290, 200, 16, 16, (char*)"Point4 X:"); lcd_show_string(50, 310, 200, 16, 16, (char*)"Point4 Y:"); while(1) {lcd_shownum(50 + 72, 110, ft5426_dev.point_num , 1, 16);lcd_shownum(50 + 72, 130, ft5426_dev.x[0], 5, 16);lcd_shownum(50 + 72, 150, ft5426_dev.y[0], 5, 16);lcd_shownum(50 + 72, 170, ft5426_dev.x[1], 5, 16);lcd_shownum(50 + 72, 190, ft5426_dev.y[1], 5, 16);lcd_shownum(50 + 72, 210, ft5426_dev.x[2], 5, 16);lcd_shownum(50 + 72, 230, ft5426_dev.y[2], 5, 16);lcd_shownum(50 + 72, 250, ft5426_dev.x[3], 5, 16);lcd_shownum(50 + 72, 270, ft5426_dev.y[3], 5, 16);lcd_shownum(50 + 72, 290, ft5426_dev.x[4], 5, 16);lcd_shownum(50 + 72, 310, ft5426_dev.y[4], 5, 16);delayms(10);i++; if(i == 50){ i = 0;state = !state;led_switch(LED0,state); }}return 0;
}
烧写到sd卡插到开发版上后就触摸,就会显示多少个触摸点和相关触摸点的坐标
相关文章:
多点电容触摸屏实验
目录 一、简介 二、硬件原理 编辑1、CT_INT 2、I2C2_SCL和I2C2_SDA 3、RESET复位引脚 三、FT54x6/FT52x6电容触摸芯片 四、代码编写 1、编写ft5426.h 2、编写ft5426.c 3、main函数 一、简介 电容屏只需要手指轻触即可,而电阻屏是需要手指给予一定的压力才…...
【算法与数据结构(C语言)】栈和队列
文章目录 目录 前言 一、栈 1.栈的概念及结构 2.栈的实现 入栈 出栈 获取栈顶元素 获取栈中有效元素个数 检测栈是否为空,如果为空返回非零结果,如果不为空返回0 销毁栈 二、队列 1.队列的概念及结构 2.队列的实现 初始化队列 队尾入队列 队头出队列 获…...
Uni-app使用vant和uview组件
目录 1.安装vant组件 1.1安装前需知 1.2.安装 1.3.创建uni-app项目 2.安装uview-ui组件 2.1官网 2.2安装 2.3安装成功 1.安装vant组件 1.1安装前需知 小程序能使用vant-weapp组件,且官网的安装是直接导入小程序中,不能直接导入uni-app框架中 V…...
2023年PMP考试应该注意些什么?
首先注意(报考条件) 2023年PMP考试报名流程: 一、PMP英文报名: 英文报名时间无限制,随时可以报名,但有一年的有效期,所以大家尽量提前报名,在英文报名有效期内进行中文报名。 英…...
selenium环境安装及使用
selenium简介官网https://www.selenium.dev简介用于web浏览器测试的工具支持的浏览器包括IE,Firefox,Chrome,edge等使用简单,可使用java,python等多种语言编写用例脚本主要由三个工具构成,webdriver,IDE,web自动化环境…...
高性能低功耗4口高速USB2.0 HUB 完美替代FE1.1S和FE8.1
该NS1.1s是一个高度集成的,高品质,高性能,低功耗,为USB 2.0高速4端口集线器又低成本的解决方案。 (点击即可咨询芯片详细信息) NS1.1s的特点 1.通用串行总线规范修订版2.0(USB 2.0)完…...
Go全栈学习(一)基础语法
Go语言基础语法 文章目录Go语言基础语法注释变量变量的定义变量的交换理解变量(内存地址)匿名变量变量的作用域常量2023.2.4日 总结// 关于Goland 中 执行的问题// 1、包下执行 (一个 main 函数来执行,如果有多个,无法…...
centos7搭建svn配置
基本概述 Apache Subversion(简称SVN,svn),一个开放源代码的版本控制系统,相较于RCS、CVS,它采用了分支管理系统,它的设计目标就是取代CVS。互联网上很多版本控制服务已从CVS转移到Subversion。…...
趣味三角——第12章——tanx
第12章节 tanx In his very numerous memoires, and especially in his great work, Introductio in analysin infinitorum (1748), Euler displayed the most wonderful skill in obtaining a rich harvest of results of great interest. . . . Hardly any other work …...
Java - 数据结构,栈
一、栈 1.1、什么是栈 栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈 顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。 压…...
某餐厅系统网络故障分析案例
背景 针对食堂经营企业,某堂食软件为客户提供优化堂食就餐流程、提高食堂服务水平和管理效率。 某上海客户使用该堂食系统,在就餐高峰时段,总是出现支付、点餐等操作缓慢,动辄一个操作需要等待几十秒。该客户联系软件厂商&#…...
华为OD机试题,用 Java 解【密室逃生游戏】问题
最近更新的博客 华为OD机试 - 猴子爬山 | 机试题算法思路 【2023】华为OD机试 - 分糖果(Java) | 机试题算法思路 【2023】华为OD机试 - 非严格递增连续数字序列 | 机试题算法思路 【2023】华为OD机试 - 消消乐游戏(Java) | 机试题算法思路 【2023】华为OD机试 - 组成最大数…...
如何重命名SQL Server数据库
重命名SQL Server数据库 使用T-SQL重命名SQL Server数据库使用分离和附加重命名SQL Server数据库使用T-SQL查询分离和重新连接在SSMS中分离和重新连接通过SSMS重命名SQL Server数据库当使用SQL数据库很长一段时间时,你可能会遇到需要为数据库命名的情况。它可以用几种不同的方…...
联想昭阳E5-ITL电脑开机后绿屏怎么U盘重装系统?
联想昭阳E5-ITL电脑开机后绿屏怎么U盘重装系统?有用户电脑正常开机之后,出现了屏幕变成绿屏,无法进行操作的情况。这个问题是系统出现了问题,那么如何去进行问题的解决呢?接下来我们一起来分享看看如何使用U盘重装电脑…...
车载开发知识交流【学习路线】
前言 在2023国内百废待兴;经济复苏的号召一直在响应,这对于压抑了三年的人民来说无疑是福音。这篇我们主要说一下拉动经济的其中大板块——车企;我们知道我们最大的经济除了房地产,第二就是车企。而在造车领域中也不断的加入了许…...
【读书笔记】《深入浅出数据分析》第二章 检验你的理论
文章目录一,相关分析方法1,相关系数二,相关性不等于因果关系三,证明因果关系,“控制变量法”?本章主要说明了两个问题: 1,相关性不等于因果关系 2,如何判断两种数据之间是相关性&am…...
pyflink学习笔记(一):table_apisql
具体定义请参考官方文档:https://nightlies.apache.org/flink/flink-docs-release-1.16/zh/docs/dev/table/overview/本文主要针对实际使用中比较常用的api进行整理,大多数例子都是官网,如有歧义可与官方对照。一、 创建 TableEnvironmentTab…...
GCC 编译器套件说明
写在前面: 本文章旨在总结备份、方便以后查询,由于是个人总结,如有不对,欢迎指正;另外,内容大部分来自网络、书籍、和各类手册,如若侵权请告知,马上删帖致歉。 目录GCC 简述GCC 主要…...
IDEA集成Git
1:IDEA集合Git1.1:配置Git忽略文件-IDEA特定文件问题 1:为什么要忽略他们?答: 与项目的实际功能无关, 不参与服务器上部署运行。把它们忽略掉能够屏蔽 IDE 工具之间的差异。问题 2:怎么忽略?1&a…...
算法流程图
里程计定位: 优:定位信息连续,无离散的跳跃 缺:存在累计误差,不利于长距或长期定位 传感器定位: 优:比里程计定位更精准 缺:会出现跳变情况,且传感器定位在标志物较少的环…...
HTML 语义化
目录 HTML 语义化HTML5 新特性HTML 语义化的好处语义化标签的使用场景最佳实践 HTML 语义化 HTML5 新特性 标准答案: 语义化标签: <header>:页头<nav>:导航<main>:主要内容<article>&#x…...
聊聊 Pulsar:Producer 源码解析
一、前言 Apache Pulsar 是一个企业级的开源分布式消息传递平台,以其高性能、可扩展性和存储计算分离架构在消息队列和流处理领域独树一帜。在 Pulsar 的核心架构中,Producer(生产者) 是连接客户端应用与消息队列的第一步。生产者…...
ESP32读取DHT11温湿度数据
芯片:ESP32 环境:Arduino 一、安装DHT11传感器库 红框的库,别安装错了 二、代码 注意,DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...
【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表
1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个生活电费的缴纳和查询小程序
一、项目初始化与配置 1. 创建项目 ohpm init harmony/utility-payment-app 2. 配置权限 // module.json5 {"requestPermissions": [{"name": "ohos.permission.INTERNET"},{"name": "ohos.permission.GET_NETWORK_INFO"…...
【Java学习笔记】BigInteger 和 BigDecimal 类
BigInteger 和 BigDecimal 类 二者共有的常见方法 方法功能add加subtract减multiply乘divide除 注意点:传参类型必须是类对象 一、BigInteger 1. 作用:适合保存比较大的整型数 2. 使用说明 创建BigInteger对象 传入字符串 3. 代码示例 import j…...
2025季度云服务器排行榜
在全球云服务器市场,各厂商的排名和地位并非一成不变,而是由其独特的优势、战略布局和市场适应性共同决定的。以下是根据2025年市场趋势,对主要云服务器厂商在排行榜中占据重要位置的原因和优势进行深度分析: 一、全球“三巨头”…...
2.3 物理层设备
在这个视频中,我们要学习工作在物理层的两种网络设备,分别是中继器和集线器。首先来看中继器。在计算机网络中两个节点之间,需要通过物理传输媒体或者说物理传输介质进行连接。像同轴电缆、双绞线就是典型的传输介质,假设A节点要给…...
LangChain【6】之输出解析器:结构化LLM响应的关键工具
文章目录 一 LangChain输出解析器概述1.1 什么是输出解析器?1.2 主要功能与工作原理1.3 常用解析器类型 二 主要输出解析器类型2.1 Pydantic/Json输出解析器2.2 结构化输出解析器2.3 列表解析器2.4 日期解析器2.5 Json输出解析器2.6 xml输出解析器 三 高级使用技巧3…...
2.2.2 ASPICE的需求分析
ASPICE的需求分析是汽车软件开发过程中至关重要的一环,它涉及到对需求进行详细分析、验证和确认,以确保软件产品能够满足客户和用户的需求。在ASPICE中,需求分析的关键步骤包括: 需求细化:将从需求收集阶段获得的高层需…...
