2024-03-18 15:12:38 +08:00

130 lines
3.6 KiB
C
Raw Permalink 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.

#include "Task.h"
#include "Led.h"
#include "GPIO.h"
#include "config.h"
#include "Buzzer.h"
#include "delay.h"
static u8 isHasSD = false; /*是否有U盘*/
static u8 isHoting = false; /*是否加热*/
static u8 isChangeSD = false; /*U盘状态是否改变*/
static u8 isChangeState = false; /*状态是否改变*/
static u8 LastState = 0; /*上次状态 0未加热 1加热*/
static u8 led1sta,led2sta,led3sta,led4sta,led5sta; /*指示LED状态*/
static u8 LedMode = 0; /*流水模式1有U盘 2无U盘*/
static u8 flowdir = 0; /*流水灯方向*/
static u16 IdleCount = 0; /*空闲延时计数*/
static u8 FlowCount = 4; /*流水LED计数*/
static u16 Count = 0; /*流水延时计数*/
static void StateCheack(); /*输入状态检测*/
static void UpdateLeds(); /*加热中LED指示状态*/
/*主逻辑*/
void MainTaskLoop()
{
StateCheack(); /*输入状态检测*/
if(isChangeSD) return; /*检测到U盘状态变化展示效果*/
if(isHoting) UpdateLeds(); /*加热中LED指示状态*/
else /*进入空闲流水模式*/
{
IdleCount++;
if(IdleCount > 50){ /*进入空闲状态 5秒*/
if(isHasSD) LedMode = 1; /*有U盘*/
else LedMode = 2; /*无U盘*/
IdleCount = 0;
}
}
}
static void StateCheack() /*输入状态检测*/
{
if(~LEDACT_PIN != isHasSD){ /*U盘插入处理*/
isChangeSD = true;
if (LEDACT_PIN) { isHasSD = false; led5sta = 1; led1sta = 0;}
else { isHasSD = true; led5sta = 0; led1sta = 0;}
}
if(~HEAT1_PIN) led2sta = 1; else led2sta = 0; /*加热中,对应加热灯点亮*/
if(~HEAT2_PIN) led3sta = 1; else led3sta = 0;
if(~HOTBED_PIN) led4sta = 1; else led4sta = 0;
if(led2sta || led3sta || led4sta) { if(!LastState) {isHoting = true; isChangeState = true; LastState = 1;}}
else { if(LastState) {isHoting = false; isChangeState = true; LastState = 0;}}
}
static void UpdateLeds() /*加热中LED指示状态*/
{
u8 nowledsta = 0;
LedMode = 0;
nowledsta |= (led1sta << 0);
nowledsta |= (led2sta << 1);
nowledsta |= (led3sta << 2);
nowledsta |= (led4sta << 3);
nowledsta |= (led5sta << 4);
SetAllLed(nowledsta);
}
/*自动模式流水灯循环*/
void SysAutoLoop()
{
if(LedMode == 1)
{
Count++;
if(Count > 35)
{
if(FlowCount==6) flowdir=0;
else if(FlowCount==4) flowdir=1;
SetAllLed(3 << FlowCount);
if(flowdir) FlowCount++;
else FlowCount--;
Count = 0;
}
}
else if(LedMode == 2)
{
Count++;
if(Count > 35)
{
if(FlowCount==7) flowdir=0;
else if(FlowCount==4) flowdir=1;
SetOneLight(FlowCount);
if(flowdir) FlowCount++;
else FlowCount--;
Count = 0;
}
}
}
/*U盘插拔检测*/
void USBCheack()
{
if(isChangeState && (LastState == 1))
{
HotStart();
isChangeState = false;
}
if(isChangeState && (LastState == 0) && LedMode > 0)
{
HotStart();
isChangeState = false;
}
if(isChangeSD & (!isHasSD))
{
BuzzerPlay(100);
SDMountMode();
BuzzerPlay(50);
isChangeSD = false;
}
else if(isChangeSD & isHasSD)
{
BuzzerPlay(50);
SDUninstallMode();
BuzzerPlay(100);
isChangeSD = false;
}
}