查看: 241|回复: 0

【花雕动手做】ASRPRO语音识别(63)---软件定时器开关板载灯

[复制链接]

64

主题

86

帖子

477

积分

中级会员

Rank: 3Rank: 3

积分
477
发表于 2024-2-2 13:40:31 | 显示全部楼层 |阅读模式
ASRPRO-Plus开发板

000 (1).jpg

板子基本介绍

000 (2).jpg

本例实验的LED模块:
1个电源LED,一个可控制LED(与KEY3共用引脚PA4)。

电原理图(红点处D5为可控制LED)

00 (5).jpg

知识点:
软件定时器是一种软件实现的定时功能,它可以在未来的某个时间点执行一个函数。这个函数被称为定时器的回调函数。定时器的周期是指从定时器启动到回调函数执行的时间间隔。简单地说,定时器的回调函数是在定时器的周期到期时执行的。

软件定时器的实现有不同的方法,但一般都需要一个硬件定时器作为基础,以提供精确的时钟信号。软件定时器可以根据需要创建多个,但是它们的精度和稳定性受到硬件定时器的限制。软件定时器的优点是可以灵活地配置定时器的周期、模式(一次性或重复)、优先级等参数,而不需要占用多个硬件定时器资源。

软件定时器在嵌入式系统中有很多应用场景,例如执行周期性的任务、实现PWM输出、测量两个事件之间的时间差等。有些操作系统也提供了软件定时器的功能,以方便开发者使用。

【花雕动手做】实验六十八:使用软件定时器控制板载灯延时闪烁
实验开源代码

  1. #include "asr.h"
  2. extern "C"{ void * __dso_handle = 0 ;}
  3. #include "setup.h"
  4. #include "myLib/asr_event.h"

  5. uint32_t snid;
  6. void ASR_CODE();
  7. uint8_t val;
  8. void stimer_1(TimerHandle_t xTimer);
  9. TimerHandle_t softtimer_1=NULL;
  10. void hardware_init();

  11. /*描述该功能...
  12. */
  13. void ASR_CODE(){
  14.   switch (snid) {
  15.    case 0:
  16.     break;
  17.    case 1:
  18.     xTimerStart(softtimer_1,0);
  19.     break;
  20.    case 2:
  21.     xTimerStop(softtimer_1,0);
  22.     break;
  23.   }

  24. }

  25. //{ID:250,keyword:"命令词",ASR:"最大音量",ASRTO:"音量调整到最大"}
  26. //{ID:251,keyword:"命令词",ASR:"中等音量",ASRTO:"音量调整到中等"}
  27. //{ID:252,keyword:"命令词",ASR:"最小音量",ASRTO:"音量调整到最小"}
  28. void stimer_1(TimerHandle_t xTimer){
  29.   if(digitalRead(4)){
  30.     digitalWrite(4,0);
  31.     delay(200);
  32.     enter_wakeup(5000);
  33.     delay(200);
  34.     val = prompt_play_by_cmd_id(3, -1, play_end_callback, false);
  35.   }
  36.   else{
  37.     digitalWrite(4,1);
  38.     delay(200);
  39.     enter_wakeup(5000);
  40.     delay(200);
  41.     val = prompt_play_by_cmd_id(4, -1, play_end_callback, false);
  42.   }
  43. }

  44. void hardware_init(){
  45.   softtimer_1=xTimerCreate("stimer_1",2000,1,0,stimer_1);
  46.   xTimerStop(softtimer_1,0);
  47.   vTaskDelete(NULL);
  48. }

  49. void setup()
  50. {
  51.   //{speak:娇娇-邻家女声,vol:20,speed:10,platform:haohaodada}
  52.   //{playid:10001,voice:欢迎使用人工智能AI语音助手,用智能管家唤醒我}
  53.   //{playid:10002,voice:我退下了,用智能管家唤醒我}
  54.   //{ID:0,keyword:"唤醒词",ASR:"智能管家",ASRTO:"我在"}
  55.   //{ID:1,keyword:"命令词",ASR:"打开定时器",ASRTO:"定时器已开启"}
  56.   //{ID:2,keyword:"命令词",ASR:"关闭定时器",ASRTO:"定时器已关闭"}
  57.   //{playid:3,voice:好的,马上打开灯光}
  58.   //{playid:4,voice:好的,马上关闭灯光}
  59.   pinMode(4,output);
  60.   setPinFun(4,FIRST_FUNCTION);
  61.   digitalWrite(4,1);
  62.   xTaskCreate(hardware_init,"hardware_init",256,NULL,100,NULL);
  63. }
复制代码

生成模型与编译烧录

01.jpg

02.jpg

实验场景图

03 (2).jpg



回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|好好搭搭在线 ( © 好好搭搭在线 浙ICP备19030393号-1 )

GMT+8, 2024-5-5 18:12 , Processed in 0.335117 second(s), 26 queries .

Powered by Discuz!

© 2001-2024 Comsenz Inc.

快速回复 返回顶部 返回列表