1. 程式人生 > >ESP8266 Non-OS SDK開發應用之一 — 控制水泵定時澆花

ESP8266 Non-OS SDK開發應用之一 — 控制水泵定時澆花

void ICACHE_FLASH_ATTR

AlarmTimerCB(){

LOCAL uint32 sntpQueryCtn = 0;

if(sntpQueryCtn == 0 || timeStamp==0){

uint32 timeStampTmp;

timeStampTmp = sntp_get_current_timestamp();

if(timeStampTmp !=0){

timeStamp = timeStampTmp;

//9-10 0:0:0 -- 17784 days= 1,536,451,200s

TRACE("sntp time stamp:%d,%s\n",timeStamp,sntp_get_real_time(timeStamp));

}else if(timeStamp> SNTP_QUERY_INTVL * 2){

timeStamp += ALARM_CHK_INTVL/1000;

}

}else if(timeStamp> SNTP_QUERY_INTVL * 2){

timeStamp += ALARM_CHK_INTVL/1000;

}

os_printf("time stamp:%d,%s\r\n",timeStamp,sntp_get_real_time(timeStamp));

if(timeStamp>0 && bAlarmEnable){

bool bRun = false;

int i=0;

for(i=0;i<MAX_ALARM_NUM;i++){

TRACE("alarm id:%d:%d:%d:%d:%d\r\n",stFlashProtParam.AlarmQueue[i].ID,

stFlashProtParam.AlarmQueue[i].RptMode,

stFlashProtParam.AlarmQueue[i].Start,

stFlashProtParam.AlarmQueue[i].Stop,

stFlashProtParam.AlarmQueue[i].RptIntvl);

if(stFlashProtParam.AlarmQueue[i].RptMode == RPT_ONLY_ONCE ){

if(timeStamp >= stFlashProtParam.AlarmQueue[i].Start && timeStamp < stFlashProtParam.AlarmQueue[i].Stop){

bRun = true;

}else if(timeStamp >= stFlashProtParam.AlarmQueue[i].Stop && timeStamp <= stFlashProtParam.AlarmQueue[i].Stop + ALARM_EXPIRE){

stFlashProtParam.AlarmQueue[i].RptMode = 0-RPT_ONLY_ONCE;

SaveFlashProtParam();

}

}else if(stFlashProtParam.AlarmQueue[i].RptMode > 0 && stFlashProtParam.AlarmQueue[i].RptMode <= DAYS_OF_WEEK){

if(timeStamp >= stFlashProtParam.AlarmQueue[i].Start && timeStamp < stFlashProtParam.AlarmQueue[i].Stop){

bRun = true;

}else if(timeStamp >= stFlashProtParam.AlarmQueue[i].Stop){// && timeStamp <= stFlashProtParam.AlarmQueue[i].Stop + ALARM_EXPIRE){

switch(stFlashProtParam.AlarmQueue[i].RptMode){

case EVERY_HOUR:

stFlashProtParam.AlarmQueue[i].Start += 3600;

stFlashProtParam.AlarmQueue[i].Stop += 3600;

break;

case EVERY_DAY:

stFlashProtParam.AlarmQueue[i].Start += 86400;

stFlashProtParam.AlarmQueue[i].Stop += 86400;

break;

case EVERY_WEEK:

stFlashProtParam.AlarmQueue[i].Start += 86400*7;

stFlashProtParam.AlarmQueue[i].Stop += 86400*7;

break;

case EVERY_MONTH:

break;

case EVERY_YEAR:

break;

case INTVL_SECS:

stFlashProtParam.AlarmQueue[i].Start += stFlashProtParam.AlarmQueue[i].RptIntvl;

stFlashProtParam.AlarmQueue[i].Stop += stFlashProtParam.AlarmQueue[i].RptIntvl;

break;

case INTVL_MINS:

stFlashProtParam.AlarmQueue[i].Start += stFlashProtParam.AlarmQueue[i].RptIntvl * 60;

stFlashProtParam.AlarmQueue[i].Stop += stFlashProtParam.AlarmQueue[i].RptIntvl * 60;

break;

case INTVL_HOURS:

stFlashProtParam.AlarmQueue[i].Start += stFlashProtParam.AlarmQueue[i].RptIntvl * 3600;

stFlashProtParam.AlarmQueue[i].Stop += stFlashProtParam.AlarmQueue[i].RptIntvl * 3600;

break;

case INTVL_DAYS:

stFlashProtParam.AlarmQueue[i].Start += stFlashProtParam.AlarmQueue[i].RptIntvl * 86400;

stFlashProtParam.AlarmQueue[i].Stop += stFlashProtParam.AlarmQueue[i].RptIntvl * 86400;

break;

case DAYS_OF_WEEK:

break;

default:

break;

}

SaveFlashProtParam();

}

}

}

if(bRun){

RelayOn();

}else{

RelayOff();

}

}

sntpQueryCtn++;

sntpQueryCtn %= SNTP_QUERY_INTVL;