
Arduino
仁泉之子
无简述
展开
-
C51实现串口1环形FIFO无阻塞数据发送和接收 并解析自定义协议
串口的发送和接收数据,采用查询法, 会阻塞代码的运行, 效率比较低, 采用环形FIFO来缓冲发送和接收的数据, 再配合中断自动发送和接收, 效率会提升极大, 能把波特率带宽跑满。原创 2023-12-25 11:15:11 · 1117 阅读 · 0 评论 -
C51实现定时器0高效率获取开机的微秒数及实现多任务执行无阻塞延时
这里我用的芯片的是stc32g, 主频为24M, 设置定时器初始为 TH0, TL0的值为0, 最大计时为 32768 us, 计时器每计时一次所用的时间为0.5us, 再次添加一个溢出中断函数来记录溢出了多少次。, 可以获取开机到现在的微秒数, 不能1us中断一次吧, 这样效率太低, 直接获取定时器0的 TH0 和 TL0的值及溢出次数来计时就比较好。c51计算乘除法比较慢, 为计算效率高采用位操作简化为, 此时需要满足条件为主频为24M, 定时器初始为0。则此时获取开机到现在的运行时间计算为,原创 2023-12-19 10:59:32 · 672 阅读 · 0 评论 -
arduino实现一个无阻塞延时库JSTime
受javascript的 setTimeout 和 setInterval启发 实现的延时定时器先上一段使用代码看看如何使用:#include "cxg_JSTime.h"#include <Arduino.h>static JSTime jsTime;void setup() { Serial.begin(115200); //每隔1s执行一次 jsTime.setInterval( []() { Serial.print("set原创 2020-10-24 22:54:14 · 3171 阅读 · 2 评论 -
锂电池串联放电并联充电自动转换电路
直接通过5v充电器给串联锂电池组充电可以大大提高充电器的利用率, 毕竟现在手机充电器都有, 再去买个专用的锂电池平衡充电器又感觉没啥必要,一般给串联锂电池组充电的方案就是通过升压模块将5v升压后再充电,感觉有弊端:1. 一般没有平衡充电功能,造成过冲,可能有损电池2.升压型充电发热量巨大,连热熔胶都能融化,而且充电电流也不大, 充电太慢了.我就琢磨着实现一个锂电池组放电时候是串联放电的, 而充电时是并联充电的模块, 经过改进实现了这个小模块, 用了一阶段, 感觉还可以,没啥大问题.这是两节电池的原创 2022-01-17 19:35:06 · 14990 阅读 · 13 评论 -
arduino实现一个自定义通信协议解析库
在做遥控小车时, 手柄会发送一串二进制数据到小车上, 免不了进行自定义协议的解析, 有时仅仅发送三个字节解析起来却比较麻烦, 而且可靠性也不行。为了不需要每次都进行晦涩的复杂的协议解析,这个库就此诞生了。该库支持arduino uno, stm32, esp32为了实现简单协议定义为:(帧头)+实际数据+数据长度(一个字节)+(帧尾)该库的作用是实现从一串杂乱无章的字节数组中找出符合自定义通信协议包裹的 ”实际数据“部分取出来。demo:#include <Arduino.h>#i.原创 2021-02-26 16:21:42 · 3017 阅读 · 7 评论 -
arduino实现一个缓动动画库CxgAnimate
在javascript里有一些动画库,在c和单片机领域内没见过谁做个呼吸灯效果能抽象出,这个过程其实是一个动画。受js动画库animejs启发https://www.animejs.cn/documentation/#gridStaggering, 开发了这个缓动动画库。缓动动画曲线参考自https://www.xuanfengge.com/easeing/easeing/一切缓慢改变的动画过程,如呼吸灯渐变,舵机缓慢移动,oled屏幕字符移动等都可以使用动画的思想去实现。该库仅提供开拓思路的作用。动画原创 2021-01-29 20:47:19 · 630 阅读 · 0 评论 -
arduino实现类似javascript的事件总线EventBus
我也不知道我写的这个库在arduino编程中有什么用,显得多此一举。不过事件总线模式在javascript中还是非常有用的。demo:#include <Arduino.h>#include "cxg_EventBus.h"//支持arduino uno, stm32, esp32CxgEventBus eventBus;void setup() { Serial.begin(115200); eventBus.on( "test1", [](vo.原创 2021-01-25 22:53:26 · 262 阅读 · 1 评论 -
arduino封装了一个无线串口模块LC12S的操作库
前一段时间接触到一个比较好用的2.4G无线串口通信模块LC12S,在淘宝上仅四五块钱,收发一体,比较好用.我照着技术文档封装了这个设置操作的库demo代码:#include <Arduino.h>//依赖我的JSTime库#include "cxg_JSTime.h"#include "cxg_lc12s.h"//该库支持esp32, stm32, arduino uno等//注意该模块仅支持3.3v,5v肯定会烧毁, 用在arduino un...原创 2021-01-23 18:16:04 · 1160 阅读 · 1 评论 -
arduino实现一个按键检测库
参照OneButton库, 我实现了一个自己的按键检测库, 实现了按键的按下,抬起,长按,双击功能, 代码简洁明了。目前只在esp32上测试过,在stm32, arduino uno上应该也没问题. demo代码:#include <Arduino.h>#include "cxg_Btn.h"static int btn1_pin = 39;static CxgBtn btn1(btn1_pin, false);void setup() { Serial.begi.原创 2021-01-22 20:03:45 · 2541 阅读 · 1 评论 -
arduino实现一个简单的NEC红外遥控解码库
最近闲着写了一个arduino上的红外遥控解析代码库,该库代码清晰易懂,调试方便,在stm32f103c8t6, esp32, arduino uno上测试通过。cxg_IRremote.h/*NEC红外遥控编码 *不使用额外的定时来进行时间测量, 仅使用1个支持外部中断的即可。 *原理, 利用上升沿中断记录两次上升沿时间间隔来判断 *引导码, 重复码, 数字1和数字0 */#ifndef CXG_IRremote_H#define CXG_IRremote_H#include..原创 2021-01-16 15:34:06 · 1970 阅读 · 2 评论 -
PlatformIO编译arduino提示gbk编码错误
用vscode上的PlatformIO开发arduino,最近总是显示报错,UnicodeDecodeError: 'gbk' codec can't decode byte 0xaf in position 706: illegal multibyte sequence经过一番验证,是代码中写的中文注释引起的问题,但是死活找不出是哪个注释写的不对引起的。虽然我的文件编码是utf-8,但是python在读取时采用的是gbk编码读取的,于是就导致了这个注释也能影响编译的诡异bug。于是点.原创 2020-09-30 11:54:12 · 931 阅读 · 0 评论 -
在vscode中开发arduino编译巨慢解决办法
每次在vscode中, 编译Arduino花费的时间巨长,等的好烦,仔细一看每次在Arduino 输出控制台上会出现一个警告[Warning] Output path is not specified. Unable to reuse previously compiled files. Upload could be slow. See README.只需在.vscode ->...原创 2019-05-27 09:20:19 · 18199 阅读 · 9 评论