.h
#ifndef _SINGLE_LED_H_
#define _SINGLE_LED_H_
...
#endif
作用:防止你不小心把同一把锁(头文件)连装两次,装两次就会报“重复定义”错。
形象点:进门先刷卡,第一次刷门开,第二次刷门就提示“您已进门”。
#include "driver/gpio.h"
#include "led_strip.h"
#include "esp_timer.h"
#include <mutex>
-
gpio.h:ESP32 的“引脚遥控器”,想拉高拉低某个脚就靠它。 -
led_strip.h:官方已经写好的“灯带驱动”,我们直接拿来用,不用自己发脉冲。 -
esp_timer.h:硬件定时器,后面“每隔 xx 毫秒闪一下”要靠它。 -
<mutex>:C++ 的“小锁头”,多线程同时抢灯的时候,谁先谁后靠它排队。
真正的“遥控器”——类声明
class SingleLed
{
public:
SingleLed(gpio_num_t gpio); // 构造函数——“把遥控器插到哪个口”
~SingleLed(); // 析构函数——“用完把遥控器收好”
void SetColor(...); // 换颜色
void TurnOn(); // 开灯
void TurnOff(); // 关灯
void Blink(...); // 闪 N 次
void StartContinuousBlink(...);// 一直闪
private:
... // 内部小零件,用户不用管
};
把类想成“遥控器”:
-
构造函数 = 第一次装电池,并告诉它“我接在 GPIO18”。
-
析构函数 = 把电池抠出来,免得遥控器一直跑。
-
public:里的函数就是遥控器上的按钮,谁都能按。 -
private:里的变量是遥控器里面的电路板,用户不必碰。
遥控器里藏了啥(成员变量)
std::mutex mutex_; // 小锁头——多任务抢灯时排队
led_strip_handle_t led_strip_; // 官方驱动句柄——真正发脉冲的家伙
uint8_t r_, g_, b_; // 当前颜色缓存
esp_timer_handle_t blink_timer_;// 定时器句柄——“每隔 xx 毫秒叫我一下”
int blink_counter_; // 还剩几次闪
int blink_interval_ms_; // 闪的节奏
一句话:这些全是遥控器内部的小零件,用户不用直接摸。
两个“内部专用”小按钮(private 函数)
void StartBlinkTask(...);
void OnBlinkTimer();
-
StartBlinkTask:把“闪 N 次”这个活交给后台小线程。 -
OnBlinkTimer:每到期一次就“咔”切换一次亮灭。
用户按的是Blink()和StartContinuousBlink(),后台怎么闪它们不管。
就是“遥控器”的外壳+说明书:
-
告诉你有哪些按钮(public 函数)。
-
告诉你按钮按下去大概会干嘛(注释)。
-
告诉你内部电路长啥样(private 成员),但别拆。
C++类与头文件详解
4518

被折叠的 条评论
为什么被折叠?



