和12岁小同志搞创客开发:手撕代码,做一款遥控灯(代码片段)

不脱发的程序猿 不脱发的程序猿     2023-03-09     719

关键词:

机缘巧合在网上认识一位12岁小同志,从零开始系统辅导其创客开发思维和技巧。

项目专栏:https://blog.csdn.net/m0_38106923/category_11097422.html 


本篇博文是创客开发:手撕代码篇的最后一节,项目在之前使用Mind+编程中讲到过:和12岁小同志搞创客开发:如何驱动红外遥控器?

这次将通过代码的方式进一步理解红外遥控器的使用。

我们知道家里的那些遥控器,不管是电视还是空调都是通过红外来控制的,我们这次也通过红外来做个遥控灯。

在开始之前,先来个预热实验,通过串口来了解下如何使用红外接收管和遥控器。

项目连线效果如下所示:

驱动程序如下所示:

#include <IRremote.h>

int RECV_PIN = 10;

IRrecv irrecv(RECV_PIN);

decode_results results;

void setup()

  Serial.begin(9600);
  irrecv.enableIRIn(); // Start the receiver


void loop() 
  if (irrecv.decode(&results)) 
    Serial.println(results.value, HEX);
    irrecv.resume(); // Receive the next value
  

下载完成后,打开Arduino IDE的串口监视器(Serial Monitor),设置波特率baud为:9600,与代码中Serial.begin(9600)相匹配。

设置完后,用Mini遥控器的按钮对着红外接收管的方向,任意按个按钮,都能在串口监视器上看到相对应的代码。如下图所示,按数字“0”,接收到对应16进制的代码是FD30CF。每个按钮都有一个特定的16进制的代码。

如果按住常按一个键不放就是出现“FFFFFFFF”。

在串口中,正确接收的话,应该收到以FD开头的六位数。如果遥控器没有对准红外接收管的话,可能会接收到错误的代码。如下图所示:

预热完之后,我们言归正传,开始制作遥控灯。硬件设备其实就是在原有的基础上,加了个LED灯,效果如下图所示:

实现代码如下所示:

#include <IRremote.h>           //调用IRremote.h库
int RECV_PIN = 10;              //定义RECV_PIN变量为10    
int ledPin = 3;                // LED – digital 3
boolean ledState = LOW;         // ledstate用来存储LED的状态
IRrecv irrecv(RECV_PIN);        //设置RECV_PIN(也就是11引脚)为红外接收端
decode_results results;         //定义results变量为红外结果存放位置

void setup()
  Serial.begin(9600);          //串口波特率设为9600
  irrecv.enableIRIn();          //启动红外解码
  pinMode(ledPin,OUTPUT);       // 设置LED为输出状态


void loop() 
  //是否接收到解码数据,把接收到的数据存储在变量results中
  if (irrecv.decode(&results))   
       //接收到的数据以16进制的方式在串口输出   
      Serial.println(results.value, HEX);
    
      //一旦接收到电源键的代码, LED翻转状态,HIGH变LOW,或者LOW变HIGH
      if(results.value == 0xFD00FF)
               ledState = !ledState;             //取反      
               digitalWrite(ledPin,ledState);    //改变LED相应状态        
                
   irrecv.resume();  // 继续等待接收下一组信号
   

在这里,我们多定义了一个变量ledState,通过名字应该就可以看出来含义了,用来存储LED的状态的,由于LED状态就两种(1或者0),所以我们使用boolean变量类型。

setup()函数中,对使用串口,启动红外解码,数字引脚模式进行设置。

到了主函数loop(),一开始还是先判断是否接收到红外码,并把接收到的数据存储在变量results中。

if (irrecv.decode(&results))

一旦接收到数据后,程序就要做两件事。第一件事,判断是否接收到了电源键的红外码。

if(results.value == 0xFD00FF)

第二件事,就是让LED改变状态。

ledState = !ledState;             //取反      
digitalWrite(ledPin,ledState);    //改变LED相应状态   

最后,继续等待下一组信号。

irrecv.resume();  // 继续等待接收下一组信号

和12岁小同志搞创客开发:手撕代码,做一款遥控灯(代码片段)

机缘巧合在网上认识一位12岁小同志,从零开始系统辅导其创客开发思维和技巧。项目专栏:https://blog.csdn.net/m0_38106923/category_11097422.html 本篇博文是创客开发:手撕代码篇的最后一节,项目在之前使用Mind+编程... 查看详情

和12岁小同志搞创客开发:手撕代码,做一款声控灯(代码片段)

机缘巧合在网上认识一位12岁小同志,从零开始系统辅导其创客开发思维和技巧。项目专栏:https://blog.csdn.net/m0_38106923/category_11097422.html 之前两篇博文主要是数字量输入、输出类型传感器的驱动。和12岁小同志搞创客开发... 查看详情

和12岁小同志搞创客开发:手撕代码,做一款声控灯(代码片段)

机缘巧合在网上认识一位12岁小同志,从零开始系统辅导其创客开发思维和技巧。项目专栏:https://blog.csdn.net/m0_38106923/category_11097422.html 之前两篇博文主要是数字量输入、输出类型传感器的驱动。和12岁小同志搞创客开发... 查看详情

和12岁小同志搞创客开发:手撕代码,做一款亮度可调节灯(代码片段)

...1、PWM呼吸灯2、亮度可调节灯机缘巧合在网上认识一位12岁小同志,从零开始系统辅导其创客开发思维和技巧。项目专栏:https://blog.csdn.net/m0_38106923/category_11097422.html 本篇博文中的项目之前使用Mind+编程软件已经实现过... 查看详情

