发帖
9 0 0

M61-32S 红外遥控

WangChong
论坛元老

77

主题

859

回帖

1万

积分

论坛元老

积分
11533
小安派&M61基本系统教程 621 9 2024-7-7 02:05:16
今天给大家分享一个M61接收红外信号的代码。群里一直说SDK有更新,可是我在github找不到一点。 然后目前使用的SDK是BL的SDK,昨天晚上才拉下来的。

360截图20240707015824.jpg


在上述文件夹下,提供了一个example关于如何使用IR的。 也就是下图的这个库

360截图20240707015944.jpg


但是群友可能并没有那么多BL的芯片,M61,32S的芯片是BL616(可以使用不同的编译命令编译不同的芯片固件). 所以我这边在它的代码上面加以修改使其可以烧录后直接通过红外遥控可以控制LED的闪烁(M61,BL616)

实验效果是每次按下遥控器按键的话,那么会toggle 蓝色led,同时串口输出数据

360截图20240707020245.jpg



代码如下:
  1. #include "board.h"
  2. #include "bflb_ir.h"
  3. #include "bflb_gpio.h"
  4. #include "bl616_glb.h"
  5. #ifdef BL616
  6. #define TEST_IR_RX
  7. #endif

  8. struct bflb_device_s *irrx;

  9. struct bflb_device_s *gpio;

  10. void toggle_gpio(void)
  11. {
  12.     static int state = 1;

  13.     if (state)
  14.     {
  15.         bflb_gpio_set(gpio, GPIO_PIN_15);
  16.         state = 0;
  17.     }
  18.     else
  19.     {
  20.         bflb_gpio_reset(gpio, GPIO_PIN_15);
  21.         state = 1;
  22.     }
  23. }
  24. /* main */
  25. int main(void)
  26. {
  27.     board_init();
  28.     gpio = bflb_device_get_by_name("gpio");
  29.     // 初始化GPIO PIN
  30.     bflb_gpio_init(gpio, 11, (1 << 5) | (1 << (11)) | (0 << (12)));
  31.     // 设置IR的接收或者发送PIN
  32.     GLB_IR_RX_GPIO_Sel((11));

  33.     // 初始化LED
  34.     bflb_gpio_init(gpio, GPIO_PIN_15, GPIO_OUTPUT | GPIO_PULLUP);
  35.     uint64_t rx_data;
  36.     uint8_t rx_len;
  37.     // 配置红外接收
  38.     struct bflb_ir_rx_config_s rx_cfg;
  39.     irrx = bflb_device_get_by_name("irrx");

  40.     /* RX init */
  41.     rx_cfg.rx_mode = IR_RX_NEC;
  42.     // 数据校验, 必须开启 0x00 反转后为0xff
  43.     rx_cfg.input_inverse = true;
  44.     // 滤波
  45.     rx_cfg.deglitch_enable = false;
  46.     bflb_ir_rx_init(irrx, &rx_cfg);

  47.     // 开启接收
  48.     bflb_ir_rx_enable(irrx, true);

  49.     while (1)
  50.     {

  51.         /* Receive */
  52.         rx_len = bflb_ir_receive(irrx, &rx_data);
  53.         printf("Receive bit: %d, value: 0x%x\r\n", rx_len, rx_data);
  54.         printf("%d", ((rx_data & 0xff000000) >> 24));
  55.         if (((rx_data & 0xff000000) >> 24) == 0xba)
  56.         {
  57.             toggle_gpio();
  58.         }
  59.     }
  60. }
复制代码


工程文件我就不贴了,因为你需要根据你自己的环境设置SDK的目录,不如直接拷贝这个代码去运行



──── 0人觉得很赞 ────

使用道具 举报

2024-7-7 09:40:18
2024-7-7 10:06:01
2024-7-7 12:29:59
王哥厉害
2024-7-7 12:40:59
厉害了
2024-7-7 15:21:35

厉害

2024-7-8 08:58:53
王哥厉害!
2024-7-8 10:53:18
2024-7-20 23:32:19
🐮
您需要登录后才可以回帖 立即登录
高级模式
返回
统计信息
  • 会员数: 28483 个
  • 话题数: 40599 篇