PASII/CandeII_1.4/Taskrun/cyclingLed_task.c

101 lines
3.2 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*****************************************************************
;Project: Light
;MCU:
;Date:
;File:
;Function:
******************************************************************/
#include "cyclingLed_task.h"
#include "config.h"
#include "tick.h"
#include "ws2812.h"
#include "detect_task.h"
/*---------------------------------------------------------------*/
//外部变量调用声明
extern TaskFlagUnion_t tTaskFlag;
/*---------------------------------------------------------------*/
//变量定义
unsigned short cycSpeed = 0; //骑行速度
unsigned char cycReSpeedFlag = 0; //骑行速度刷新标志
/*---------------------------------------------------------------*/
//骑行LED旋转任务
void cyclingLed_Task(void)
{
static unsigned char rotate_cycLed=0; //当前轮转到的led
static unsigned short cycDelay=100; //设置灯的转圈速度
static unsigned short timer_cyc = 0; //设置指定的时间节点(相当于定时闹钟)
static unsigned int cycColor = 0x0000;
static unsigned short timer_cycIntervalMax = 0; //骑行数据接收间隔最长时间
if(tTaskFlag.tFlag.cycFlag == 1)
{
if( Get_TaskInitFlag() == 1)
{
WS_CloseAll();
rotate_cycLed= 0;
TimerSet(timer_cycIntervalMax,TIME_CYCBREAK_MAX);
TimerSet(timer_cyc,0);
Set_TaskInitFlag(0);
}
//--每4秒刷新一次骑行数据没有刷新就将速度置为0
if(cycReSpeedFlag == 1)
TimerSet(timer_cycIntervalMax,TIME_CYCBREAK_MAX); //刷新定时器时间(串口更新数据了就会刷新)
if(TimerCheck(timer_cycIntervalMax,TIME_CYCBREAK_MAX))
{
cycSpeed= 0;
cycReSpeedFlag = 1;
TimerSet(timer_cycIntervalMax,TIME_CYCBREAK_MAX); //刷新定时器时间
}
//骑行速度改变
if(cycReSpeedFlag == 1)
{
if( (cycSpeed <= 5) )
{
cycColor = 0xff0000; //绿色
cycDelay = 125;
}
else if( (cycSpeed > 5) && (cycSpeed <= 20) )
{
cycColor = 0xff0000; //绿色
cycDelay = 125;
}
else if( (cycSpeed > 20) && (cycSpeed <= 30) )
{
cycColor = 0xffff00; //黄色出行
cycDelay = 65;
}
else if( (cycSpeed > 30))
{
cycColor = 0x00ff00; //红色
cycDelay = 35;
}
else
{
cycColor = 0x000000;
cycDelay = 20;
}
cycReSpeedFlag = 0;
}
//--轮流显示10个灯
if (TimerCheck(timer_cyc,cycDelay)) //检查闹钟时间是否到达
{
LedBuff_CleanAll();//ledBuff全写低
//---指定ledBuff写入color
LedBuff_WriteOrder( rotate_cycLed ,cycColor);
LedBuff_WriteOrder((rotate_cycLed+1)%10 ,cycColor);
LedBuff_WriteOrder((rotate_cycLed+2)%10 ,cycColor);
WS_Show();
//--设置一个时间闹钟
TimerSet(timer_cyc,cycDelay);
//--设置下一个要显示的灯
rotate_cycLed++;
if(rotate_cycLed>=LED_NUM)
rotate_cycLed=0;
}
}
}