1增加状态语音提示,2同时按两个建发送对喷,3修复飞机状态没有正常发送bug

This commit is contained in:
pxzleo 2023-05-27 14:54:14 +08:00
parent 988aea3c8e
commit 2ffb029774

View File

@ -49,6 +49,7 @@ void ctbtn_pressend();
void ctbtn_pressstart(); void ctbtn_pressstart();
void testbtn_click(); void testbtn_click();
void btn_presssatonce();
int get_pullweight(); int get_pullweight();
void Task1(void *pvParameters); void Task1(void *pvParameters);
@ -56,9 +57,14 @@ void led_show(CRGB ledcolor);
// void Task1code( void *pvParameters ); // void Task1code( void *pvParameters );
void showledidel(); void showledidel();
int pullweight = 0; int pullweight = 0;
int8_t btn_pressatonce=0; //是否同时按下
unsigned long _tm_bengstop; unsigned long _tm_bengstop;
bool _bengstop = false; bool _bengstop = false;
bool _needweightalign = false; bool _needweightalign = false;
bool curr_armed=false;
uint8_t curr_mode=0;
// 需要做的初始化工作 // 需要做的初始化工作
enum Initstatus enum Initstatus
{ {
@ -116,7 +122,7 @@ boolean isPush = false; //记得删除 板子按钮状态 ps:D3引脚下拉微
/*异步线程对象*/ /*异步线程对象*/
Ticker pubTicker(pubThread,1000); //定时发布主题 线程 Ticker pubTicker(pubThread,1000); //定时发布主题 线程
Ticker mavTicker(mavThread,10000); //定时 指定飞控mavlink 串口返回的数据类别 防止飞控启动滞后 Ticker mavTicker(mavThread,10000); //定时 指定飞控mavlink 串口返回的数据类别 防止飞控启动滞后
Ticker flashTicker(flashThread,50); //单片机主动 按钮主动发布主题 线程 //Ticker flashTicker(flashThread,50); //单片机主动 按钮主动发布主题 线程
/////////////////////////////////MQTT_语音_MAVLINK 部分结束 /////////////////////////////////MQTT_语音_MAVLINK 部分结束
void setup() void setup()
@ -173,7 +179,9 @@ void setup()
/////////////////////////////////MQTT_语音_MAVLINK 部分 /////////////////////////////////MQTT_语音_MAVLINK 部分
/*初始化*/ /*初始化*/
Serial1.begin(115200, SERIAL_8N1, SERIAL_REPORT_RX, SERIAL_REPORT_TX); //声音模块引串口脚映射 Serial1.begin(115200, SERIAL_8N1, SERIAL_REPORT_RX, SERIAL_REPORT_TX); //声音模块引串口脚映射
// fc.playText("正在连接服WIFI");
fc.connectWifi(); //连接wifi fc.connectWifi(); //连接wifi
// fc.playText("正在连接服务器");
fc.connectMqtt(topicSub, topicSubCount); //连接mqtt fc.connectMqtt(topicSub, topicSubCount); //连接mqtt
fc.mqttClient->setCallback(mqtt_receiveCallback); //设置订阅成功 回调 fc.mqttClient->setCallback(mqtt_receiveCallback); //设置订阅成功 回调
fc.mav_request_data(); //指定飞控串口返回的数据类别(飞控启动之后发送才有意义) fc.mav_request_data(); //指定飞控串口返回的数据类别(飞控启动之后发送才有意义)
@ -181,7 +189,7 @@ void setup()
/*异步线程*/ /*异步线程*/
pubTicker.start(); //定时 发布主题 pubTicker.start(); //定时 发布主题
mavTicker.start(); //定时 指定飞控mavlink 串口返回的数据类别 防止飞控启动滞后 mavTicker.start(); //定时 指定飞控mavlink 串口返回的数据类别 防止飞控启动滞后
flashTicker.start(); //监听 按flash键时 主动发布对频主题 //flashTicker.start(); //监听 按flash键时 主动发布对频主题
/////////////////////////////////MQTT_语音_MAVLINK 部分结束 /////////////////////////////////MQTT_语音_MAVLINK 部分结束
@ -192,7 +200,7 @@ void setup()
// //slowup(); // //slowup();
// } // }
fc.playText("启动完成");
Serial.println("PullupDevice is ready!"); Serial.println("PullupDevice is ready!");
} }
void slowup() void slowup()
@ -321,7 +329,11 @@ void checkinited()
// 在核心1上执行重要的延迟低的 // 在核心1上执行重要的延迟低的
void loop() void loop()
{ {
tksendinfo.update(); // 定时发送信息任务 // tksendinfo.update(); // 定时发送信息任务
pubTicker.update(); //定时 发布主题
mavTicker.update(); //定时 指定飞控mavlink 串口返回的数据类别 防止飞控启动滞后
sercomm.getcommand(); // 得到控制命令 sercomm.getcommand(); // 得到控制命令
button_checktop.tick(); // 按钮 button_checktop.tick(); // 按钮
button_down.tick(); // 按钮 button_down.tick(); // 按钮
@ -496,6 +508,16 @@ void downbtn_dbclick()
void downbtn_pressstart() void downbtn_pressstart()
{ {
Serial.println("downbtn_pressstart"); Serial.println("downbtn_pressstart");
//两个同时按用于对频
btn_pressatonce++;
if (btn_pressatonce>2) btn_pressatonce=2;
if (btn_pressatonce==2)
{
btn_presssatonce();
return;
}
if (motocontrol.getcontrolstatus().motostatus != MotoStatus::MS_Stop) if (motocontrol.getcontrolstatus().motostatus != MotoStatus::MS_Stop)
{ {
motocontrol.stop(); motocontrol.stop();
@ -510,6 +532,9 @@ void downbtn_pressstart()
void downbtn_pressend() void downbtn_pressend()
{ {
Serial.println("downbtn_pressend"); Serial.println("downbtn_pressend");
btn_pressatonce--;
if (btn_pressatonce<0) btn_pressatonce=0;
motocontrol.stop(); motocontrol.stop();
} }
@ -541,10 +566,27 @@ void upbtn_dbclick()
motocontrol.moto_run(MotoStatus::MS_Up); motocontrol.moto_run(MotoStatus::MS_Up);
} }
} }
// 两个按钮同时按下
void btn_presssatonce()
{
Serial.println("btn_presssatonce");
led_show(255,255, 255); // 高亮一下
fc.playText("发送对频信息");
fc.pubMQTTmsg(topicHandle[0], fc.getMacAdd());
}
// 收线按钮-长按 // 收线按钮-长按
void upbtn_pressstart() void upbtn_pressstart()
{ {
Serial.println("upbtn_pressstart"); Serial.println("upbtn_pressstart");
//两个同时按用于对频
btn_pressatonce++;
if (btn_pressatonce>2) btn_pressatonce=2;
if (btn_pressatonce==2)
{
btn_presssatonce();
return;
}
if (motocontrol.getcontrolstatus().motostatus != MotoStatus::MS_Stop) if (motocontrol.getcontrolstatus().motostatus != MotoStatus::MS_Stop)
{ {
motocontrol.stop(); motocontrol.stop();
@ -559,6 +601,9 @@ void upbtn_pressstart()
void upbtn_pressend() void upbtn_pressend()
{ {
Serial.println("upbtn_pressend"); Serial.println("upbtn_pressend");
btn_pressatonce--;
if (btn_pressatonce<0) btn_pressatonce=0;
motocontrol.stop(); motocontrol.stop();
} }
@ -789,8 +834,14 @@ void mavlink_receiveCallback(mavlink_message_t* pMsg, mavlink_status_t* pStatus,
topicPubMsg[0] = buf; //心跳主题 topicPubMsg[0] = buf; //心跳主题
//从心跳里判断 飞机是否解锁 解锁改变飞机状态 //从心跳里判断 飞机是否解锁 解锁改变飞机状态
if (heartbeat.base_mode & 128) { //从心跳里面 判断已经解锁 if (heartbeat.base_mode & 128) { //从心跳里面 判断已经解锁
if (!curr_armed)
fc.playText("已解锁");
curr_armed=true;
topicPubMsg[10] = fc.setNBit(topicPubMsg[10], 4, 1); //设置飞机状态为已解锁状态 1xxxx 第四位为1 代表已解锁 topicPubMsg[10] = fc.setNBit(topicPubMsg[10], 4, 1); //设置飞机状态为已解锁状态 1xxxx 第四位为1 代表已解锁
} else { //心跳里面 判断没有解锁 } else {
if (curr_armed)
fc.playText("已加锁");
curr_armed=false; //心跳里面 判断没有解锁
topicPubMsg[10] = fc.setNBit(topicPubMsg[10], 4, 0); //设置飞机状态为已解锁状态 0xxxx 第四位为0 代表未解锁 topicPubMsg[10] = fc.setNBit(topicPubMsg[10], 4, 0); //设置飞机状态为已解锁状态 0xxxx 第四位为0 代表未解锁
if ((uint8_t)topicPubMsg[10].toInt() & 4) { //如果已经写入了航点 if ((uint8_t)topicPubMsg[10].toInt() & 4) { //如果已经写入了航点
topicPubMsg[10] = fc.setNBit(topicPubMsg[10], 2, 1); //设置为航点写入成功状态 topicPubMsg[10] = fc.setNBit(topicPubMsg[10], 2, 1); //设置为航点写入成功状态
@ -799,53 +850,59 @@ void mavlink_receiveCallback(mavlink_message_t* pMsg, mavlink_status_t* pStatus,
} }
} }
//从心跳里面 判断飞机当前的模式 //从心跳里面 判断飞机当前的模式
if (curr_mode!=heartbeat.custom_mode)
{
curr_mode=heartbeat.custom_mode;
switch (heartbeat.custom_mode) { switch (heartbeat.custom_mode) {
case 0: case 0:
{ {
topicPubMsg[12] = "Stabilize自稳"; topicPubMsg[12] = "姿态模式";
} }
break; break;
case 2: case 2:
{ {
topicPubMsg[12] = "AltHold定高"; topicPubMsg[12] = "定高模式";
} }
break; break;
case 3: case 3:
{ {
topicPubMsg[12] = "Auto自动"; topicPubMsg[12] = "自动模式";
} }
break; break;
case 4: case 4:
{ {
topicPubMsg[12] = "Guided引导"; topicPubMsg[12] = "引导模式";
} }
break; break;
case 5: case 5:
{ {
topicPubMsg[12] = "Loiter留待"; topicPubMsg[12] = "悬停模式";
} }
break; break;
case 6: case 6:
{ {
topicPubMsg[12] = "RTL返航"; topicPubMsg[12] = "返航模式";
} }
break; break;
case 9: case 9:
{ {
topicPubMsg[12] = "Land降落"; topicPubMsg[12] = "降落模式";
} }
break; break;
case 16: case 16:
{ {
topicPubMsg[12] = "PosHold定点"; topicPubMsg[12] = "定点模式";
} }
break; break;
default: default:
{ {
topicPubMsg[12] = "Unknown未知"; topicPubMsg[12] = "未知模式";
} }
break; break;
} }
fc.playText(topicPubMsg[12]);
}
} }
break; break;
@ -1022,6 +1079,7 @@ void pubThread() {
} }
//发送心跳包 //发送心跳包
fc.pubMQTTmsg(topicPub[0], topicPubMsg[0]); fc.pubMQTTmsg(topicPub[0], topicPubMsg[0]);
// printf("pub%s:%s\n",topicPub[0],topicPubMsg[0]);
} else { //非心跳包 有更新才向对应主题发布信息 } else { //非心跳包 有更新才向对应主题发布信息
fc.pubMQTTmsg(topicPub[i], topicPubMsg[i]); fc.pubMQTTmsg(topicPub[i], topicPubMsg[i]);
oldMsg[i] = topicPubMsg[i]; oldMsg[i] = topicPubMsg[i];