From 3a71b608f05500e91793db74b5a6008f83c7b6de Mon Sep 17 00:00:00 2001 From: cxh Date: Thu, 5 Jun 2025 10:29:26 +0800 Subject: [PATCH] temp --- src/LedMqttSubscriber.cpp | 2 +- src/main.cpp | 65 +++++++++++++++++++++++++++++---------- 2 files changed, 49 insertions(+), 18 deletions(-) diff --git a/src/LedMqttSubscriber.cpp b/src/LedMqttSubscriber.cpp index 003a476..4137e34 100644 --- a/src/LedMqttSubscriber.cpp +++ b/src/LedMqttSubscriber.cpp @@ -121,7 +121,7 @@ void MqttClient::checkTimeout(std::chrono::seconds timeout) auto now = std::chrono::steady_clock::now(); if (now - lastMessageTime > timeout) { - gear = 0; + gear = 3; speed = 0.0; std::cout << "超时无新数据,已重置 gear 和 speed" << std::endl; lastMessageTime = now; // 避免重复打印 diff --git a/src/main.cpp b/src/main.cpp index 2b70e37..7f6949d 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -26,6 +26,23 @@ void alwaysRed(SerialPort &serial) std::cerr << "发送数据失败" << std::endl; } +// 常绿灯 +void alwaysGreen(SerialPort &serial) +{ + LedCommand cmd; + cmd.setColor(0, 255, 0); // 红色 + cmd.setExtCount(1); + auto packet = cmd.serialize(); + + std::cout << "发送常红数据包:"; + for (auto b : packet) + printf(" %02X", b); + std::cout << std::endl; + + if (!serial.writeData(packet.data(), packet.size())) + std::cerr << "发送数据失败" << std::endl; +} + // 黄色呼吸灯效果 void yellowBreathing(SerialPort &serial) { @@ -87,23 +104,13 @@ int main() std::cout << "串口号: " << port << "\n波特率: " << baudrate << std::endl; - // ===== MQTT 测试连接 ===== MqttClient mqtt("config.toml"); - if (mqtt.start()) - { - std::cout << "MQTT 启动成功,等待消息..." << std::endl; - std::this_thread::sleep_for(std::chrono::seconds(5)); - mqtt.disconnect(); - } - else + if (!mqtt.start()) { std::cerr << "MQTT 启动失败" << std::endl; + return 1; } - - while (1) - { - /* code */ - } + std::cout << "MQTT 连接成功,开始循环处理..." << std::endl; SerialPort serial; if (!serial.openPort(port, baudrate)) @@ -111,12 +118,36 @@ int main() return 1; } - // 调用函数实现两个动作 - alwaysRed(serial); - std::this_thread::sleep_for(std::chrono::seconds(2)); // 保持常红2秒 - yellowBreathing(serial); + while (true) + { + mqtt.checkTimeout(std::chrono::seconds(3)); // 没消息则重置数据 + + int gear = mqtt.getGear(); + double speed = mqtt.getSpeed(); + + // 根据 gear 和 speed 控制 LED + LedCommand cmd; + if (gear == 3) + { + alwaysRed(serial); + } + else + { + if (speed > 0) + { + yellowBreathing(serial); + } + else + { + alwaysGreen(serial); + } + } + + std::this_thread::sleep_for(std::chrono::milliseconds(500)); + } serial.closePort(); + mqtt.disconnect(); return 0; }