作者 王振宇

修复温控问题

... ... @@ -2,6 +2,10 @@
#include "JZ_TempControl.h"
#include "JZ_lamp.h"
#include "JZ_widget.h"
#include "JZ_speaker.h"
#include "wiringPi.h"
#include <unistd.h>
#include <stdio.h>
/* Private constants ---------------------------------------------------------*/
/* Private types -------------------------------------------------------------*/
... ... @@ -9,11 +13,11 @@
/* Private values -------------------------------------------------------------*/
TempControlData *tempData;//存放温度、亮度数据
int InitialLumen;//最初亮度
int tempControlFlag = TEMP_NOTTRIGGER;//判断当前温度是否执行过温控
int tempControlFlag = TEMP_TRIGGER;//判断当前温度是否执行过温控
int light_mode = LIGHT_OFF; //探照灯模式
int tempMax = 70;//限制温度
int Initialflag = DEFAULT_STATUS;
static int delayThreadFlag = 0;
/* Private functions declaration ---------------------------------------------*/
/* Exported functions definition ---------------------------------------------*/
... ... @@ -37,12 +41,12 @@ static void* TempControl_Task(void *arg)
if(OutTime > 0)
{
//tempControlFlag = TEMP_TRIGGER;
printf("触发调控,输入温度%d,输入亮度%d,设置亮度%d,调控时间%d\n",tempData->InputTemp,tempData->InputLumen,InitialLumen,OutTime);
usleep(OutTime*1000);
printf("触发调控,输入温度%d,输入亮度%d,输出亮度%d,设置亮度%d,调控时间%d\n",tempData->InputTemp,tempData->InputLumen,tempData->OutLumen,InitialLumen,OutTime);
delay(OutTime);
}
else
{
usleep(1*1000);
delay(1);
}
OutTime = 0;
... ... @@ -60,13 +64,15 @@ static void* TempControl_Task(void *arg)
int Jz_TempControlTaskCreate(void)
{
//需确保拿到亮度数据后再开启任务
usleep(1000*1000);
delay(1000);
printf("Jz_TempControlTaskCreate\n");
pthread_t pthread;
pthread_attr_t pthread_attr;
pthread_attr_init(&pthread_attr);
pthread_attr_setdetachstate(&pthread_attr, PTHREAD_CREATE_DETACHED); //设置线程分离属性
int ret = pthread_create(&pthread,&pthread_attr,TempControl_Task,NULL);
if(ret !=0)
{
... ... @@ -82,7 +88,7 @@ int Jz_TempControlTaskCreate(void)
printf("线程创建失败\n");
return -1;
}
return 0;
}
... ... @@ -102,7 +108,7 @@ int Jz_LampTempControl(float InputTemp, int InputLumen,int *InitialLumen,int *Ou
{
int ControlFlag = DEFAULT_STATUS; //无变化为0, 升温为1,降温为2
//限制温度高于当前温度
if(tempMax >= InputTemp)
{
... ... @@ -145,7 +151,7 @@ int Jz_LampTempControl(float InputTemp, int InputLumen,int *InitialLumen,int *Ou
}
break;
}
return 0;
}
/************************************
... ... @@ -292,7 +298,7 @@ static void *TempControl_TempChangeTask(void *arg)
tempData->OutLumen = 0;
}
Lumen = tempData->OutLumen;
//判断是否超出温控范围了
if (tempData->InputTemp > tempMax +10) //超出最大温度10度
{
... ... @@ -304,15 +310,19 @@ static void *TempControl_TempChangeTask(void *arg)
Jz_LampLumenControl(Lumen,Lumen);
}
if(tempControlFlag == TEMP_NOTTRIGGER)//改变亮度后一定时间不触发温控
{
if(delayThreadFlag == 0)
{
delayThreadFlag = 1;
JZ_DelayThreadCreate(100);
}
continue;
}
if(Lumen != lastLumen)//亮度改变
{
lastLumen = Lumen;
if(tempControlFlag == TEMP_NOTTRIGGER)//触发了温控
{
tempControlFlag = TEMP_TRIGGER;
continue;
}
if(Lumen != 0)
{
//重设亮度
... ... @@ -322,6 +332,25 @@ static void *TempControl_TempChangeTask(void *arg)
}
}
usleep(200*1000);
delay(200);
}
}
/************************************
*延时恢复温控
*函数名: JZ_TempControlFlag
*函数参数:
*返回值:
*函数作者:wzy
*************************************/
void *JZ_TempControlFlag(void *arg)
{
int delayTime = *(int *)arg;
//延时执行
usleep(delayTime*1000);
tempControlFlag = TEMP_TRIGGER; //温控标志位
delayThreadFlag = 0;
printf("延时恢复温控\n");
}
\ No newline at end of file
... ...
... ... @@ -37,13 +37,14 @@ typedef enum {
/* Exported functions --------------------------------------------------------*/
int Jz_TempControlTaskCreate(void);
int Jz_TempControlTaskCreate(void);//温度控制任务创建
int Jz_LampTempControl(float InputTemp, int InputLumen,int *InitialLumen,int *OutTime,int *OutLumen);
static int Jz_LampGetTempControlTime(float value);
void JZ_LightSetInitialLumen(int value);
void JZ_TempStructInit(void);
static void JZ_TempChangeJudgment(int lastTemp,int curTemp,int *ControlFlag);
static void *TempControl_TempChangeTask(void *arg);
void *JZ_TempControlFlag(void *arg);
#ifdef __cplusplus
}
#endif
... ...
... ... @@ -10,7 +10,7 @@
/* Private types -------------------------------------------------------------*/
/* Private values -------------------------------------------------------------*/
extern int lampAngle;//无人机云台角度
int lampAngle = 0;//无人机云台角度
int gimbalLinkageState = GIMBALLINKAGE_OFF;//云台联动初始状态为开启
pthread_mutex_t gimbalMutex; //无人机云台角度互斥锁
Lamp_Temp *lampTemp; //左右灯温度
... ...
... ... @@ -188,6 +188,7 @@ int uart_send(uint8_t *dataBuf,int dataLen)
// 创建线程
int result = pthread_create(&thread, &task_attr, send_task,(void *)ser);
if (result != 0) {
printf("线程创建失败\n");
return -1;
}
... ...
/* Includes ------------------------------------------------------------------*/
#include "JZ_speaker.h"
#include "JZ_lamp.h"
#include "music.h"
//#include "music.h"
#include "JZ_TempControl.h"
#include <unistd.h>
#include <stdio.h>
/* Private constants ---------------------------------------------------------*/
/* Private types -------------------------------------------------------------*/
/* Private values -------------------------------------------------------------*/
extern int tts_add;
extern int tts_tone;
extern int tts_speed;
// extern int tts_add;
// extern int tts_tone;
// extern int tts_speed;
extern int readyflag;//喊话器准备就绪标志
extern int tempControlFlag;
extern TempControlData *tempData;//温度控制数据
... ... @@ -28,23 +29,23 @@ extern TempControlData *tempData;//温度控制数据
*************************************/
void JZ_SpeechSpeedControlFeature(uint8_t speed)
{
switch(speed){
case 0:
tts_speed=25;
break;
case 1:
tts_speed=50;
break;
case 2:
tts_speed=75;
break;
case 3:
tts_speed=100;
break;
default:
tts_speed=50;
break;
}
// switch(speed){
// case 0:
// tts_speed=25;
// break;
// case 1:
// tts_speed=50;
// break;
// case 2:
// tts_speed=75;
// break;
// case 3:
// tts_speed=100;
// break;
// default:
// tts_speed=50;
// break;
// }
}
/************************************
... ... @@ -67,41 +68,41 @@ void JZ_SpeechSpeedControlFeature(uint8_t speed)
*************************************/
void JZ_TtsToneColorFeature(uint8_t tone)
{
switch(tone){
case 0:
tts_tone=1;
break;
case 1:
tts_tone=2;
break;
case 2:
tts_tone=11;
break;
case 3:
tts_tone=12;
break;
case 4:
tts_tone=31;
break;
case 5:
tts_tone=32;
break;
case 6:
tts_tone=33;
break;
case 7:
tts_tone=34;
break;
case 8:
tts_tone=35;
break;
case 9:
tts_tone=36;
break;
default:
tts_tone=1;
break;
}
// switch(tone){
// case 0:
// tts_tone=1;
// break;
// case 1:
// tts_tone=2;
// break;
// case 2:
// tts_tone=11;
// break;
// case 3:
// tts_tone=12;
// break;
// case 4:
// tts_tone=31;
// break;
// case 5:
// tts_tone=32;
// break;
// case 6:
// tts_tone=33;
// break;
// case 7:
// tts_tone=34;
// break;
// case 8:
// tts_tone=35;
// break;
// case 9:
// tts_tone=36;
// break;
// default:
// tts_tone=1;
// break;
// }
}
/************************************
... ... @@ -115,19 +116,19 @@ void JZ_TtsToneColorFeature(uint8_t tone)
*************************************/
int JZ_TtsPlayFeature(int len,char* data)
{
if(readyflag == 0)
{
return -1;
}
while (GetRecordStatus() == 1 || GetTtsStatus() == 1)
{
usleep(100*1000);
}
usleep(600*1000);
if(GetSpeakerMode() == 2)
{
TTS(tts_tone,100,tts_speed,len,data);
}
// if(readyflag == 0)
// {
// return -1;
// }
// while (GetRecordStatus() == 1 || GetTtsStatus() == 1)
// {
// usleep(100*1000);
// }
// usleep(600*1000);
// if(GetSpeakerMode() == 2)
// {
// TTS(tts_tone,100,tts_speed,len,data);
// }
}
... ... @@ -157,6 +158,7 @@ void JZ_LampLumenControlFeature(uint8_t value1,uint8_t value2)
JZ_LightSetInitialLumen(value);//改变设置的亮度初值
tempControlFlag = TEMP_NOTTRIGGER;//防止温度跳回去
Jz_LampLumenControl(value1,value2);//控制探照灯亮度
}
/************************************
... ... @@ -171,7 +173,60 @@ void Jz_LampGimbalControlFeature(int value)
{
if(value <= 0)
{
int angle = -value;
Jz_Lamp_Gimbal_Control(angle);
int angle = -value;
Jz_Lamp_Gimbal_Control(angle);
}
else
{
Jz_Lamp_Gimbal_Control(0);//U3S云台角度为0~90
}
}
/************************************
*提取 . 之前的字符串
*函数名:JZ_GetBeforeChar
*函数参数:
@dest: 被截取的字符串
@src: 截取后的字符串
*返回值:
*函数作者:wzy
*************************************/
void JZ_GetBeforeChar(const char *dest,char *src)
{
size_t len;
len = strrchr(dest, '.') - dest;//计算文件名长度
memcpy(src, "\0", 256);
strncpy(src, dest, len);//取文件名
src[len] = '\0';
}
/************************************
*延时执行任务线程创建
*函数名: JZ_DelayThreadCreate
*函数参数:
@delayTime: 延时时间
@function: 延时执行的任务
*返回值:
*函数作者:wzy
*************************************/
void JZ_DelayThreadCreate(int delayTime)
{
pthread_t thread;
pthread_attr_t task_attr;
pthread_attr_init(&task_attr); //初始化线程属性
pthread_attr_setdetachstate(&task_attr, PTHREAD_CREATE_DETACHED); //设置线程分离属性
pthread_t tid;
int ret;
if(delayTime > 0)
{
//创建线程,延时执行
ret = pthread_create(&tid,&task_attr,JZ_TempControlFlag,(void *)&delayTime);
if (ret != 0)
{
printf("线程创建失败\n");
}
}
}
\ No newline at end of file
... ...
... ... @@ -17,6 +17,8 @@ int JZ_TtsPlayFeature(int len,char* data);//文本播放功能
void JZ_TtsToneColorFeature(uint8_t tone);//文本喊话音色控制功能
void JZ_LampLumenControlFeature(uint8_t value1,uint8_t value2);//亮度控制功能
void Jz_LampGimbalControlFeature(int value);
void JZ_GetBeforeChar(const char *dest,char *src);//提取 . 之前的字符串
void JZ_DelayThreadCreate(int delayTime);//延时执行线程创建
#ifdef __cplusplus
}
#endif
... ...
... ... @@ -19,7 +19,6 @@
#include "uav_low_speed_data_channel.h"
#include "uav_data_type.h"
#include "JZ_lamp.h"
#include "JZ_TempControl.h"
#include "JZ_widget.h"
... ... @@ -85,10 +84,7 @@ extern int tts_tone;
extern int tts_speed;
extern int set_volume_value;//设置音量值
extern int aplay_flag;//默认是0
extern int WidgetPlayFlag;
extern int TTS_delay;
extern int ReadTimeSpeak_Mode;
int now_play=0;//当前播放状态 播放为1 停止为0
int reset_play=0;//重置播放标志,用于重头开始播放歌曲,默认使用。
... ... @@ -108,10 +104,10 @@ static bool s_isDecodeFinished = true;
static uint16_t s_decodeBitrate = 16000;
/*-------------------------------------------------------*/
pthread_mutex_t s_speakerMutex;//扬声器互斥锁
int lampAngle = 0;//无人机云台角度
extern int lampAngle;//无人机云台角度
char record_file_name[128];//录音文件名
char record_file_name[256];//录音文件名
int playback_delay = 2;//循环播放延迟时间
int playStatusQueryFlag;//播放状态查询标志
int readyflag = 0;//喊话器准备就绪标志
... ... @@ -281,9 +277,7 @@ static T_UAVReturnCode StopPlay(void)
}
static T_UAVReturnCode SetVolume(uint8_t volume)
{
LOG_INFO("Set 文本 volume: {}", volume*81/100*255/100);
{
s_speakerState.volume = volume;
set_volume(volume);
... ... @@ -360,7 +354,7 @@ static T_UAVReturnCode SpeakerControl(T_UavWidgetSpeakerControl *speakerControl)
case 2://关灯
Jz_Lamp_Off();
usleep(200*1000);
Jz_Lamp_Off();
JZ_LampLumenControlFeature(0,0);
break;
case 3://亮度调节
JZ_LampLumenControlFeature(speakerControl->value,speakerControl->value);
... ... @@ -401,7 +395,7 @@ static T_UAVReturnCode SpeakerControl(T_UavWidgetSpeakerControl *speakerControl)
{
switch (speakerControl->action) {
case 4://音频文件上传开启
char opus_file_name[128];
char opus_file_name[256];
size_t len;
stop_music();
... ... @@ -409,10 +403,11 @@ static T_UAVReturnCode SpeakerControl(T_UavWidgetSpeakerControl *speakerControl)
set_paly_state(3);
s_isDecodeFinished = false;//解码标志位
//将不带格式的名字取出来
len = strrchr(speakerControl->strValue, '.') - speakerControl->strValue;//计算文件名长度
memcpy(record_file_name, "\0", 128);
strncpy(record_file_name, speakerControl->strValue, len);//取文件名
record_file_name[len] = '\0';
// len = strrchr(speakerControl->strValue, '.') - speakerControl->strValue;//计算文件名长度
// memcpy(record_file_name, "\0", 256);
// strncpy(record_file_name, speakerControl->strValue, len);//取文件名
// record_file_name[len] = '\0';
JZ_GetBeforeChar(speakerControl->strValue,record_file_name);
sprintf(opus_file_name, "record/%s.opus", record_file_name);
//打开opus文件
s_audioFile = fopen(opus_file_name, "wb");
... ...
... ... @@ -26,7 +26,7 @@ fi
if [ -f /root/sdcard/${Update_PsdkPack} ]; then
# 一次解压
cp /root/sdcard/${Update_PsdkPack} /root/upgrade.tar.gz;
cp /root/sdcard/${Update_PsdkPack} /root/upgrade.tar.gz;
cd /root/;
tar -zxvf upgrade.tar.gz;
... ... @@ -68,7 +68,8 @@ if [ -f /root/sdcard/${Update_PsdkPack} ]; then
# 检查 /root/sdcard/ 下是否存在 .bin 文件
if find /root/sdcard/ -type f -name "*.bin" | grep -q .; then
# 如果存在 .bin 文件
./defeat # 播报升级失败
./defeat # 播报升级失败
else
# 如果不存在 .bin 文件
rm -rf $Update_judgment_file
... ...
#! /bin/bash
echo "updata.sh"
Update_PsdkPack="JZ*"
Update_PsdkPack="JZ_U3S_V*"
Update_Package="Package"
HardwareIdentification="HardwareIdeNum" #硬件码文件
TarPackage_second=UpgradePackage.tar.gz #二次解压包的名字
MD5saveFile=UpdateMD5num #md5文件内部的md5值文件
#得到二次解压包和md5校验文件
# 校验mp5 失败直接删除
... ...