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

esp32触发相机

esp32触发相机,测试成功上升沿触发

串口发送命令 up 20000 1 20000 触发

#include <Arduino.h>const int outputPin = 12;  // 输出引脚
String inputCommand = "";  // 串口输入缓冲区// 解析命令参数,例如 "up 10 5" 解析为 delayMicrosecondsTime=10, repeatCount=5// 解析命令参数,例如 "up 10 5" 解析为 delayMicrosecondsTime=10, repeatCount=5
bool parseParameters(String command, int &delayMicrosecondsTime, int &repeatCount) {int firstSpace = command.indexOf(' '); // 查找第一个空格位置if (firstSpace < 0) return false;     // 没有参数int secondSpace = command.indexOf(' ', firstSpace + 1); // 查找第二个空格位置if (secondSpace < 0) return false;                     // 参数不完整// 提取参数并转换为整数String delayMicrosecondsStr = command.substring(firstSpace + 1, secondSpace);String repeatStr = command.substring(secondSpace + 1);delayMicrosecondsTime = delayMicrosecondsStr.toInt();repeatCount = repeatStr.toInt();// 检查参数是否合法return delayMicrosecondsTime > 0 && repeatCount > 0;
}// 解析命令参数,例如 "up 10 5 3" 解析为 delayMicrosecondsTime=10, repeatCount=5, additionalParam=3
bool parseParametersThree(String command, int &delayMicrosecondsTime, int &repeatCount, int &additionalParam) {int firstSpace = command.indexOf(' '); // 查找第一个空格位置if (firstSpace < 0) return false;     // 没有参数int secondSpace = command.indexOf(' ', firstSpace + 1); // 查找第二个空格位置if (secondSpace < 0) return false;                     // 参数不完整int thirdSpace = command.indexOf(' ', secondSpace + 1); // 查找第三个空格位置if (thirdSpace < 0) return false;                      // 参数不完整// 提取参数并转换为整数String delayMicrosecondsStr = command.substring(firstSpace + 1, secondSpace);String repeatStr = command.substring(secondSpace + 1, thirdSpace);String additionalStr = command.substring(thirdSpace + 1);delayMicrosecondsTime = delayMicrosecondsStr.toInt();repeatCount = repeatStr.toInt();additionalParam = additionalStr.toInt();// 检查参数是否合法return delayMicrosecondsTime > 0 && repeatCount > 0 && additionalParam > 0;
}void handleUpCommand(String command) {int delayMicrosecondsTime = 0, repeatCount = 0, additionalParam = 0;if (parseParametersThree(command, delayMicrosecondsTime, repeatCount, additionalParam)) {Serial.println("Triggering UP signal...");for (int i = 0; i < repeatCount; i++) {digitalWrite(outputPin, HIGH); // 输出高电平delayMicroseconds(additionalParam);              // 等待digitalWrite(outputPin, LOW);  // 恢复低电平delayMicroseconds(delayMicrosecondsTime);              // 等待间隔}} else {Serial.println("Invalid parameters for 'up' command");}
}void handleDownCommand(String command) {int delayMicrosecondsTime = 0, repeatCount = 0;if (parseParameters(command, delayMicrosecondsTime, repeatCount)) {Serial.println("Triggering DOWN signal...");for (int i = 0; i < repeatCount; i++) {digitalWrite(outputPin, LOW);  // 输出低电平delayMicroseconds(delayMicrosecondsTime);              // 等待digitalWrite(outputPin, HIGH); // 恢复高电平delayMicroseconds(delayMicrosecondsTime);              // 等待间隔}} else {Serial.println("Invalid parameters for 'down' command");}
}void parseCommand(String command) {command.trim(); // 去掉多余的空格或换行符if (command.startsWith("up")) {handleUpCommand(command);} else if (command.startsWith("down")) {handleDownCommand(command);} else {Serial.println("Invalid command! Use 'up' or 'down'");}
}void setup() {pinMode(outputPin, OUTPUT);   // 设置输出引脚digitalWrite(outputPin, LOW); // 初始化输出为低电平Serial.begin(9600);           // 初始化串口通信
}void loop() {// 检查是否有串口输入while (Serial.available() > 0) {char receivedChar = Serial.read();if (receivedChar == '\n') { // 检测到回车符,执行命令parseCommand(inputCommand);inputCommand = ""; // 清空输入缓冲区} else {inputCommand += receivedChar; // 拼接命令字符}}
}

相关文章:

esp32触发相机

esp32触发相机&#xff0c;测试成功上升沿触发 串口发送命令 up 20000 1 20000 触发 #include <Arduino.h>const int outputPin 12; // 输出引脚 String inputCommand ""; // 串口输入缓冲区// 解析命令参数&#xff0c;例如 "up 10 5" 解析为…...

webrtc支持h265

Webrtc播放H265的技术探索(datachannelwasm) - 飞翔天空energy - 博客园 https://github.com/ZLMediaKit/ZLMediaKit/issues/3589 [技术咨询]addStreamProxy 添加拉流代理之后&#xff0c;webrtc协议无法播放&#xff0c;其它协议正常 Issue #1808 ZLMediaKit/ZLMediaKit G…...

macos 14.0 Monoma 修改顶部菜单栏颜色

macos 14.0 设置暗色后顶部菜单栏还维持浅色&#xff0c;与整体不协调。 修改方式如下&#xff1a;...

在 Mac(ARM 架构)上安装 JDK 8 环境

文章目录 步骤 1&#xff1a;检查系统版本步骤 2&#xff1a;下载支持 ARM 的 JDK 8步骤 3&#xff1a;安装 JDK步骤 4&#xff1a;配置环境变量步骤 5&#xff1a;验证安装步骤 6&#xff1a;注意事项步骤7&#xff1a;查看Java的安装路径 在 Mac&#xff08;ARM 架构&#xf…...

Linux高阶——1123—

1、服务器版本介绍及实现 1、单进程单任务服务器&#xff08;阻塞IO&#xff09; 单进程模型&#xff0c;阻塞IO冲突&#xff0c;等待连接时无法读取数据&#xff0c;读取数据时无法连接 比较适合处理单任务&#xff0c;排队处理业务 伪代码 while(true) {addrlensizeof(c…...

VOLO实战:使用VOLO实现图像分类任务(二)

文章目录 训练部分导入项目使用的库设置随机因子设置全局参数图像预处理与增强读取数据设置Loss设置模型设置优化器和学习率调整策略设置混合精度&#xff0c;DP多卡&#xff0c;EMA定义训练和验证函数训练函数验证函数调用训练和验证方法 运行以及结果查看测试完整的代码 在上…...

【kafka02】消息队列与微服务之Kafka部署

Kafka 部署 Kafka 部署说明 kafka 版本选择 kafka 基于scala语言实现,所以使用kafka需要指定scala的相应的版本.kafka 为多个版本的Scala构建。这仅在使用 Scala 时才重要&#xff0c;并且希望为使用的相同 Scala 版本构建一个版本。否则&#xff0c;任何版本都可以 kafka下…...

MySQL系列之数据类型(Numeric)

导览 前言一、数值类型综述二、数值类型详解1. NUMERIC1.1 UNSIGNED或SIGNED1.2 数据类型划分 2. Integer类型取值和存储要求3. Fixed-Point类型取值和存储要求4. Floating-Point类型取值和存储要求 结语精彩回放 前言 MySQL系列最近三篇均关注了和我们日常工作或学习密切相关…...

BERT简单理解;双向编码器优势

目录 BERT简单理解 一、BERT模型简单理解 二、BERT模型使用举例 三、BERT模型的优势 双向编码器优势 BERT简单理解 (Bidirectional Encoder Representations from Transformers)模型是一种预训练的自然语言处理(NLP)模型,由Google于2018年推出。以下是对BERT模型的简…...

LLamafactory 批量推理与异步 API 调用效率对比实测

背景 在阅读 LLamafactory 的文档时候&#xff0c;发现它支持批量推理: 推理.https://llamafactory.readthedocs.io/zh-cn/latest/getting_started/inference.html 。 于是便想测试一下&#xff0c;它的批量推理速度有多快。本文实现了 下述两种的大模型推理&#xff0c;并对…...

spf算法、三类LSA、区间防环路机制/规则、虚连接

1.构建spf树&#xff1a; 路由器将自己作为最短路经树的树根根据Router-LSA和Network-LSA中的拓扑信息,依次将Cost值最小的路由器添加到SPF树中。路由器以Router ID或者DR标识。广播网络中DR和其所连接路由器的Cost值为0。SPF树中只有单向的最短路径,保证了OSPF区域内路由计管不…...

C语言学习 12(指针学习1)

一.内存和地址 1.内存 在讲内存和地址之前&#xff0c;我们想有个⽣活中的案例&#xff1a; 假设有⼀栋宿舍楼&#xff0c;把你放在楼⾥&#xff0c;楼上有100个房间&#xff0c;但是房间没有编号&#xff0c;你的⼀个朋友来找你玩&#xff0c;如果想找到你&#xff0c;就得挨…...

TypeError: issubclass() arg 1 must be a class

TypeError: issubclass() arg 1 must be a class 报错代码&#xff1a; import spacy 原因&#xff1a; 库版本错误&#xff0c; 解决方法&#xff1a; pip install typing-inspect0.8.0 typing_extensions4.5.0 感谢作者&#xff1a; langchain TypeError: issubclass() …...

Java面试题、八股文学习之JVM篇

1.对象一定分配在堆中吗&#xff1f;有没有了解逃逸分析技术&#xff1f; 对象不一定总是分配在堆中。在Java等一些高级编程语言中&#xff0c;对象的分配位置可以通过编译器或运行时系统的优化来决定。其中&#xff0c;逃逸分析&#xff08;Escape Analysis&#xff09;是用于…...

【eNSP】动态路由协议RIP和OSPF

动态路由RIP&#xff08;Routing Information Protocol&#xff0c;路由信息协议&#xff09;和OSPF&#xff08;Open Shortest Path First&#xff0c;开放式最短路径优先&#xff09;是两种常见的动态路由协议&#xff0c;它们各自具有不同的特点和使用场景。本篇会对这两种协…...

春秋云境 CVE 复现

CVE-2022-4230 靶标介绍 WP Statistics WordPress 插件13.2.9之前的版本不会转义参数&#xff0c;这可能允许经过身份验证的用户执行 SQL 注入攻击。默认情况下&#xff0c;具有管理选项功能 (admin) 的用户可以使用受影响的功能&#xff0c;但是该插件有一个设置允许低权限用…...

Linux入门攻坚——39、Nginx入门

Nginx&#xff1a;engine X Tengine&#xff1a;淘宝改进维护的版本 Registry&#xff1a; 使用了libevent库&#xff1a;高性能的网络库 epoll()函数 Nginx特性&#xff1a; 模块化设计、较好的扩展性&#xff1b;&#xff08;但不支持动态加载模块功能&#…...

计算机网络的类型

目录 按覆盖范围分类 个人区域网&#xff08;PAN&#xff09; 局域网&#xff08;LAN&#xff09; 城域网&#xff08;MAN&#xff09; 4. 广域网&#xff08;WAN&#xff09; 按使用场景和性质分类 公网&#xff08;全球网络&#xff09; 外网 内网&#xff08;私有网…...

解决 MySQL 5.7 安装中的常见问题及解决方案

目录 前言1. 安装MySQL 5.7时的常见错误分析1.1 错误原因及表现1.2 错误的根源 2. 解决方案2.1 修改YUM仓库配置2.2 重新尝试安装2.3 处理GPG密钥错误2.4 解决依赖包问题 3. 安装成功后的配置3.1 启动MySQL服务3.2 获取临时密码3.3 修改root密码 4. 结语 前言 在Linux服务器上…...

VITE+VUE3+TS环境搭建

前言&#xff08;与搭建项目无关&#xff09;&#xff1a; 可以安装一个node管理工具&#xff0c;比如nvm&#xff0c;这样可以顺畅的切换vue2和vue3项目&#xff0c;以免出现项目跑不起来的窘境。我使用的nvm&#xff0c;当前node 22.11.0 目录 搭建项目 添加状态管理库&…...

【设计模式】【创建型模式(Creational Patterns)】之原型模式(Prototype Pattern)

1. 设计模式原理说明 原型模式&#xff08;Prototype Pattern&#xff09; 是一种创建型设计模式&#xff0c;它允许你通过复制现有对象来创建新对象&#xff0c;而无需通过构造函数来创建。这种方式可以提高性能&#xff0c;尤其是在对象初始化需要消耗大量资源或耗时较长的情…...

黄仁勋:人形机器人在内,仅有三种机器人有望实现大规模生产

11月23日&#xff0c;芯片巨头、AI时代“卖铲人”和最大受益者、全球市值最高【英伟达】创始人兼CEO黄仁勋在香港科技大学被授予工程学荣誉博士学位&#xff1b;并与香港科技大学校董会主席沈向洋展开深刻对话&#xff0c;涉及人工智能&#xff08;AI&#xff09;、计算力、领导…...

【C语言】宏定义详解

C语言中的宏定义&#xff08;#define&#xff09;详细解析 在C语言中&#xff0c;宏定义是一种预处理指令&#xff0c;使用 #define 关键字定义。它由预处理器&#xff08;Preprocessor&#xff09;在编译前处理&#xff0c;用于定义常量、代码片段或函数样式的代码替换。宏是…...

LangChain——多向量检索器

每个文档存储多个向量通常是有益的。在许多用例中&#xff0c;这是有益的。 LangChain 有一个基础 MultiVectorRetriever &#xff0c;这使得查询此类设置变得容易。很多复杂性在于如何为每个文档创建多个向量。本笔记本涵盖了创建这些向量和使用 MultiVectorRetriever 的一些常…...

《岩石学报》

本刊主要报道有关岩石学基础理论的岩石学领域各学科包括岩浆岩石学、变质岩石学、沉积岩石学、岩石大地构造学、岩石同位素年代学和同位素地球化学、岩石成矿学、造岩矿物学等方面的重要基础理论和应用研究成果&#xff0c;同时也刊载综述性文章、问题讨论、学术动态以及书评等…...

数据结构 (12)串的存储实现

一、顺序存储结构 顺序存储结构是用一组连续的存储单元来存储串中的字符序列。这种存储方式类似于线性表的顺序存储结构&#xff0c;但串的存储对象仅限于字符。顺序存储结构又可以分为定长顺序存储和堆分配存储两种方式。 定长顺序存储&#xff1a; 使用静态数组存储&#xff…...

职场发展陷阱

一、只有执行&#xff0c;没有思考 二、只有过程&#xff0c;没有结果 三、只有重复&#xff0c;没有精进 四、不懂向上管理 五、定期汇报 六、不要憋大招 七、多同步信息...

Xcode15(iOS17.4)打包的项目在 iOS12 系统上启动崩溃

0x00 启动崩溃 崩溃日志&#xff0c;只有 2 行&#xff0c;看不出啥来。 0x01 默认配置 由于我开发时&#xff0c;使用的 Xcode 14.1&#xff0c;打包在另外一台电脑 Xcode 15.3 Xcode 14.1 Build Settings -> Asset Catalog Compliter - Options Xcode 15.3 Build S…...

极狐GitLab 17.6 正式发布几十项与 DevSecOps 相关的功能【二】

GitLab 是一个全球知名的一体化 DevOps 平台&#xff0c;很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab 是 GitLab 在中国的发行版&#xff0c;专门为中国程序员服务。可以一键式部署极狐GitLab。 学习极狐GitLab 的相关资料&#xff1a; 极狐GitLab 官网极狐…...

PVE相关名词通俗表述方式———多处细节实验(方便理解)

PVE设置初期&#xff0c;对CIDR、 网关、 LinuxBridge、VLAN等很有困惑的朋友一定很需要一篇能够全面通俗易懂的方式去理解PVE 中Linux网桥的工作方式&#xff0c;就像操作一个英雄&#xff0c;多个技能&#xff0c;还是需要一点点去学习理解的&#xff0c;如果你上来就对着别人…...

网站改版需求/搜索引擎优化的目的是

最近几天有点忙&#xff0c;所以我们今天来一篇短的&#xff0c;简单地介绍一下数据库设计中的一种模式——Soft Delete。 可以说&#xff0c;该模式毁誉参半&#xff0c;甚至有非常多的人认为该模式是一个Anti-Pattern。因此在本篇文章中&#xff0c;我们不仅仅会对该模式进行…...

爱站网关键词密度查询/汽车行业网站建设

分享一个类的加载初始化代码demo&#xff0c;这段代码考察类中内容的加载顺序&#xff0c;很有意思 一起钻研走一下 public class InitializeDemo {private static int k 1;private static InitializeDemo t1 new InitializeDemo("t1");private static Initializ…...

吴江城乡住房和城乡建设局网站/拼多多关键词排名查询

document.addEventListener(blur,function(){document.body.scrollIntoView(false)},true) })复制代码...

浪漫免费表白网站/湖南seo网站开发

以下所说的所有东西若要服用药物以补充&#xff0c;则不可过量服用&#xff0c;过量服用容易引起早熟(不一定会中毒)&#xff0c;早熟则停止成长发育&#xff0c;导致身体只长宽度不长高度。 一、延缓骨骺线闭合 想要长高不要在骨骺线上下功夫。 因为在人体内激素是一个很麻烦的…...

标书制作软件/seo优化是什么职业

一&#xff1a;动画(animation)的参数详解 由于上面用到了animation动画&#xff0c;这里详细介绍下这个animation的参数。 简介 CSS动画(Animations)简单说就是在一段固定的动画时间内暗中在某一频率内改变其CSS某个或某些值,从而达到视觉上的转换动画效果。Animations的很多方…...

新闻网站 网络强国建设/搜索引擎关键词排名优化

在Mac的开发中&#xff0c; 有没有想过当我们点击可执行文件之后&#xff0c;Mac究竟做了什么事情才让我们的程序运行起来&#xff1f; 对于应用层开发人员或者普通的用户而言&#xff0c; 其实无需知道的这么详细&#xff1b;但是对于内核开发人员而言&#xff0c; 如果能了解…...