/*****************************************************************
;Project:   Light
;MCU:       
;Date:     
;File:      
;Function:  
******************************************************************/
#include "shockLed_task.h"
#include "ws2812.h"
#include "tick.h"
#include "adc.h"
#include "config.h"
#include "detect_task.h"
/*---------------------------------------------------------------*/
//外部变量调用声明 
extern AD_Value_t AD_Value;
extern TaskFlagUnion_t tTaskFlag;
extern unsigned char VoltageStableFlag;  //电池电压稳定标志
/*---------------------------------------------------------------*/
//振动显示电量任务
void shockLed_Task(void)
{
	 static unsigned char shock_state=0;
   static unsigned short time=0;
	 static unsigned char powerLedNum = 0;
   unsigned int powerColor=0; 
	
	if((tTaskFlag.tFlag.shockFlag == 1)&&(VoltageStableFlag == 1))
	{
     if(Get_TaskInitFlag() == 1)
     {
        shock_state  = 0;
        WS_CloseAll();
        Set_TaskInitFlag(0);
     } 
		 
		 switch(shock_state)
		 {
				case 0:  
						if(AD_Value.PowerScale <= 30) //电量小于等于30%显示红灯，大于显示绿灯             
							powerColor=POWER_WARNCOLOR;
						else   
							powerColor=POWER_SAFECOLOR;
						
						//--得到以10个灯等比显示当前电量的灯数
						//数据处理：将每10个划分一个等级，0~9->0,10~19->1,90~99->9,97~100->10
						if(AD_Value.PowerScale >= 100)
								powerLedNum = 10;
						else
								powerLedNum = AD_Value.PowerScale/10;
						
						if(AD_Value.PowerScale <= 10)
						{
							powerLedNum = 1;
						}
						//--ledBuff清零
						LedBuff_CleanAll();
						//--指定ledBuff写入color并亮灯
						LedBuff_WriteNum(powerLedNum,powerColor); 
						WS_Show();
						//--设置一个时间闹钟
						TimerSet(time,5000);  //亮5s
						shock_state = 1;
						break;
				case 1:  //检查时间有没到
						//--检查闹钟时间是否到达
						if(TimerCheck(time,5000))   
						{
								//--指定led灭灯
								WS_CloseAll();
								shock_state = 0;
							  tTaskFlag.tFlag.shockFlag = 0; 
						}
						break;
			 default:
					 shock_state = 0;
					 break;
		 }
	}
}
/*---------------------------------------------------------------*/
//LED闪烁任务
unsigned char flash_state=0;

void FlashLed_Task(void)
{
   static unsigned short time=0;
  
   switch(flash_state)
   {
     case 0:
            LedBuff_WriteNum(10,0xff0000);
			      WS_Show();
            TimerSet(time,200);
            flash_state = 1;
     
       break;
       
     case 1: 
            if(TimerCheck(time,200))
            {
              WS_CloseAll();
              TimerSet(time,200);
              flash_state = 2;
            }              
       break;

     case 2: 
           if(TimerCheck(time,200))
           {
             flash_state = 0;
           }
       
       break;
     
     default: flash_state = 0;
       break;        
   }
  
}



