cy289 发表于 2016-12-23 10:09:58

433M无线接收模块控制LED问题

本帖最后由 cy289 于 2016-12-23 12:13 编辑

脚位及使用说明:
1 GND 电源负极
2 DATA 数据输出(与Mega2560的2口相接)
3 EN 控制引脚,低电平为使能,高电平进入低功耗模式,可用IO口控制。(本人菜鸟这个脚不知道怎么用)
4 VCC 电源正极
http://image.geek-workshop.com/album/201612/23/100217mo0riie21jeaade0.jpg
http://image.geek-workshop.com/album/201612/23/100228x8uchct5ltyuuocd.jpg

下面这个代码 问题是接收不到信号
假设遥控器代码值:
A:2868360B:2868356
C:2868354D:2868355




#include "RCSwitch.h"
int IN1 = 13;
int IN2 = 9;
int IN3 = 10;
int IN4 = 11;
RCSwitch mySwitch = RCSwitch();
volatile int state1 = LOW;      // 定义默认输入状态
volatile int state2 = LOW;      // 定义默认输入状态
volatile int state3 = LOW;      // 定义默认输入状态
void setup() {
Serial.begin(9600);
pinMode(IN1,OUTPUT);
pinMode(IN2,OUTPUT);
pinMode(IN3,OUTPUT);
pinMode(IN4,OUTPUT);
mySwitch.enableReceive(0);// Receiver on inerrupt 0 => that is pin #2
}

void loop()
{
if (mySwitch.available())
{
   char value = mySwitch.getReceivedValue();

   if (value != '0') {
          Serial.println(mySwitch.getReceivedValue());
//         if(value =1621384)       //按A键,LED1亮
//      {
//      digitalWrite(IN1,HIGH);

//      delay(100);
//      }
//      
         switch (value)
   {
         case 1621384://按键A,红灯
      {    state1 = !state1;
            digitalWrite(IN1, state1);
                        
            break;
      }
         case 1621380://按键B,绿灯
      {
            state2 = !state2;
            digitalWrite(IN2, state2);         
         
            break;   
      }
         case 1621378:   //按键C,黄灯
      {
         state3 = !state3;
            digitalWrite(IN3, state3);
          }
          break;
}
   }
    mySwitch.resetAvailable();
}
}

单片机菜鸟 发表于 2016-12-23 14:14:37

这个应该就是一个收到无线信号然后控制一下红蓝绿灯?

单片机菜鸟 发表于 2016-12-23 14:14:55

这个应该就是一个收到无线信号然后控制一下红蓝绿灯?

yuqingshan 发表于 2016-12-23 16:31:57

兄弟,能用433M无线接收模块控制LED必须完成3件事:

1)硬件接线正确,正常供电。一般按厂家提供资料可以了
这是我的接线(仅参考):


2)测出遥控器的代码。当然自己编制出来的码就无需测量,但如果您自己假设遥控器代码值:
A:2868360B:2868356
C:2868354D:2868355
编译后不能接受到的。
下面程序我用的也可以!测量出来后再填到你接受的程序里,也可以用库里例程里的程序。
参考:

//接收端代码
#include "RCSwitch.h"

int IN1 = 8;
int IN2 = 9;
int IN3 = 10;
int IN4 = 11;

RCSwitch mySwitch = RCSwitch();

void setup() {
Serial.begin(9600);
pinMode(IN1,OUTPUT);
pinMode(IN2,OUTPUT);
pinMode(IN3,OUTPUT);
pinMode(IN4,OUTPUT);
mySwitch.enableReceive(0);// Receiver on inerrupt 0 => that is pin #2
}

void loop() {
if (mySwitch.available()) {

    char value = mySwitch.getReceivedValue();

    if (value != '0') {
Serial.println(mySwitch.getReceivedValue());
      if(value == '1')
      {
      digitalWrite(IN1,HIGH);
      digitalWrite(IN2,LOW);
      digitalWrite(IN3,HIGH);
      digitalWrite(IN4,LOW);
      }
      if(value == '5')
      {
      digitalWrite(IN1,LOW);
      digitalWrite(IN2,LOW);
      digitalWrite(IN3,LOW);
      digitalWrite(IN4,LOW);
      }
    }
    mySwitch.resetAvailable();
}
}

//使用本程序,接上315M,433M无线电模块,使用电脑COM串行口,可测量出315M,433M无线电遥控器的发射出的代码值。
/*脚位及使用说明:
1 ANT 接天线端
2 VCC 电源正极
3、4 DATA 数据输出(其中3、4一脚与Mega2560的2口相接)
5 GND 电源负极
*/


3)接收程序正确,这样编译后一般能工作的。
您的程序编译是正常的,但不正常工作,估计您的程序:if(value =1621384)   //按A键,LED1亮。 value =1621384 编码不是您实际用的遥控器编码,当然没有反应动作了!
如果是商品的遥控器,必须进行第2步骤的测量代码!


cy289 发表于 2016-12-24 03:24:50

yuqingshan 发表于 2016-12-23 16:31
兄弟,能用433M无线接收模块控制LED必须完成3件事:

1)硬件接线正确,正常供电。一般按厂家提供资料可 ...

问题是我这个模块和你那个模块不一样啊不知道EN脚怎么使用接不接

wsy0315 发表于 2016-12-25 10:42:29

cy289 发表于 2016-12-24 03:24
问题是我这个模块和你那个模块不一样啊不知道EN脚怎么使用接不接

en从字面意思就是两个模式,高电平是低功耗模式,低功耗应该就是功耗大点的模式,如果需要考虑待机功率一类的,就需要进行编程,如果就是实验就干脆拉低算了!

cy289 发表于 2016-12-27 10:34:11

那在我这个程序的基础上怎么修改呢?
页: [1]
查看完整版本: 433M无线接收模块控制LED问题