当前位置: 首页 > news >正文

android compose 串口通信

1.添加依赖

implementation("io.github.xmaihh:serialport:2.1.1")

2.添加SerialHelper派生类

class SerialPortHelper(portName:String,baudRate:Int): SerialHelper(portName,baudRate) {var receivedDataBuffer = mutableListOf<Byte>()override fun onDataReceived(paraComBean: ComBean?) {if(paraComBean!=null){var temp:ByteArray = paraComBean.bRec;receivedDataBuffer.addAll(temp.toList())//receivedDataBuffer.addAll(paraComBean.toList())}}init {setStickPackageHelper (object : AbsStickPackageHelper {override fun execute(isStream: InputStream?): ByteArray? {try {val available = isStream?.available()if (available != null) {if (available > 0) {val buffer = ByteArray(available)val size = isStream.read(buffer)if (size > 0) {return buffer}} else {// 若没有数据,等待50毫秒Thread.sleep(50)}}} catch (e: IOException) {e.printStackTrace()} catch (e: InterruptedException) {e.printStackTrace()}return null}})}}

3.创建串口处理类

class SericalCommunicate {var serialPort:SerialPortHelper? = null//var outputSeriaPort = mutableStateOf("/dev/ttyS0")var serialportName:MutableState<String> = mutableStateOf("/dev/ttyS0")var serialBaud:MutableState<Int> = mutableStateOf(115200)init {initSerialport()}@OptIn(ExperimentalStdlibApi::class)fun initSerialport(){try {serialPort = SerialPortHelper(serialportName.value,serialBaud.value)//SerialPort(File(serialportName.value),serialBaud.value,'N',8,)}catch (e:Exception){e.printStackTrace()}GlobalScope.launch {val buffer = ByteArray(1024)while(serialPort!=null){val reader = serialPort!!.receivedDataBufferif(reader!=null) {var length = reader!!.sizeif (length>0){val data = String(buffer, 0, length)var dataStr = data.toByteArray().toHexString()Log.d("scoreInfo", dataStr)}serialPort!!.receivedDataBuffer.clear()}delay(50)}}}fun SetSerialPara(){reConnectedSerial()}fun reConnectedSerial(){if(serialPort!=null) {serialPort?.close()serialPort = null}initSerialport()}fun sendDataFromSerialport(data:ByteArray){if(serialPort!=null){serialPort!!.send(data)}}}

相关文章:

android compose 串口通信

1.添加依赖 implementation("io.github.xmaihh:serialport:2.1.1") 2.添加SerialHelper派生类 class SerialPortHelper(portName:String,baudRate:Int): SerialHelper(portName,baudRate) {var receivedDataBuffer mutableListOf<Byte>()override fun onDa…...

Cursor无限续杯——解决Too many free trials.

前情提要 我们都知道Cursor对新用户是有14天且500条免费限制的。 一般情况下&#xff0c;当14天过期&#xff0c;是可以注销账户再重新注册&#xff0c;这样就可以继续拥有14天的体验时长。 但是&#xff01;&#xff01;如果使用超过500次&#xff0c;Cusor就会把你的电脑I…...

网络传输层TCP协议

传输层TCP协议 1. TCP协议介绍 TCP&#xff08;Transmission Control Protocol&#xff0c;传输控制协议&#xff09;是一个要对数据的传输进行详细控制的传输层协议。 TCP 与 UDP 的不同&#xff0c;在于TCP是有连接、可靠、面向字节流的。具体来说&#xff0c;TCP设置了一大…...

我的前端面试笔记(React篇)

1.React16 的 Fiber 是什么 fiber是react16的一种数据结构&#xff0c;用来描述每一个React 组件或 DOM 节点&#xff0c;并采用双向链表的存储结构。遍历节点的方式采用迭代遍历&#xff08;while循环&#xff09;&#xff0c;替代了以前的递归遍历。 fiber的优点 1&#xff…...

Qt 5.14.2 学习记录 —— 팔 QWidget 常用控件(3)

文章目录 1、cursor2、font3、toolTip4、focusPolicy5、styleSheeyt 1、cursor 改变鼠标光标形状。 在Qt Designer界面中&#xff0c;拖一个按钮过来&#xff0c;右边属性面用户可以自己改cursor属性。 代码方法&#xff0c;先拖一个按钮到界面上&#xff1a; #include <…...

HTTP协议和WebSocket协议

传统的HTTP协议是单向通信的&#xff0c;客户端若想要与服务器进行通信&#xff0c;首先需要通过三次握手与服务器建立TCP连接&#xff0c;然后再向服务器发送数据请求&#xff0c;当客户端收到服务器响应回来的数据后&#xff0c;就会断开TCP连接&#xff0c;每次数据请求都需…...

校园网断网自检测重链接

由于博主比较懒&#xff0c;所以经常喜欢在宿舍通过todesk远程控制工位电脑办公。但是由于交专的校园网经常断连&#xff0c;也不好意思一直麻烦同门帮忙连网&#xff0c;于是参考runepic博主的链接&#xff0c;实现了工位电脑的校园网断网自检测重链接功能。 参考链接&#xf…...

LAMP搭建

LAMP搭建 引子&#xff1a;本篇文章为LAMP的搭建流程&#xff0c;其中L&#xff08;Ubuntu&#xff09;、A&#xff08;Apache&#xff09;、M&#xff08;Mysql&#xff09;、P&#xff08;PHP&#xff09;。 一、L → Ubuntu Step 1&#xff1a;在Vmware Workstation中使…...

Sentinel-5P遥感数据下载及预处理教程【20250105】

Sentinel-5P是欧空局&#xff08;Europe Space Agency&#xff0c;ESA&#xff09;于2017年10月13日发射的一颗全球大气污染监测卫星。卫星搭载了对流层观测仪&#xff08;Tropospheric Monitoring Instrument&#xff0c;TROPOMI&#xff09;&#xff0c;可以有效的观测全球各…...

手写@MapperScan

定义一个EnableMapperScan注解 Import(MapperProxyHandlerRegister.class) 标注将MapperProxyHandlerRegister导入到容器中。 Target({ElementType.METHOD,ElementType.TYPE}) Retention(RetentionPolicy.RUNTIME) Import(MapperProxyHandlerRegister.class) public interface…...

【C++】深入理解迭代器(Iterator)

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 &#x1f4af;前言&#x1f4af;什么是迭代器&#xff1f;迭代器与指针的比较 &#x1f4af;std::string 中的迭代器示例代码与图示分析运行结果&#xff1a;图示说明&#xff1a; 小提示 &#x1f4af;正…...

后端Java开发:第十二天

第十二天&#xff1a;封装 - 理解与应用 欢迎来到今天的学习内容&#xff01;今天&#xff0c;我们将一起深入探讨 Java 中的 封装&#xff08;Encapsulation&#xff09;。封装是面向对象编程的四大基本特性之一&#xff0c;它的核心思想是把对象的状态&#xff08;属性&…...

记录一下Coding一直不能clone

配置 下载git客户端&#xff0c;进行配置 git config --list user.name姓名全称 user.emailIAM_xxxxxx.com ,这个就是你的邮箱地址 user.signingkey 注册coding平台的密码 一般不需要配置公钥私钥 下载TortoiseGit&#xff0c;配置这几个参数 配置凭据管理器 注意 这里用户名是…...

LLM加速方法,Adapter Tuning和Prompt Tuning的区别及原理举例

LLM加速方法 目录 LLM加速方法整体结构各分支内容Adapter Tuning和Prompt Tuning的区别及原理举例一、区别二、总结整体结构 基于模型微调、基于模型压缩、基于分布式并行处理。 各分支内容 基于模型微调: 包含Adapter Tuning、Prompt Tuning、LoRA三个子类别。这些技术主要…...

【SVN】版本发布快捷操作

摘要&#xff1a;因为每次发版都需要制作一份相同的文件夹&#xff0c;而大部分的包都不需要变更&#xff0c;但是文件又非常大&#xff0c;记录自己的操作经验。 首先在SVN Repository Browser 界面把上一次的版本复制一份&#xff0c;复制的时候重命名为新的版本号 右击要复…...

GitLab 创建项目、删除项目

1、创建项目 点击左上角图标&#xff0c;回到首页 点击 Create a project 点击 Create blank project 输入项目名称&#xff0c;点击Create Project 创建成功 2、删除项目 进入项目列表 点击对应项目&#xff0c;进入项目 进入Settings页面 拖到页面底部&#xff0c;展开Adva…...

STM32-笔记37-吸烟室管控系统项目

一、项目需求 1. 使用 mq-2 获取环境烟雾值&#xff0c;并显示在 LCD1602 上&#xff1b; 2. 按键修改阈值&#xff0c;并显示在 LCD1602 上&#xff1b; 3. 烟雾值超过阈值时&#xff0c;蜂鸣器长响&#xff0c;风扇打开&#xff1b;烟雾值小于阈值时&#xff0c;蜂鸣器不响…...

VisionPro软件Image Stitch拼接算法

2D图像拼接的3种情景 1.一只相机取像位置固定&#xff0c;或者多只相机固定位置拍图&#xff0c;硬拷贝拼图&#xff0c;采用CopyRegion工具实现 2.一只或多只相机在多个位置拍照&#xff0c;相机视野互相重叠&#xff0c;基于Patmax特征定位后&#xff0c;无缝 拼图&#xff…...

【从零开始入门unity游戏开发之——unity篇09】unity6基础入门——Unity游戏对象和组件的本质、Unity中的反射机制

文章目录 一、Unity游戏对象和组件的本质1、开发游戏的本质2、万物之根本——空对象2.1 什么是空对象&#xff1f;2.2 创建空对象 3、Unity游戏对象的本质4、 transform组件4.1 transform组件的重要性4.2 修改transform的值4.4 **Transform的作用**4.3 重置transform的值 5、总…...

【Linux】深入理解文件系统(超详细)

目录 一.磁盘 1-1 磁盘、服务器、机柜、机房 &#x1f4cc;补充&#xff1a; &#x1f4cc;通常网络中用高低电平&#xff0c;磁盘中用磁化方向来表示。以下是具体说明&#xff1a; &#x1f4cc;如果有一块磁盘要进行销毁该怎么办&#xff1f; 1-2 磁盘存储结构 ​编辑…...

G-Helper:华硕笔记本的轻量级控制中心,5分钟告别臃肿官方软件

G-Helper&#xff1a;华硕笔记本的轻量级控制中心&#xff0c;5分钟告别臃肿官方软件 【免费下载链接】g-helper Lightweight, open-source control tool for ASUS laptops and ROG Ally. Manage performance modes, fans, GPU, battery, and RGB lighting across Zephyrus, Fl…...

行式存储(Row-based Storage)和列式存储(Column-base Storage)简介饲

1. 哑铃图是什么&#xff1f; 哑铃图&#xff08;Dumbbell Plot&#xff09;&#xff0c;有时也称为DNA图或杠铃图&#xff0c;是一种用于比较两个相关数据点的可视化图表。 它源于人们对更有效数据比较方式的持续探索。 在传统的时间序列比较中&#xff0c;我们通常使用两条折…...

毕业设计实战:基于SSM+JSP+MySQL私人定制旅游系统设计与实现完整版指南

毕业设计实战&#xff1a;基于SSMJSPMySQL私人定制旅游系统设计与实现完整版指南 在开发私人定制旅游系统本科毕业设计时&#xff0c;我曾因旅游路线订单表未通过用户ID与路线ID双外键关联踩过致命坑——初期仅设计订单号、价格等字段&#xff0c;未与用户表、旅游路线表建立关…...

记一次综合型流量分析 | 添柴不加火游

核心摘要&#xff1a;这篇文章能帮你 ?? 1. 彻底搞懂条件分支与循环的适用场景&#xff0c;告别选择困难。 ?? 2. 掌握遍历DOM集合修改属性的标准姿势与性能窍门。 ?? 3. 识别流程控制中的常见“坑”&#xff0c;并学会如何优雅地绕过去。 ?? 主要内容脉络 ?? 一、痛…...

CogVideoX-2b适合谁?三类人群实战应用场景深度剖析

CogVideoX-2b适合谁&#xff1f;三类人群实战应用场景深度剖析 1. 当视频创作不再需要专业设备 你是否曾经想过制作一段短视频&#xff0c;却因为缺乏专业设备和技能而放弃&#xff1f;CogVideoX-2b的出现彻底改变了这一局面。这个基于智谱AI开源模型的文字生成视频工具&…...

OpenTAP硬件集成测试优势解析

OpenTAP 之所以在硬件和系统集成测试领域表现出色&#xff0c;主要得益于其独特的设计理念、灵活的架构以及强大的社区生态支持。以下将从核心架构、技术优势、应用场景和具体实施案例等多个维度进行详细阐述。 一、 核心架构与设计理念 OpenTAP 基于 .NET 平台构建&#xff…...

React - 组件优化、children props 与 render props、错误边界

一、组件优化 1、问题引入 &#xff08;1&#xff09;基本介绍只要执行 setState&#xff0c;即使不改变状态数据, 组件也会重新 render只要当前组件重新 render&#xff0c;就会自动重新 render 子组件&#xff0c;纵使子组件没有用到父组件的任何数据只要父组件更新&#xff…...

【2026开年巨献】精通Python十讲:第十讲 - 设计模式、架构与工程化思维

【2026开年巨献】精通Python十讲&#xff1a;第十讲 - 设计模式、架构与工程化思维作者&#xff1a;培风图南以星河揽胜 声明&#xff1a;原创不易&#xff0c;转载请注明出处。 互动&#xff1a;如果本文对你有帮助&#xff0c;请不吝 点赞、收藏、关注&#xff01;你的支持是…...

QWEN-AUDIO语音合成教程:中文四声调建模对自然度的关键影响

QWEN-AUDIO语音合成教程&#xff1a;中文四声调建模对自然度的关键影响 你有没有遇到过这样的语音合成效果&#xff1f;文字念得都对&#xff0c;但听起来就是“怪怪的”&#xff0c;像机器人在念稿&#xff0c;没有真人说话的那种抑扬顿挫和情感起伏。尤其是在说中文的时候&a…...

5分钟解锁浏览器编程革命:Core72在线IDE零配置开发指南

5分钟解锁浏览器编程革命&#xff1a;Core72在线IDE零配置开发指南 【免费下载链接】core Online IDE powered by Visual Studio Code ⚡️ 项目地址: https://gitcode.com/gh_mirrors/core72/core 还在为开发环境配置烦恼吗&#xff1f;每次换设备都要重新安装Node.js、…...