版本:V6
许可证:GNU Affero General Public License v3.0
作者:YangJincheng
最后更新:2026年2月
MyTools.h 是一个为 Arduino 平台设计的轻量级工具库,旨在通过封装常用硬件组件(如电机、灰度传感器、按键、LED 等)来简化主程序代码,提升代码可读性和复用性,遵循 DRY(Don‘t Repeat Yourself) 原则。
如果你要使用example文件夹中的文件,请把它单独复制到MyToolsVXX.h(改为真实版本)的同文件夹内才能运行!
MyToolsV6.h:主头文件,包含所有类定义- 使用时只需将此文件放入项目目录,并在代码中
#include "MyToolsV6.h"
控制一个直流电机的正转、反转、刹车、滑行。
SingleMotor motor(forwardPin, backwardPin);forwardPin:正转引脚(PWM)backwardPin:反转引脚(PWM)
| 方法 | 说明 |
|---|---|
setSpeed(speed) |
设置速度 -255~255(负值反转) |
operator()(speed) |
同 setSpeed |
brake() |
快速刹车(双高) |
coast() |
滑行(双低) |
dynamicBrake() |
动态刹车(PWM=0) |
控制左右两个电机,适用于小车底盘。
Motors motors(leftForward, leftBackward, rightForward, rightBackward);默认引脚:左(6,9),右(10,11)
| 方法 | 说明 |
|---|---|
operator()(leftSpeed, rightSpeed) |
设置左右电机速度 |
forward(speed) |
前进 |
backward(speed) |
后退 |
turnLeft(speed) |
左转 |
turnRight(speed) |
右转 |
rotate(speed) |
原地旋转 |
coast() / brake() |
滑行 / 刹车 |
stop(useBrake) |
停止,默认滑行 |
safeDrive(l, r, max) |
限制速度范围 |
getCurrentSpeed() |
获取当前速度 |
printStatus() |
打印速度状态 |
检测黑白状态,支持阈值判断。
SingleGrayscaleSensor sensor(pin, threshold);| 方法 | 说明 |
|---|---|
getValue() |
获取原始模拟值 |
isBlack() / isWhite() |
判断黑白 |
operator bool() |
是否检测到黑线 |
getStr() |
返回 "BLACK"/"WHITE" |
封装左右两路灰度传感器,适用于巡线小车。
GrayscaleSensors sensors(leftPin, leftThresh, rightPin, rightThresh);| 方法 | 说明 |
|---|---|
getValueLeft() / getValueRight() |
原始值 |
isLeftBlack() / isLeftWhite() |
左状态 |
isRightBlack() / isRightWhite() |
右状态 |
isBothBlack() / isBothWhite() |
双黑 / 双白 |
isOnLine() / isOffLine() |
是否在线 / 离线 |
isOnTrack() |
双黑 |
getDirection() |
-1右转,1左转,0直行 |
getStr() |
状态字符串 |
支持高低电平触发,去抖需自行处理。
BUTTON btn(pin, mode = False, use_pullup = True);mode=0:按下为高电平mode=1:按下为低电平use_pullup:开启后使用上拉电阻输入(默认开启,可用use_pullup = False关闭)
| 方法 | 说明 |
|---|---|
isPressed() |
是否按下 |
operator bool() |
同 isPressed |
GetStr() |
返回 "pressed"/"released" |
printStatus() |
打印状态 |
waitUntilRelease() |
阻塞直到松开 |
控制 LED 的亮灭,支持高低电平触发模式。
LED led(pin, mode = 0);mode=0:低电平点亮mode=1:高电平点亮
| 方法 | 说明 |
|---|---|
on() / off() |
开/关 |
toggle() |
切换状态 |
operator()(state) |
直接设置状态 |
isOn() |
返回是否亮起 |
test() |
闪烁测试(需 Serial) |
存储两个任意类型的值,支持构造、输出。
MyPair<int, float> p(10, 3.14);
Serial.println(p.toString()); // "(10, 3.14)"#include "MyToolsV6.h"
Motors motors;
GrayscaleSensors sensors(A0, 500, A1, 500);
BUTTON btn(2);
LED led(13);
void setup() {
Serial.begin(9600);
}
void loop() {
if (btn.isPressed()) {
led.toggle();
delay(200);
}
if (sensors.isOnLine()) {
int dir = sensors.getDirection();
motors(dir * 100, -dir * 100); // 转向
} else if (sensors.isBothBlack()) {
motors.forward(150);
} else {
motors.coast();
}
Serial.println(sensors.getStr());
}- 本库不包含软件去抖,请在需要时自行添加
delay()或BUTTON.waitUntilRelease()或使用去抖算法。 - 模拟引脚请使用
A0, A1…等宏定义。 - 所有类均设计为轻量、无动态内存分配,适合资源受限的 Arduino 环境。
- 如需扩展功能,建议通过继承或组合方式实现,而非修改库文件。
如果你在使用过程中发现 Bug,或有功能建议,欢迎提交至 Issues 页面。
即使不确定是否为 Bug,也欢迎提出讨论。