【离线语音+红外发射接收+433发射接收】

#include <Arduino.h>
#include <RCSwitch.h>
#include <IRremoteESP8266.h>
#include <IRsend.h>
#include <IRutils.h>

#define RECV_PIN 14     // 红外接收器  引脚
IRrecv IRR(RECV_PIN);   // 红外遥控接收器  引脚
IRsend irsend(4);       // 红外遥控发射对象
decode_results results; // 储存接收到的红外遥控信息

const uint32_t KDS = 0x32A650AF;  // 打开关闭电视
const uint32_t JJYL = 0x32A6A857; // 电视音量调高一点
const uint32_t JYL = 0x32A638C7;  // 电视音量调低一点


RCSwitch mySwitch = RCSwitch();
#define FRT 25 // 设置无线模块 发射 管脚变量
#define FRR 26 // 设置无线模块 接收 管脚变量
int WEI = 24;     //无线模块 发射24位
const unsigned long AKEY = 0x720B12;//0x720B12,0x1D50D2,0x20FC42


void setup()
{
    Serial.begin(9600);           // 串口0波特率
    Serial2.begin(9600);          // 串口2波特率
    pinMode(LED_BUILTIN, OUTPUT); // 设置LED引脚为输出模式
    IRR.enableIRIn();             // 启动红外接收器
    irsend.begin();               // 启动红外发射器

    mySwitch.enableReceive(FRR);  //  设置接收管脚
    mySwitch.enableTransmit(FRT); //  设置FS管脚
    delay(50);
}
void ledkz() // led闪烁一次
{
    digitalWrite(LED_BUILTIN, HIGH);
    delay(100);
    digitalWrite(LED_BUILTIN, LOW);
    delay(100);
}
void HW_js()
{
    if (IRR.decode(&results))
    {
        serialPrintUint64(results.value, HEX);
        Serial.println("");
        ledkz();      // led闪烁一次
        IRR.resume(); // 恢复接收下一个红外遥控信号
    }
    delay(100);
}
void HW_fs() // 串口控制红外发射
{
    while (Serial.available() > 0)
    {
        char val = Serial.read();
        Serial.println(val);
        if (val == 'B')
        {
            mySwitch.send(AKEY, 24);
            delay(1000);
            Serial.println(AKEY);

            ledkz(); // led闪烁一次
        }
    }
}
void SU_03T() // 语音控制红外发射
{
    while (Serial2.available() > 0)
    {
        int serialData = Serial2.read();
        Serial.println(serialData, HEX); // 然后通过串口监视器输出read函数读取的信

        switch (serialData)
        {
        case 0xA1: // 打开关闭电视
            irsend.sendNEC(KDS);
            ledkz();
            break;
        case 0xA3: // 电视音量调高一点
            for (int i = 0; i < 10; i++)
            {
                irsend.sendNEC(JJYL);
                delay(100);
            }
            ledkz();
            break;
        case 0xA4: // 电视音量调低一点
            for (int i = 0; i < 10; i++)
            {
                irsend.sendNEC(JYL);
                delay(100);
            }
            ledkz();
            break;
        }
    }
}



