/********************************************************************* 函数名称: void Buzzer_PowerOn(void) 功 能: 上电短响两声 说 明: 入口参数: 返 回 值: 设 计: 丛海旭 时 间: 2013-12-11 修 改: 时 间: *********************************************************************/ void Buzzer_PowerOn(void) { BuzzerOn(); delay(40); BuzzerOff(); delay(15); BuzzerOn(); delay(40); BuzzerOff(); }
void OPBuzzer(void) { if (gb_BuzzerAlwaysOnFlg == true) { BuzzerOn(); } else if (u8BuzerMode != 0) { BuzzerOn(); if (gu32_Sys10ms - u32BuzerStarTime > u32BuzerHoldTime) { BuzzerOff(); u8BuzerMode = 0; } } else if (gb_BatchOverFlg || gb_Error9Flg || ((gb_OverFlg || gb_UnderFlg) && gb_RunFlg)) BuzzerOn(); else BuzzerOff(); }
void Beep1Sec(){ if(BeepID!=0){ ReleaseTimer(BeepID); //強迫停止..否則原本的若還在響..將會佔用1個TIMER不放 BeepID=0; BuzzerOff(); //關閉並省電 } BuzzerOn(); BeepID=TakeTimer(RANDOM,3000,SINGLE,BuzzerOff); }
/** * @brief 关机处理 */ void StateShutdownSecond(void) { S_Device* lpDev; StateDevicePointGet(&lpDev); // 为了整秒 if (lpDev->pTemp->Time.Count != sShutdownCount) { return; } if (lpDev->pTemp->Time.Sec > sShutdownSecond) { if (sShutdown.Out.Time > 0) { sShutdown.Out.Time--; } PowerSaveBglFresh(); } else { return; } sShutdownSecond = lpDev->pTemp->Time.Sec; // S_Value_U16 lValue; // sShutdown.Out.Func.ValueGet(&lValue); // // if (sShutdown.Out.AD == E_TRUE) // { // StateShutdownValueDisp(&lValue); // } // // sShutdown.Out.Func.ValueSet(&lValue); S_Buzzer lBz; lBz.Src = BUZZER_SECOND; lBz.Time = BUZZER_SECOND_TIME; BuzzerOn(&lBz); if (sShutdown.Out.Time == 0) { sShutdown.Out.Func.Shutdown(); StateShutdownToPowerOff(); } else { // 显示秒数 StateShutdownSecDisp(); } }
/********************************************************************* 函数名称: void BuzzerStart(u32 fu32_HoldTime) 功 能: 启动蜂鸣器响fu32_HoldTime×10ms 说 明: 入口参数: fu32_HoldTime:响声时间,为0时一直响报警 返 回 值: 设 计: 丛海旭 时 间: 2013-12-11 修 改: 时 间: *********************************************************************/ void BuzzerStart(u32 fu32_HoldTime) { BuzzerOn(); if (fu32_HoldTime != 0) { u8BuzerMode = 1; u32BuzerHoldTime = fu32_HoldTime; u32BuzerStarTime = gu32_Sys10ms; } else { gb_BuzzerAlwaysOnFlg = true; } }
void ShortBeep(){ BeepCount=0; if(BeepID!=0){ ReleaseTimer(BeepID); //強迫停止..否則原本的若還在響..將會佔用1個TIMER不放 BeepID=0; BuzzerOff(); //關閉並省電 } if (BeepCount2>=BeepTimes){ ReleaseTimer(BeepID2); BeepID2=0; BuzzerOff(); //關閉並省電 }else{ BuzzerOn(); BeepID=TakeTimer(RANDOM,1500,SINGLE,BuzzerOff); } BeepCount2++; }
/** * @brief 开机振动声音灯 */ void StateLedBzVbrCheck(void) { static uint8_t sLedBzVbrCount = 0; if (sDevice.pTemp->Disp.Fresh != TURN_ON) { return; } if (sLedBzVbrCount < 2) { S_Led lLed; lLed.Src = LED_POWER_ON; lLed.Time = LED_POWER_ON_TIME; lLed.Pin = LED_PIN_1, LedOn(&lLed); S_Buzzer lBz; lBz.Src = BUZZER_POWER_ON; lBz.Time = BUZZER_POWER_ON_TIME; BuzzerOn(&lBz); S_Vibration lVbr; lVbr.Src = VIBRATION_POWER_ON; lVbr.Time = VIBRATION_POWER_ON_TIME; VibrationOn(&lVbr); } else { // 取固定的值,防止溢出 sLedBzVbrCount = 3; } sLedBzVbrCount++; }
void BuzzerS(void) { BuzzerOn(); delay(200); BuzzerOff(); }
/** * @brief 状态转换 */ void StateTrans(void) { SourceOn(); PumpOn(); DeviceDataInit(); GasDataInit(); // 获取存储的数据 SaveReadInit(); // 获取存储的设置 Lcd__LangSet(sDevice.pSave->Language); StateSelfCheck(); ChargeOn(); while (1) { // 获取信号量 20mS rt_sem_take(&sSemSystemTime, RT_WAITING_FOREVER); /* Reload IWDG counter */ IWDG_ReloadCounter(); KEY_Get(); DeviceDispCount(); DeviceTimeCount(); switch (sState) { case STATE_SELF_CHECK: StateLedBzVbrCheck(); SelfCheckJumpCheck(); break; case STATE_DETECT: StateDetect(&sGas, &sDevice); // DisRecSet(0, 0, 127, 63); break; case STATE_MENU: MenuKey(gKeyShort); MenuNoOperateCountdown(); // 闪烁 // MenuBlink(&sDevice); break; case STATE_INPUT: StateInputKey(gKeyShort); // 闪烁 if (sDevice.pTemp->Disp.Fresh == TURN_ON) { DisBlink(); } break; case STATE_COUNTDOWN: StateCountdownKey(gKeyShort); StateCountdownSecond(); break; case STATE_RESULT: StateResultKey(gKeyShort); break; case STATE_SHUTDOWN: StateShutdownKey(gKeyLong); StateShutdownSecond(); break; case STATE_POWER_OFF: break; case STATE_INFO: StateInfoKey(gKeyShort); StateInfoSecond(); break; case STATE_CHARGE: // PumpOff(); // sDevice.pTemp->Fan.State = TURN_OFF; break; default: break; } if (sState != STATE_SELF_CHECK) { if (gKeyTrg) { S_Buzzer lBz; lBz.Src = BUZZER_KEY; lBz.Time = BUZZER_KEY_TIME; BuzzerOn(&lBz); } } if (sState != STATE_POWER_OFF) { if (gKeyTrg || gKeyLong) { PowerSaveBglFresh(); } } if (gKeyTrg || gKeyLong) { MenuNoOperateFresh(); } // 设备倒计时 PowerSaveBglCountdown(); LedCountdown(); BuzzerCountdown(); VibrationCountdown(); StateBatCheck(); StateChargeCheck(); } }
void Test_SL030(void) { #define RCVCMD g_cRxBuf[1] #define RCVSTA g_cRxBuf[2] WAKEUP_H; Start_Time(5); while(g_bOverTime==0); WAKEUP_L; Start_Time(5); while(g_bOverTime==0); WAKEUP_H; g_cCardType=0xff; if(CARDIN!=0) return; Init_I2C(); if(I2C_SelectCard(g_cRxBuf,sizeof(g_cRxBuf))==0) return; if((RCVCMD!=0x01)||(RCVSTA!=0)) return; if(g_cRxBuf[g_cRxBuf[0]]==1) g_cCardType=CARDTYPE_S50; //Mifare 1k 4 byte UID else if(g_cRxBuf[g_cRxBuf[0]]==2) g_cCardType=CARDTYPE_S50; //Mifare 1k 7 byte UID else if(g_cRxBuf[g_cRxBuf[0]]==3) g_cCardType=CARDTYPE_UL; //Ultralight 7 byte UID else if(g_cRxBuf[g_cRxBuf[0]]==4) g_cCardType=CARDTYPE_S70; //Mifare 4k 4 byte UID else if(g_cRxBuf[g_cRxBuf[0]]==5) g_cCardType=CARDTYPE_S70; //Mifare 4k 7 byte UID else if(g_cRxBuf[g_cRxBuf[0]]==6) g_cCardType=CARDTYPE_DES; //DesFire 7 byte UID switch(g_cCardType) { case CARDTYPE_S50: case CARDTYPE_S70: if(I2C_LoginSector0(g_cRxBuf,sizeof(g_cRxBuf))==0) return; if((RCVCMD!=0x02)||(RCVSTA!=0x02)) return; if(I2C_WriteBlock1(g_cRxBuf,sizeof(g_cRxBuf))==0) return; if((RCVCMD!=0x04)||(RCVSTA!=0x00)) return; if(I2C_ReadBlock1(g_cRxBuf,sizeof(g_cRxBuf))==0) return; if((RCVCMD!=0x03)||(RCVSTA!=0x00)) return; if(memcmp(&IIC_ComWriteBlock1[3],&g_cRxBuf[3],16)!=0) return; if(I2C_ComIntiPurse1(g_cRxBuf,sizeof(g_cRxBuf))==0) return; if((RCVCMD!=0x06)||(RCVSTA!=0x00)) return; if(I2C_ComIncrPurse1(g_cRxBuf,sizeof(g_cRxBuf))==0) return; if((RCVCMD!=0x08)||(RCVSTA!=0x00)) return; if(I2C_ComDecrPurse1(g_cRxBuf,sizeof(g_cRxBuf))==0) return; if((RCVCMD!=0x09)||(RCVSTA!=0x00)) return; if(I2C_ComReadPurse1(g_cRxBuf,sizeof(g_cRxBuf))==0) return; if((RCVCMD!=0x05)||(RCVSTA!=0x00)) return; //Check value lPurseValue=g_cRxBuf[6]; lPurseValue=(lPurseValue<<8)+g_cRxBuf[5]; lPurseValue=(lPurseValue<<8)+g_cRxBuf[4]; lPurseValue=(lPurseValue<<8)+g_cRxBuf[3]; if(lPurseValue!=0x12345678+0x00000002-0x00000001) return; if(I2C_ComCopyValue(g_cRxBuf,sizeof(g_cRxBuf))==0) return; if((RCVCMD!=0x0a)||(RCVSTA!=0x00)) return; I2C_ComHalt(); BuzzerOn(); break; case CARDTYPE_UL: if(I2C_ComWriteUltralightPage5(g_cRxBuf,sizeof(g_cRxBuf))==0) return; if((RCVCMD!=0x11)||(RCVSTA!=0x00)) return; if(I2C_ComReadUltralightPage5(g_cRxBuf,sizeof(g_cRxBuf))==0) return; if((RCVCMD!=0x10)||(RCVSTA!=0x00)) return; if(memcmp(&IIC_ComWriteUltralightPage5[3],&g_cRxBuf[3],4)!=0) return; I2C_ComHalt(); BuzzerOn(); break; default: break; } }
void MainLoop(uint8_t capPushA, uint8_t capPushB, uint16_t tempSensor, uint16_t battery) { if(statusChange) { // Don't detect cap touch when the LED status has just changed capPushA = 0; capPushB = 0; statusChange--; } if (battery < BATTERY_LOW_THRESH) { //About 2.5v if (batteryLowCounter < 200) batteryLowCounter++; } if ((capPushA == 1) || (capPushB == 1)) { beepTime = 0; // Stop beeping the buzzer when the user touches either of the capacitive touch buttons if (noButtonPressTime < STATUS_CANCEL_THRESH) { // Was a cap touch button pressed recently ? // If yes, this press must have been to increase (button A) or decrease (button B) the whistle count if (capPushA == 1) { if (whistleCount < MAX_WHISTLE_COUNT && batteryLowCounter < BATTERY_LOW_COUNT_THRESH) { whistleCount++; // increase the target whistle count } } else if (capPushB == 1) { if (whistleCount > 0) { whistleCount--; // decrease the target whistle count } } } ShowStatus(); // When a cap touch button is pressed, show status (number of whistles left) immediately noButtonPressTime = 0; // Keep track of how much time since a cap touch button was pressed } else { if (noButtonPressTime < 250) noButtonPressTime++; // After showing the status, blink the LED and shut it off to conserve power if ((noButtonPressTime > STATUS_BLINK_THRESH && noButtonPressTime < STATUS_CANCEL_THRESH2) || noButtonPressTime < STATUS_CANCEL_THRESH) { ShowStatus(); } else { CancelStatus(); } } time++; downSample++; if (downSample == TEMP_DOWNSAMPLE_FACTOR) { downSample = 0; uint16_t val = tempSensor; // Process thermistor samples once every ~0.25 sec uint32_t val_lo = mafilt(tempLow, val, TEMP_LOW_PASS_FILTER_N); // low-pass filter the thermistor (ADC) readings to suppress noise //sb(val_lo >> 4); if(val_lo > OVER_TEMP_THRESH_HI) overTemp = 1; else if(val_lo < OVER_TEMP_THRESH_LO) overTemp = 0; int32_t val_hi = (TEMP_HI_PASS_FILTER_N) * val_lo - mafilt(tempHi, val_lo, TEMP_HI_PASS_FILTER_N); // high-pass filter to detect only changes in temperature if (val > MIN_TEMP_WHISTLE_DETECTION && val_hi < -MIN_TEMP_FALL_WHISTLE_DETECTION) { // detect whistle when the temperature is high (> ~100C), and the temperature has sharply fallen whistleOneCount++; } else { if (whistleOneCount > MIN_TEMP_FALL_DURATION_WHISTLE_DETECTION) { // See if the temperature fell for a duration greater than 3 secs before rising again // Whistle detection complete ! //sb(128); if (whistleCount > 0) { whistleCount--; if (whistleCount == 0) { // Number of whistles == Target number of whistles ? beepTime = WHISTLE_BEEP_TIME; // Start beeping the buzzer for 45 seconds or until the user touches a cap touch button } statusChange += 6; // to prevent false positives in cap touch after a whistle is detected and the LEDs are flashed } ShowStatus(); // after each whistle, show how many whistles are left on the LEDs noButtonPressTime = 0; // To blink the LED, invoke the same code that shows status when a cap button is touched } whistleOneCount = 0; } //sb(10); } if (beepTime > 0) { if( (beepTime & 0x0F) > 10 ) { BuzzerOn(); // Alternately beep the buzzer } else { BuzzerOff(); } beepTime--; } else { BuzzerOff(); } if(overTemp) BuzzerOn(); //sb(battery >> 2); //sb(tempSensor >> 2); }