欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

关于红外遥控器解码的一点疑问

程序员文章站 2022-03-21 23:49:30
...

最开始由3D打印机接触到arduino,燃起了一点兴趣,最近有些空闲时间开始研究arduino程序,发现各种库果然十分方便,适合我这种怕麻烦星人。。。
计划是做红外遥控器控制舵机的小程序,经过一下午的查资料,敲代码,改代码,改代码,改代码。。。终于可以实现功能。按下遥控器数字键舵机转动到相对应的角度。

#include <IRremote.h>
#include <Servo.h>

#define MAX 22
Servo myservo;//定义舵机变量名
int val; 
int angle; 
int RECV_PIN = 7;      //定义红外接收模块输出口接arduino数字引脚11

IRrecv irrecv(RECV_PIN);
decode_results results;
//Car mp3编码
unsigned long rremote_code[MAX] = {
    0xFFA25D,0xFF629D,0xFFE21D,//CH- CH CH+
    0xFF22DD,0xFF02FD,0xFFC23D,//PREV NEXT PLAY
    0xFFE01F,0xFFA857,0xFF906F,//VOL- VOL+ EQ
    0xFF6897,0xFF9867,0xFFB04F,// 0 100+ 200+
    0xFF30CF,0xFF18E7,0xFF7A85,// 1  2  3
    0xFF10EF,0xFF38C7,0xFF5AA5,// 4  5  6
    0xFF42BD,0xFF4AB5,0xFF52AD, // 7  8  9
    0xFFFFFFFF//长按
};

void setup()
{
  Serial.begin(9600);
  irrecv.enableIRIn(); //初始化红外遥控
  myservo.attach(9);//定义舵机接口(9、10 都可以,缺点只能控制2 个)
}

void loop() {
  if (irrecv.decode(&results)) {
    //打印字符串
    int val = getRremoteString(results.value);
      Serial.println("遥控输入:");
      Serial.println(val);
      angle=val*20;
      Serial.println("舵机当前角度:");
      Serial.println(angle);
      myservo.write(angle);//设置舵机旋转的角度
      delay(50);
    irrecv.resume(); // 接收下一个值
  }
}

/**
* 解析红外编码并返回对应的字符串
*/
int getRremoteString(unsigned long code){
  int codeString=0;
      switch (code){
        case 0xFF6897: codeString=0; break;
        case 0xFF30CF: codeString=1; break;
        case 0xFF18E7: codeString=2; break;
        case 0xFF7A85: codeString=3; break;
        case 0xFF10EF: codeString=4; break;
        case 0xFF38C7: codeString=5; break;
        case 0xFF5AA5: codeString=6; break;
        case 0xFF42BD: codeString=7; break;
        case 0xFF4AB5: codeString=8; break;
        case 0xFF52AD: codeString=9; break;
        default: codeString=0;
        }
        return codeString;
}

程序借鉴了arduino中文社区的文章:感谢
关于红外遥控器解码的一点疑问
有几个问题
1.原程序中编码与字符串一一对应的思路非常简洁,但转换后数据类型变为字符串,无法进行后续处理屏蔽掉无关按键只留下数字键,以及给舵机复制操作。尝试强制转换为int型,不过没能成功,希望能获得指点。
2.使用switch语句后无法屏蔽长按操作,当前定义是长按归零。不知怎样实现长按舵机无操作功能。
初次接触arduino编程,水平有限,见谅见谅

相关标签: Arduino