和12岁小同志搞创客开发:手撕代码,做一款亮度可调节灯(代码片段)

...1、PWM呼吸灯2、亮度可调节灯机缘巧合在网上认识一位12岁小同志,从零开始系统辅导其创客开发思维和技巧。项目专栏:https://blog.csdn.net/m0_38106923/category_11097422.html 本篇博文中的项目之前使用Mind+编程软件已经实现过... 查看详情

和12岁小同志搞创客开发:手撕代码,做一款亮度可调节灯(代码片段)

...1、PWM呼吸灯2、亮度可调节灯机缘巧合在网上认识一位12岁小同志,从零开始系统辅导其创客开发思维和技巧。项目专栏:https://blog.csdn.net/m0_38106923/category_11097422.html 本篇博文中的项目之前使用Mind+编程软件已经实现过... 查看详情

和12岁小同志搞创客开发:手撕代码,点亮led灯(代码片段)

...1、Arduino编程架构2、点亮LED灯机缘巧合在网上认识一位12岁小同志,从零开始系统辅导其创客开发思维和技巧。项目专栏:https://blog.csdn.net/m0_38106923/category_11097422.html 本篇博文将在ArduinoIDE软件中手写第一个小Demo,点... 查看详情

和12岁小同志搞创客开发:手撕代码,做一款密室自动门(代码片段)

机缘巧合在网上认识一位12岁小同志,从零开始系统辅导其创客开发思维和技巧。项目专栏:https://blog.csdn.net/m0_38106923/category_11097422.html 所谓密室自动门,就是这门不是轻易能打开的,存在着某些玄关需要你去破... 查看详情

和12岁小同志搞创客开发:手撕代码,做一款密室自动门(代码片段)

机缘巧合在网上认识一位12岁小同志,从零开始系统辅导其创客开发思维和技巧。项目专栏:https://blog.csdn.net/m0_38106923/category_11097422.html 所谓密室自动门,就是这门不是轻易能打开的,存在着某些玄关需要你去破... 查看详情

和12岁小同志搞创客开发:遥控舵机(代码片段)

...舵机控制理论2、舵机控制实践机缘巧合在网上认识一位12岁小同志,从零开始系统辅导其创客开发思维和技巧。​​​项目专栏:https://blog.csdn.net/m0_38106923/category_11097422.html 之前讲到了设计一款亮度可调节灯,在此... 查看详情

和12岁小同志搞创客开发:手撕代码,做一款温湿度检测器(代码片段)

机缘巧合在网上认识一位12岁小同志,从零开始系统辅导其创客开发思维和技巧。项目专栏:https://blog.csdn.net/m0_38106923/category_11097422.html 本篇博文将使用DHT11做一款温湿度检测器,检测的温湿度数据将通过LCD1602显示。... 查看详情

和12岁小同志搞创客开发:手撕代码,做一款温湿度检测器(代码片段)

机缘巧合在网上认识一位12岁小同志,从零开始系统辅导其创客开发思维和技巧。项目专栏:https://blog.csdn.net/m0_38106923/category_11097422.html 本篇博文将使用DHT11做一款温湿度检测器,检测的温湿度数据将通过LCD1602显示。... 查看详情

和12岁小同志搞创客开发:手撕代码,做一款数字骰子(代码片段)

机缘巧合在网上认识一位12岁小同志,从零开始系统辅导其创客开发思维和技巧。项目专栏:https://blog.csdn.net/m0_38106923/category_11097422.html 小时候都玩过飞行棋吧,是不是特别喜欢掷骰子,今天就要通过Arduino来做个... 查看详情

和12岁小同志搞创客开发:手撕代码,做一款数字骰子(代码片段)

机缘巧合在网上认识一位12岁小同志,从零开始系统辅导其创客开发思维和技巧。项目专栏:https://blog.csdn.net/m0_38106923/category_11097422.html 小时候都玩过飞行棋吧,是不是特别喜欢掷骰子,今天就要通过Arduino来做个... 查看详情

和12岁小同志搞创客开发:手撕代码,做一款火焰报警器(代码片段)

机缘巧合在网上认识一位12岁小同志,从零开始系统辅导其创客开发思维和技巧。项目专栏:https://blog.csdn.net/m0_38106923/category_11097422.html 在厨房安装一个火焰报警器应该是非常管用的,如果不小心忘关煤气的话,... 查看详情

和12岁小同志搞创客开发:手撕代码,做一款火焰报警器(代码片段)

机缘巧合在网上认识一位12岁小同志,从零开始系统辅导其创客开发思维和技巧。项目专栏:https://blog.csdn.net/m0_38106923/category_11097422.html 在厨房安装一个火焰报警器应该是非常管用的,如果不小心忘关煤气的话,... 查看详情

和12岁小同志搞创客开发:手撕代码,做一款节拍电子鼓(代码片段)

机缘巧合在网上认识一位12岁小同志,从零开始系统辅导其创客开发思维和技巧。项目专栏:https://blog.csdn.net/m0_38106923/category_11097422.html 本篇博文做一个有趣的小项目,节拍电子鼓:在架子鼓上装上炫彩的LED灯... 查看详情

和12岁小同志搞创客开发:手撕代码,做一款节拍电子鼓(代码片段)

机缘巧合在网上认识一位12岁小同志,从零开始系统辅导其创客开发思维和技巧。项目专栏:https://blog.csdn.net/m0_38106923/category_11097422.html 本篇博文做一个有趣的小项目,节拍电子鼓:在架子鼓上装上炫彩的LED灯... 查看详情