前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >分析一个遥控器和接收器的源码

分析一个遥控器和接收器的源码

作者头像
云深无际
发布2020-11-23 14:05:37
发布2020-11-23 14:05:37
92100
代码可运行
举报
文章被收录于专栏:云深之无迹云深之无迹
运行总次数:0
代码可运行

这个头文件是控制主题得代码

代码语言:javascript
代码运行次数:0
复制
//Transmitter Joystick

#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>

RF24 radio(8, 9); //CE, CSN
const byte address[6] = "00001";

char xyData[32] = "";
String Rjoy, Lpot, Rpot, Ljoy;

int delaytime = 20;

void setup()
{
  Serial.begin(9600);
  radio.begin();
  radio.openWritingPipe(address);
  radio.setPALevel(RF24_PA_MIN);
  radio.stopListening();
}

void loop()
{
  Rjoy = analogRead(A1); //Read Right joystick values from VRy
  Lpot = analogRead(A2); //Read Lpot values
  Rpot = analogRead(A3);
  Ljoy = analogRead(A0);

  Serial.print("Ljoy = ");
  Serial.print(Ljoy);
  Serial.print("\t");

  Serial.print("Rjoy = ");
  Serial.print(Rjoy);
  Serial.print("\t");

  Serial.print("Lpot = ");
  Serial.print(Lpot);
  Serial.print("\t");

  Serial.print("Rpot = ");
  Serial.print(Rpot);

  Serial.println();

  //X value
  Rjoy.toCharArray(xyData, 5);          //Put the String (X Value) into a character array
  radio.write(&xyData, sizeof(xyData)); //Send the array data (X-value) to the other NRF24L01 modile

  //Y value
  Lpot.toCharArray(xyData, 5);
  radio.write(&xyData, sizeof(xyData));
  delay(delaytime);
}

这个是遥控器得头文件

代码语言:javascript
代码运行次数:0
复制
//Fan Boat Code

#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
#include <Servo.h>

RF24 radio(8, 9); // CE, CSN
const byte address[6] = "00001";
char receivedData[32] = "";
int xAxis, yAxis;

Servo myServo;
int In3 = 7;
int In4 = 6;
int ENB = 5;
int delaytime = 20;

void setup()
{
  pinMode(In3, OUTPUT);
  pinMode(In4, OUTPUT);
  pinMode(ENB, OUTPUT);
  digitalWrite(In3, HIGH);
  digitalWrite(In4, LOW);
  Serial.begin(9600);
  myServo.attach(3);
  radio.begin();
  radio.openReadingPipe(0, address);
  radio.setPALevel(RF24_PA_MIN);
  radio.startListening();
}

void loop()
{
  if (radio.available())
  {
    radio.read(&receivedData, sizeof(receivedData));
    xAxis = atoi(&receivedData[0]);
    delay(delaytime);
    radio.read(&receivedData, sizeof(receivedData));
    yAxis = atoi(&receivedData[0]);
    delay(delaytime);
  }
  int angelV = map(xAxis, 0, 1023, 130, 60);
  int throttle = map(yAxis, 0, 1023, 0, 255);
  myServo.write(angelV);
  analogWrite(ENB, throttle);

  Serial.print(angelV);
  Serial.print("\t");
  Serial.print(yAxis);
  Serial.print("\t");
  Serial.print(throttle);
  Serial.println();
}

首先是对RF芯片芯片得引脚定义

创建一个32位数据得数组

定义了两个变量来存储轴得信息

创建了一个byte

这地方创建了一个舵机对象

ENB看下面得解释,是个使能引脚

EN得意思就是使能

ENA

ENB

.

.

.

ENZ?无所谓了

这个地方是初始化

三个引脚对应舵机,都是输出得功能

记者2个引脚被写入高与低

告知引脚号

这个地方是无线发送特有得功能

先开启这个无线功能()

代码语言:javascript
代码运行次数:0
复制
https://maniacbug.github.io/RF24/classRF24.html
代码语言:javascript
代码运行次数:0
复制
http://www.taichi-maker.com/homepage/reference-index/arduino-library-index/servo-library/servo-attach/

看这段代码很精简

当无线功能开启时,用指针读取接受得数据,算了一下占多少字节

atoi把字符串转换为整型数

延时一个时间

接着是接收Y轴得数据

在延时一下

接着是对这个数据进行了map,把旋钮得量转换为舵机得偏转角度

然后把值传给数字引脚转动相应得角度

打印么有什么好说得

只能说,写得很(๑•̀ㅂ•́)و✧

接下来看遥控器段得代码

定义了发送得引脚

定义了一个数组,来存储数据

4个string来存储摇杆传感器得值,这个值会被aoti转换到整型

这个是指定串口的波特率

还有对无线芯片的一些设置

摇杆有2个10k的电位器,现在有开关传感器就是4个脚

接着打印输出的信息,调试用吧

这段是发送,要延时发送

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-11-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 云深之无迹 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档