Arduino UNO红外接收与发送

测试环境:

Mac OS

Arduino UNO

Arudino 1.8.9

实现功能

IoT End-to-end system 的大作业,项目是其中一个部分,为了实现通过Rpi发送指令的一个红外的遥控器。

UNO与RPi用串口通信,UNO从Raspberry Pi 串口读取指令,然后编码发送与接收的一个简单Demo。

这里Rpi的代码尚未放出来,Rpi会发送“XY”的编码。指的就是X-设备,Y-指令。

说明

  • 为了避免红外无法正确定向,发送了三次信号。(这里发送间隔delay时间太长了)
  • 红外的编码没有科学依据,只是为了测试定的数据。
  • Case 2到Case 5都没有定义,预留的位置。
  • <IRremote.h>,在Arudino - tools - manage library
    搜索安装。
/*
  IRsend Test of IoT demo
  Date:2019/12/28

  Receive command from Rpi and test the IRremote demo.
  PIN3 is defined in head file.
  IRsend PIN can only be defined in head file.
  Decode message,example:recData="XY",device = X, command = Y.
*/
#include <IRremote.h> 

IRsend irsend; //Create IRsent objects
int device;
int command;
String recData = "";


void setup()
{
  Serial.begin(9600);
}
void loop()
{
        
     while (Serial.available() > 0)  
    {
        recData += char(Serial.read());
        delay(2);
    }
    //Serial.println(recData);
    
    if (recData.length() > 0)
    {
        int temp = recData.toInt();
        command = temp % 10;
        device = (temp - command) / 10;

        //Switch command case
        if(device == 1 )
        {
        switch (command) {
      case 0:
        //Send command three times to make sure it can be received
        irsend.sendNEC(0xFF6897, 32);
        delay(100);
        break;

        irsend.sendNEC(0xFF6897, 32);
        delay(100);
        break;

        irsend.sendNEC(0xFF6897, 32);
        delay(100);
        break;
        
      case 1:
        irsend.sendNEC(0xFF02FD, 32);
        delay(100);
        break;

        irsend.sendNEC(0xFF02FD, 32);
        delay(100);
        break;

        irsend.sendNEC(0xFF02FD, 32);
        delay(100);
        break;
        
      case 2:
        digitalWrite(3, HIGH);
        break;
      case 3:
        digitalWrite(4, HIGH);
        break;
      case 4:
        digitalWrite(5, HIGH);
        break;
      case 5:
        digitalWrite(6, HIGH);
        break;
          }
        }
        
        //Reset received data
        recData = "";
    }
}
/*
  IRreceive Test of IoT demo
  Date:2019/12/28

  Receive signal from IRsend to turn on or turn off the light.
*/
#include <IRremote.h>
IRrecv irrecv(6); //Create IRreceive objects and choose the IRreceive pin
decode_results results; //Create the object of decode result
int LED_PIN=4;

void setup()
{
        irrecv.enableIRIn(); //Star reveiving
        Serial.begin(9600);
        pinMode(LED_PIN,OUTPUT);
}
void loop()
{
        if (irrecv.decode(&results))
        {
               Serial.println(results.value, HEX); //Output the received signal value in hexadecimal
               Serial.println();
               //Decode

               if(results.value == 0xFF6897)
               {
                digitalWrite(LED_PIN,LOW);//LED turn off
               }

               if(results.value == 0xFF02FD)
               {
                digitalWrite(LED_PIN,HIGH);//LED turn on
               }
               
               irrecv.resume(); //Receive next signal
        }
}

参考:https://blog.csdn.net/qq_39591322/article/details/88838454

发布了12 篇原创文章 · 获赞 3 · 访问量 5536
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章