This commit is contained in:
cxh 2025-06-05 10:29:26 +08:00
parent ec13c4d32b
commit 3a71b608f0
2 changed files with 49 additions and 18 deletions

View File

@ -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; // 避免重复打印

View File

@ -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;
}