/** * @file photo_interrupter.cc * @brief 光电限位开关类实现文件 * * 该类实现了光电限位开关的完整功能,包括初始化、中断处理、 * 回调函数管理等。支持起始位置和结束位置两个限位开关的检测。 */ #include "photo_interrupter.h" #include #define TAG "PhotoInterrupter" ///< 日志标签,用于ESP-IDF日志系统 /** * @brief 构造函数 * * 初始化PhotoInterrupter对象,设置默认状态 * 目前构造函数为空,所有初始化操作在Init()方法中完成 */ PhotoInterrupter::PhotoInterrupter() { } /** * @brief 析构函数 * * 清理资源,释放分配的内存 * 目前析构函数为空,没有需要特殊清理的资源 */ PhotoInterrupter::~PhotoInterrupter() { } /** * @brief 初始化限位开关 * * 执行限位开关的初始化操作,包括: * 1. 输出初始化日志 * 2. 设置默认的起始限位开关回调函数 * 3. 设置默认的结束限位开关回调函数 * * 默认回调函数仅输出触发日志,用户可以通过OnStartTrigger()和OnEndTrigger() * 方法覆盖这些默认回调函数 */ void PhotoInterrupter::Init() { ESP_LOGI(TAG, "限位开关初始化"); // 设置默认回调函数 - 起始限位开关触发时输出日志 OnStartTrigger([]() { ESP_LOGI(TAG, "起始限位开关触发 - 默认回调"); }); // 设置默认回调函数 - 结束限位开关触发时输出日志 OnEndTrigger([]() { ESP_LOGI(TAG, "结束限位开关触发 - 默认回调"); }); } /** * @brief 处理限位开关中断 * * 当限位开关被触发时调用的中断处理函数 * 目前仅输出中断触发日志,可以根据需要扩展更多处理逻辑 */ void PhotoInterrupter::Interrupt() { ESP_LOGI(TAG, "限位开关中断触发"); } /** * @brief 设置起始限位开关触发回调函数 * @param callback 回调函数对象,当起始限位开关被触发时执行 * * 允许用户自定义起始限位开关被触发时的处理逻辑。 * 该函数会保存传入的回调函数,并输出注册日志。 */ void PhotoInterrupter::OnStartTrigger(std::function callback) { on_start_trigger_ = callback; ESP_LOGI(TAG, "注册起始限位开关回调函数"); } /** * @brief 设置结束限位开关触发回调函数 * @param callback 回调函数对象,当结束限位开关被触发时执行 * * 允许用户自定义结束限位开关被触发时的处理逻辑。 * 该函数会保存传入的回调函数,并输出注册日志。 */ void PhotoInterrupter::OnEndTrigger(std::function callback) { on_end_trigger_ = callback; ESP_LOGI(TAG, "注册结束限位开关回调函数"); } /** * @brief 触发起始限位开关回调 * * 当检测到起始限位开关被触发时,执行注册的回调函数。 * 如果回调函数已设置(不为nullptr),则执行回调并输出触发日志。 * * 该函数通常由IO扩展板在检测到起始限位开关中断时调用。 */ void PhotoInterrupter::TriggerStartCallback() { if (on_start_trigger_) { ESP_LOGI(TAG, "触发起始限位开关回调"); on_start_trigger_(); } } /** * @brief 触发结束限位开关回调 * * 当检测到结束限位开关被触发时,执行注册的回调函数。 * 如果回调函数已设置(不为nullptr),则执行回调并输出触发日志。 * * 该函数通常由IO扩展板在检测到结束限位开关中断时调用。 */ void PhotoInterrupter::TriggerEndCallback() { if (on_end_trigger_) { ESP_LOGI(TAG, "触发结束限位开关回调"); on_end_trigger_(); } }