通用遥控器测试

本文主要测试了一套遥控器与接收器的无线数据传输功能。当遥控器按键被按下时,键名会显示在LCD并发送键值到接收器。接收器接收到键值后也会在LCD上显示相应的键名。目前,虽然实现了按键传输,但还存在旋转编码器识别错误和Joystick摇杆值显示与传输问题,这些问题需要在完成作品前解决。
摘要由CSDN通过智能技术生成

本文将测试近期制作的遥控器及接收器之间无线数据传输。

实现功能:

遥控器端按下按键,LCD显示相应的键名,同时发送键值到接收器;

接收器在接到键值后,相应在其LCD上显示键名。

遥控器和接收器合影:

发射器及按键说明

接收器: 

 

 

发射器代码如下:


//LCD控制的头文件
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
//无线需要的头文件
#include <SPI.h>
#include <RF24.h>
#include <RF24_config.h>
#include <nRF24L01.h>
//旋转编码器接线
#define clk A2
#define data  A3
#define sw 8
#define A 2
#define B 3
#define C 4
#define D 5
#define E 6
#define F 7
#define X A0
#define Y A1

//无线接口定义如下:
/*nRF24L01   Arduino UNO
VCC        <->        3.3V
GND        <->        GND
CE        <->         D9
CSN        <->        D10
MOSI<->               D11
MISO<->               D12
SCK        <->        D13
IRQ        <->        不接
*/
//按键定义如下
/*
• Button A – Connects to D2
• Button B – Connects to D3
• Button C – Connects to D4
• Button D – Connects to D5
• Button E – Connects to D6
• Button F – Connects to D7
*/
//LCD接口定义如下
/*
• GND – Connects to GND
• VCC – Connects to 5V
• SDA – Connects to A4
• SCL – Connects to A5
*/
//Joystick接口定义如下
/*
• X axis – Connects to A0
• Y axis – Connects to A1
• SW2    – Connects to D8
*/
volatile boolean TurnDetected;//编码器检测标识
volatile boolean up;//编码器检测

int State;
int counter;
int LastState;

LiquidCrystal_I2C lcd(0x27, 16, 2);
RF24 radio(9, 10); // CE, CSN
const byte address[6] = "00001";//无线发射器配码,需要接收及发射使用相同的六位字符

void setup() {
  int x,y;
  int z=1;
 //LCD 初始化
  lcd.init();
  lcd.backlight();
  lcd.begin(16, 2);
 //串口初始化,用于测试,成功后去除
  Serial.begin(9600);
 //旋转编码器接口定义
  pinMode(clk, INPUT);
  pinMode(data, INPUT);
  pinMode(sw, INPUT);
  pinMode(A, INPUT);
  pinMode(B, INPUT);
  pinMode(C, INPUT);
  pinMode(D, INPUT);
  pinMode(E, INPUT);
  pinMode(F, INPUT);
  pinMode(A0, INPUT);
  pinMode(A1, INPUT);

 //变量定义

  LastState=digitalRead(clk);//旋转编码器变化检测标识
  //初始界面显示内容
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("    WELCOME!    ");
  delay(1000);
  lcd.setCursor(0,0);
  lcd.print("Wireless Control");
  lcd.setCursor(0,1);  
  lcd.print(" Design By Wen ");
  delay(2000);
  
  //复位后,显示准备就绪内容
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("     READY!     ");
  delay(1000);
  lcd.clear();
  //无线发射器初始化
  radio.begin();
  radio.openWritingPipe(address);
  radio.setPALevel(RF24_PA_MIN);
  radio.stopListening();
  
 }
//旋转编码器检测函数
int Rotary_encoder()
{
State = digitalRead(clk); // 读取CLK的状态
   // 如果现在的状态和之前的不一样,说明旋钮转了一格
   if (State != LastState){  
      TurnDetected = true;
      //delay (100);
       if (digitalRead(data) != State) { //如果data的状态和clock的状态不一样,说明编码器顺时针旋转
       counter ++;
       return 1;
        //delay (100);
     } else {   //如果data的状态和clock的状态一样,说明编码器逆时针旋转
       counter --;
       return 0;
        //delay (100);
     }
     //以下代码用于测试编码器是否正常工作,最终需要删掉,避免占用资源和增加功耗
     Serial.print("Position: ");
     Serial.println(counter);
   } 
   LastState = State; //更新编码器标识状态 
}


void loop() {
  
     int x=49;
     int y=49;
     int z=1;
  //const char tex[] = "Hello World";
 // radio.write(&tex, sizeof(tex));
  Serial.println("finsh send
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值