TimerHandle_t lockHandle,checkHandle;
void carKey(void *ptParam) {
byte lockPin = 23;
pinMode(lockPin, INPUT_PULLUP);
for (;;) {
if (digitalRead(lockPin) == LOW) {
//timeout 3000 ticks
//xTimerStart 只是开启时间而已,而不是创造时间对象
//所以如果多次按按钮的话,不会有多个时间对象生成
//多次按按钮相当于每次对timer进行reset xTimerReset()
if (xTimerStart(lockHandle, 3000) == pdPASS) {
Serial.println("About to lock the car");
} else {
Serial.println("Unable to lock the car");
};
vTaskDelay(100);//very rude Button Debounce消抖
}
}
}
void lockCarCallback(TimerHandle_t xTimer) {
Serial.println("Timer CallBack:Car is Locked");
}
void checkCallback(TimerHandle_t xTimer) {
//很复杂的检测汽车Sensors的方法,时间不定
Serial.print(xTaskGetTickCount()); Serial.println(" - A -");
}
void setup() {
Serial.begin(115200);
xTaskCreate(carKey,
"Check If 0wner Press Lock Button",
1024 * 1,
NULL,
1,
NULL);
lockHandle = xTimerCreate("Lock Car",
2000,
pdFALSE,
(void *)0,
lockCarCallback);
checkHandle = xTimerCreate("Sensors Check",
100,
pdTRUE,//多次
(void *)1,
checkCallback);
xTimerStart(checkHandle, portMAX_DELAY);//无限循环
}
void loop() {
}