void loop()
{
    HW_js();

    HW_fs();

    SU_03T();
         
    if (mySwitch.available()) {
            
            Serial.print("读取数据 ");
            Serial.print( mySwitch.getReceivedValue() );//输出接收到的值
           // AKEY=mySwitch.getReceivedValue();
            Serial.print(" / ");
            Serial.print( mySwitch.getReceivedBitlength() );//输出获取到的数据长度
            //WEI=mySwitch.getReceivedBitlength();
            Serial.print("bit ");
            Serial.print("协议: ");
            Serial.println( mySwitch.getReceivedProtocol() );//输出获取接收协议

            mySwitch.resetAvailable();//重置可用的值
    }

}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
本人非专业人士,只是一个小小程序员,arduino纯属爱好,所发文章仅限于本人智商,如有问题,请大家指正。 近期对智能家居比较敢兴趣,其中存在几个无线传输的模块,起初选用的2.4G的nRL24L01模块,那个东西真是折腾死人,弄了一个星期都没找到问题点。最后在收拾元件箱子的时候,发现一套以前买的433Mhz模块,就想干脆用这个吧。在各种方式的search,找到了一个lib - RCSwitch,看了例子还比较好用,可以传输24bit的值。立刻装上测试。 315\433射频模块介绍: 当发射电压为3V时,空旷地传输距离约20~50米,发射功率较小,当电压5V时约100~200米,当电压9V时约300~500米,当发射电压为12V时,为最佳工作电压,具有较好的发射效果,发射电流约60毫安,空旷地传输距离700~800米,发射功率约500毫瓦。外接天线:10cm(发射模块天线:10cm,接收模块天线:30cm)多芯或单芯普通导线。 在实际测试中,随便接了跟电线,传输能达到5米,无丢包现象。这个射频模块的穿墙效果,应该会比2.4G的好很多。我家里以前一套315Mhz的报警器,全屋传输无压力。 接线很简单,只有三个脚,两个是电源,一个是数据。 发射端 VCC GND DATA- arduino 10脚(可以变更,在代码中调整) 接收端 VCC GND DATA- arduino 2脚(使用终端2则使用3脚,在代码中调整) 程序使用RCSwitch附带示例修改,传感器值使用随机数替代。 传输思路是将24bit的值分开,前12位为传感器ID,后12位为传感器值,12bit,可以到4096,应该够用了。 其他的控制编码器的例子还没有试,下次测试好了再来。 说明: 还忘了一个重要的东西,在lib中有个代码需要修改,不然会接受到4个重复的值。由于本人对中断不是很熟悉,不知道4个重复值造成的原因,只是测试出改了一个值,请各位大师给予解答。 [pre lang="arduino" line="1"]void RCSwitch::handleInterrupt() { if (repeatCount == 6) { // 需要将 2改为 6repeatCount == 2 if (receiveProtocol1(changeCount) == false){ if (receiveProtocol2(changeCount) == false){ if (receiveProtocol3(changeCount) == false){ //failed } } } repeatCount = 0; } }[/pre] RF射频模块发射端程序部分截图: RF射频模块接收端程序部分截图:
Multisim是一款强大的电子电路仿真软件,可以用于设计、模拟和测试各种类型的电子电路。在Multisim中,我们可以设计红外发射接收电路,并进行仿真和测试。 红外发射接收电路通常由红外发射二极管和红外接收二极管组成。发射电路用于产生红外光信号,接收电路用于接收并解码红外光信号。 在Multisim中,我们可以使用相应的电子元件符号和模型来建立红外发射接收电路。例如,我们可以选择适当的二极管模型作为红外发射二极管和红外接收二极管。然后,我们可以将这些元件放置在电路图中,并用连线进行连接。根据需要,我们还可以添加其他元件,如电阻、电容和集成电路等。 完成电路设计后,我们可以使用Multisim的仿真功能来模拟红外发射接收电路的行为。通过设置电源电压和输入信号等参数,我们可以模拟发射电路产生红外光信号,并模拟接收电路接收和解码红外光信号的过程。仿真结果可以显示电路中各个元件的电流、电压等重要参数,以及输出信号的波形和频谱等信息。 通过Multisim的仿真和测试,我们可以评估和优化红外发射接收电路的性能。例如,我们可以调整电路中的元件数值,以实现更好的发射接收效果。此外,我们还可以通过观察整个仿真过程中各个信号的变化,来理解红外发射接收电路的工作原理和特性。 总之,Multisim是一个非常有用的工具,可以帮助我们设计和仿真红外发射接收电路。它提供了丰富的电子元件库和仿真功能,使我们能够更加高效和准确地进行电路设计和性能评估。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

君零渊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值