ESP32 FreeRtos实现软件定时器

简介

本章实现重复性定时器和一次性定时器。

通过智能汽车来实现以上两种定时器,重复性定时器应用在每100ms的传感器检测,一次性定时器应用在关闭汽车后备箱门上。

API:

    xTimerCreate //创建时间

    xTimerStart //时间开始

    到时间后,会运行callback函数

 软件定时器的实现一般需要经历个步骤:1.定时器任务的创立;2.定时器开始计时;3.达到定时时间后运行回调函数

程序实现

首先,创建两个句柄,lockHandle, checkHandle。

TimerHandle_t lockHandle, checkHandle;

 在setup()函数内创建锁车定时器,以及创建锁车任务

xTaskCreate(carKey,
              "Check If Owner Press Lock Button",
              1024 * 1,
              NULL,
              1,
              NULL);

lockHandle = xTimerCreate("Lock Car",
                            2000,
                            pdFALSE,
                            (void *)0,    //任务ID
                            lockCarCallback);

编写锁车任务的函数

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
    }

  }
}

定时器计时2S完成后,运行回调函数

void lockCarCallback(TimerHandle_t xTimer) {
  Serial.println("Timer CallBack: Car is Locked");
}

 在setp()函数内创建传感器检测定时器,并开启定时器计时

checkHandle = xTimerCreate("Sensors Check",
                             100,
                             pdTRUE,
                             (void *)1,
                             checkCallback);
  //必须要在 portMAX_DELAY 内开启 timer start
  //portMAX_DELAY is listed as value for waiting indefinitely
  //实际上0xFFFFFFFF 2^32-1  49天 7周
  //在此期间,此task进入Block状态
  xTimerStart(checkHandle, portMAX_DELAY);

 创建传感器检测定时器回调函数,实现打印出当前的Tick时间

void checkCallback(TimerHandle_t xTimer) {
  // ------- 很复杂的检测汽车Sensors的方法,时间不定 ---------
  Serial.print(xTaskGetTickCount());Serial.println("  -  All Sensors are working."); vTaskDelay(random(10, 90));
}

运行环境

网址:软件定时器

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值