Arduino学习笔记 (五) -- 红外接收与解码

摘要:
=4294967295){Stringzi=getjian;Serial.println;如果{digitalWrite;//LED亮起}如果{数字写入;//LED点亮}如果{val+=30;如果{{val=1024;}模拟写入;//Val是从0到255的整数值,对应的电压从0到+5Vintvvvvv=anatogRead;电视连续剧打印ln;//digitalWrite;//LED点亮}如果{//digitalWrite;//LED点亮val-=30;如果{val=1;}模拟写入;//Val是从0到255的整数值,对应的电压从0到+5Vintvvvvv=anatogRead;电视连续剧println;}}不可撤销的。resume();//接收下一个值}}备注:代码需要提前安装IRremote库才能接收红外线。因为使用了数字IO,所以下一步是使用模拟IO。通过长时间按下上下键改变电压,可以控制LED亮度。红外接收的十六进制数据为0。可以设置逻辑来判断长时间按下的键。后来,可以通过红外控制遥控车或机械臂等硬件

实验原料:

  1、PC一台

  2、Arduino UNO R3 + type-b数据线

  3、红外遥控 + 红外接收模块

  4、发光led二极管

  5、杜邦线若干

  6、电阻(用作限流 100R ~ 1K)

模块连接:

  红外接收器的signal接在数字引脚11上

  GND接控制板的GND

  VCC接控制板上+5V

  发光二极管正极引脚接在数字引脚4上,

  LED负极通过220欧姆电阻回到控制板的GND

效果:

  红外遥控器按下按键时,电脑的串口监视器显示按键编码

  若按下数字键1,则LED点亮

  若按下数字键2,则LED熄灭

下面上代码

#include <IRremote.h>

int RECV_PIN = 11;//定义红外接收器的引脚为11
int LED_PIN = 4; //定义发光LED引脚数字4
int a = 0;
IRrecv irrecv(RECV_PIN);

decode_results results;

String jian[17] = {
  "1", "2", "3",
  "4", "5", "6",
  "7", "8", "9",
  "*", "0", "#",
  "",
  "", "OK", "",
  ""

};
String ma[17] = {
  "16753245", "16736925", "16769565",
  "16720605", "16712445", "16761405",
  "16769055", "16754775", "16748655",
  "16738455", "16750695", "16756815",
  "16718055",
  "16716015", "16726215", "16734885",
  "16730805"

};
void setup()
{
  Serial.begin(9600);       //  串口波特率
  irrecv.enableIRIn();      //  初始化红外接收器
  pinMode(LED_PIN, OUTPUT); //  设置发光LED引脚数字4
}
String getjian(unsigned long mastr) {
  String result = "";
  for ( int i = 0; i < 17; ++i ) {
    if (String(mastr) == ma[i]) {
      result = jian[i];
      break;
    }
  }
  return result;
}

int val = 0 ;
void loop() {
  if (irrecv.decode(&results)) {
    //    Serial.println(results.value);      // 输出按键值(未解码)
    if (results.value != 4294967295) {
      String zi = getjian(results.value);
      Serial.println(zi);
      if (zi == "1") {
        digitalWrite(LED_PIN, HIGH); //LED点亮
      }
      if (zi == "2") {
        digitalWrite(LED_PIN, LOW); //LED点亮
      }
      if (zi == "") {
        val += 30;
        if (val >= 1024) {
          val = 1024;
        }
        analogWrite(LED_PIN, val);//val 是 0~255 的整数值,对应电压从 0 到+5V
        int vvvv = analogRead(LED_PIN);
        Serial.println(vvvv);
        //        digitalWrite(LED_PIN,HIGH);//LED点亮

      }
      if (zi == "") {
        //        digitalWrite(LED_PIN,LOW);//LED点亮
        val -= 30;
        if (val <= 1) {
          val = 1;
        }
        analogWrite(LED_PIN, val);//val 是 0~255 的整数值,对应电压从 0 到+5V
        int vvvv = analogRead(LED_PIN);
        Serial.println(vvvv);
      }
    }
    irrecv.resume(); // 接收下一个值
  }
}

备注:

  代码需要提前安装IRremote库,用于接收红外

  因使用的是数字IO(只能输出高低电平),下一步计划使用模拟IO,通过上下按键来改变电压(PWM占空比)实现LED亮度的控制

  任意按键长按时,红外接收的16进制数据为0,可设置逻辑来判断长按的按键,后期可以通过红外来控制遥控车或者机械臂等硬件

免责声明:文章转载自《Arduino学习笔记 (五) -- 红外接收与解码》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇hyperledger fabric 智能合约开发怎样获得CISSP认证下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

用Tinkercad学arduino之 74HC595寄存器控制8个led跑马灯

项目地址:https://www.tinkercad.com/things/5nsSWyQOAkI-chenillard // Arduino Pattern Creator by PhilCam // http://my.free.time.free.fr/ // Use with Uno R3 + 74HC595 + 8 leds int d...

Arduino HX711使用

参考Github:https://github.com/RobTillaart/HX711 参数意义参考:https://www.yiboard.com/thread-1241-1-1.html set_scale();函数将用于刻度校准的calibration_factor设置为所需的值,tare();函数将其设置归零。 get_units();函数读取...

arduino入门学习实现语音控制LED灯

需要的准备的硬件arduino+PC+麦克风实现语音命令控制LED灯的亮灭。 首先需要将写好的arduino程序烧录到arduino uno主板中,下面是代码如下: int val;//定义变量val int ledpin=10;//定义数字接口13 void setup() { Serial.begin(9600);//设置波特率为9600,这里要跟软...

【Arduino】使用C#实现Arduino与电脑进行串行通讯

在给Arduino编程的时候,因为没有调试工具,经常要通过使用串口通讯的方式调用Serial.print和Serial.println输出Arduino运行过程中的相关信息,然后在电脑上用Arduino IDE的Serial Monitor来查看print出来的信息。Serial Monitor不仅可以接受Arduino发送到电脑的数据,还可以向Ardui...

Arduino与xbee模块点灯实验心得

1.硬件:Seeeduino Stalker v3.0俩块,xbeeS1俩块,led一个,导线,电源,面包板    软件:XCTU,Arduino1.8.2 2.xbee模块配置:恢复出场设置后        主机xbee的    DH:1234,MY:5678        从机xbee的    DH:5678,  MY:1234 (API为disabl...

【雕爷学编程】Arduino动手做(54)---大按键点动模块

37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和模块,依照实践(动手试试)出真知的理念,以学习和交流为目的,这里准备逐一做做实验,不管能否成功,都会记录下来---小小的进步或是搞不掂的问题,希望能够抛砖引玉。  【Arduino】168种传感器模块系列实验(资料+代码+图形...