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;