LIRC支持按键重复发送REPEAT按键重复码的方法

本文介绍如何在LIRC库中配置和使用重复码(repeat)。通过修改配置文件/etc/lirc/lircd.conf来添加重复码的支持,实现对遥控器重复信号的识别与发送。文章还提供了具体的配置示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

令LIRC库支持repeat的识别、接收

令LIRC库支持发送重复码的方法是:在LIRC的配置文件中记录重复码的相关数据(repeat的高低电平持续时间),让LIRC库能够识别重复码。

需要发送重复码的前提是能够接收重复码(在/etc/lirc/lircd.conf文件中包含对应的数据)

/etc/lirc/lircd.conf的头部信息

头部信息保存了红外协议的协议部分的数据,demo如下:(注意:各个遥控器学习完成后,得到的头部数据不一定相同,包括各种字段可能不相同,如部分遥控器会有toggle_bit_mask字段而部分没有)

begin remote
  name  factory_remote
  bits           16
  flags SPACE_ENC|CONST_LENGTH
  eps            30
  aeps          100
  header       9000  4500
  one           507  1940
  zero          507   646
  ptrail        507
  repeat        9100 2000
  pre_data_bits   16
  pre_data       0x1109
  gap          108000
  toggle_bit_mask 0x0
  frequency    38000
  duty_cycle   33

      begin codes
          codes ...
      end codes

end remote

当红外学习结束后没有学习到重复码协议的解决办法

通过LIRC学习红外协议后,得到的文件中可能没有包含重复码数据,即/etc/lirc/lircd.conf文件的前几十行的协议数据中没有包含repeat 9100 2050等类似的字段,即为没有成功学习到红外协议的重复码部分,需要手动对这个文件做一点修改使之支持重复码。

将重复码数据增加到/etc/lirc/lircd.conf中

  1. 根据自己的协议的资料,查看其重复码的数据格式,将其转换为电平时间,并根据文件里面已有的协议数据进行误差调整;
  2. 将得到的电平时间按照格式repeat 高电平时间 低电平时间的格式写入到文件里面zero字段之后(如果你的文件有ptrail字段,则写到该字段之后);
  3. 写入格式为:另起一行,空两格,写字段(即repeat),两个Tab,写电平时间
  4. 完成,sudo /etc/init.d/lirc restart; irw按住遥控器按键进行repeat测试。

使用irsend send_start可以实现重复发送按键

irsend send_start remote_name KEY_NAME
s = pylirc.nextcode(1) while (s): for (code) in s: print("Command: ", code["config"]) # For debug: Uncomment this # line to see the return value of buttons RGB(code["config"]) setColor(color) if (not blocking): s = pylirc.nextcode() else: s = [] if (GPIO.input(makerobo_motion_pin) == 0): print("Makerobo Nothing moves ...") # 没有检测到移动的物体; elif (GPIO.input(makerobo_motion_pin) == 1): print("Makerobo Motion detected!") # 有检测到移动的物体; countdown_Ref = 1 sleep(0.1) if (countdown_Ref == 1): countdown_Ref = 0 counter1 = counter[0] while (counter1 != -1): makerobo_segment.clear() # 清除一下显示 #设置时间 makerobo_segment.set_digit(0, 0) makerobo_segment.set_digit(1, 0) makerobo_segment.set_digit(2, int(int(counter1) / 10)) # 取十位 makerobo_segment.set_digit(3, int(counter1) % 10) # 取个位 print("剩余 counter1 秒") # 切换冒号 makerobo_segment.set_colon(time_second % 2) # 控制点位闪烁 counter1 = counter1 - 1 sleep(1) # 将显示缓冲区写入硬件。 # 必须调用此函数才能更新实际的显示led。 makerobo_segment.write_display() buzzer_Ref = 1 if (buzzer_Ref == 1): buzzer_Ref = 0 GPIO.output(makerobo_buzzer, GPIO.HIGH) print("Beep") sleep(0.5) # 延时0.5s GPIO.output(makerobo_buzzer, GPIO.LOW) print("No Beep") sleep(0.5) except KeyboardInterrupt: # 检测到CTRL+C,清除并退出脚本 GPIO.cleanup() makerobo_segment.clear() # 释放资源 makerobo_segment.write_display() # 清空显示 cancel_tmr = True
最新发布
07-11
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值