433 模块 ARDUINO测试

2018/01/06 00:13
阅读数 23

 

 实验硬件

发射端

 

Arduino + 433超外差发射机     高,低电平和悬空三种模式切换  由简单的官方库修改

/*
  This is a minimal sketch without using the library at all but only works for
  the 10 pole dip switch sockets. It saves a lot of memory and thus might be 
  very useful to use with ATTinys :)
  
  https://github.com/sui77/rc-switch/
*/

int RCLpin = 10;

void setup() {
    pinMode(RCLpin, OUTPUT);
}

void loop() {
   // RCLswitch(0b010001000001);  // DIPs an Steckdose: 0100010000 An:01
 //  delay(2000);

  //  RCLswitch(0b010001000010);  // DIPs an Steckdose: 0100010000 Aus:10
 //  RCLswitch(0);
 //   delay(2000);    


// digitalWrite(RCLpin, LOW);// 不停触发
   digitalWrite(RCLpin, HIGH);// 不处发 } void RCLswitch(uint16_t code) { for (int nRepeat=0; nRepeat<6; nRepeat++) { for (int i=4; i<16; i++) { RCLtransmit(1,3); if (((code << (i-4)) & 2048) > 0) { RCLtransmit(1,3); } else { RCLtransmit(3,1); } } RCLtransmit(1,31); } } void RCLtransmit(int nHighPulses, int nLowPulses) { digitalWrite(RCLpin, HIGH); delayMicroseconds( 350 * nHighPulses); digitalWrite(RCLpin, LOW); delayMicroseconds( 350 * nLowPulses); }

  

STM8+ 433超外差发射机        命令 =  引导码+一系列高低电平

--------------------

接收端

 

Arduino + 433超外差接收机 四种中断模式切换

int pin =13;
volatile int state = LOW;
 int i=0;
void setup()
{Serial.begin(9600);
  pinMode(pin, OUTPUT);
//attachInterrupt(0, blink, CHANGE);// 低 一直触发   高 一直不触发
   attachInterrupt(0, blink,LOW);  // 低 一直触发  高 一直触发
  //attachInterrupt(0, blink,RISING);   //低 一直触发  高 不触发  
//  attachInterrupt(0, blink,FALLING); //低 一直触发  高 不触发  很稳

     digitalWrite(pin,!state);
     delay(10000);
     digitalWrite(pin, state);
     delay(10000);
}
 
void loop()
{
// digitalWrite(pin, state);
}
 
void blink()
{ Serial.println(i+1);
  state = !state;
}

  Arduino + 433超外差接收机 官方库正常解码模式

/*
  Simple example for receiving
  
  https://github.com/sui77/rc-switch/
*/

#include <RCSwitch.h>
#define led1 10  
#define led2 11  
RCSwitch mySwitch = RCSwitch();

void setup() {
  Serial.begin(9600);
    pinMode(led1, OUTPUT);    
      pinMode(led2, OUTPUT);    
  mySwitch.enableReceive(0);  // Receiver on interrupt 0 => that is pin #2
}

void loop() {
  if (mySwitch.available()) {
    
    int value = mySwitch.getReceivedValue();
    
    if (value == 0) {
      Serial.print("Unknown encoding");
    } else {
      if (value ==17) { 
        if( digitalRead(led1)==0){
        digitalWrite(led1, HIGH);
        }
        else{
           digitalWrite(led1, LOW);
          }
        }
      if (value ==18) { 

         if( digitalRead(led2)==0){
        digitalWrite(led2, HIGH);
        }
        else{
           digitalWrite(led2, LOW);
          }
      
      
      }
      Serial.print("Received ");
      Serial.print( mySwitch.getReceivedValue() );
      Serial.print(" / ");
      Serial.print( mySwitch.getReceivedBitlength() );
      Serial.print("bit ");
      Serial.print("Protocol: ");
      Serial.println( mySwitch.getReceivedProtocol() );
    }

    mySwitch.resetAvailable();
  }
}

  

 

发射信号引脚状态\接收信号引脚中断触发方式 上升沿 下降沿 改变(上升+下降) 低电平
高电平 不触发 不触发 不触发 一直触发
低电平 一直触发 一直触发 一直触发 一直触发
悬空 一直触发 一直触发 一直触发 一直触发

 测试结果

可怕结论: 433和330MH信号很容易被针对干扰(又何止是这个频段),具体怎么实现懂的人看表格就能分析出来吧。(让所有这个频段的设备在干扰范围不起作用,怪不国家要严格控制频带的划分和使用还有监测,这么大的弊端)。

可使用到产品的基础:只要没人特意干扰你,大多数的干扰都是随机的,可以通过接收端编码过滤掉。

可用结论:接收端使用上升沿或下降沿或改变三种方式来解码命令

 

 

 

---恢复内容结束---

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部