1、概述
两个UNO板子,通过2.4G模块建立通信通道,一端读取电位器的模拟值,通过无线通道传输到另一端的UNO,另一端uno通过串口读取到的数据来控制连在D9上的舵机。
对于模块不了解的,可以先看一下我们的模块教程[传送门],了解掌握模块使用方法后,再尝试本小实验。因为综合实验一般涉及多个模块,我们仅对全部使用我司产品的客户做技术支持,若只是部分使用我司产品的,我们只对我司产品部分是否有故障进行排查。
2、所需材料
1、UNO主控板:官方板 或者 国产板
2、辅助配件:杜邦线
3、传感器和模块:2.4G无线透传模块、B1K电位器、舵机、14500电池、DC头两节装电池盒
3、接线
UNO-A:串口接2.4G模块,A0接电位器
UNO-B:串口接2.4G模块,D9接舵机
2.4模块需要预想配置成互相连接的模式,即模块A的发射ID对应模块B的接收ID,模块A的接收ID对应模块B的发射ID。如果不会配置可以先看2.4G透传模块的独立教程。
4、实验程序
电位器端:
int angle = analogRead(A0);
void setup(){
Serial.begin(9600);
}
void loop(){
int angle = analogRead(A0);
angle = map(angle, 0, 1023, 0, 180);
Serial.println(angle);
delay(10);
}
void setup(){
Serial.begin(9600);
}
void loop(){
int angle = analogRead(A0);
angle = map(angle, 0, 1023, 0, 180);
Serial.println(angle);
delay(10);
}
舵机端:
#include <Servo.h>//调用库文件
Servo myservo; // 创建一个伺服电机对象
char inByte = 0; //串口接收的数据
int angle = 0; //角度值
String temp = "";//临时字符变量,又或者说是缓存用的吧
void setup()
{
Serial.begin(9600);
myservo.attach(9);
}
void loop()
{
while(Serial.available()>0)
{
inByte=Serial.read();
temp += inByte;//把读到的字符存进临时变量里面缓存,
delay(2); //再继续判断串口还有没有数据,知道把所有数据都读取出来
}
angle = temp.toInt(); //把变量字符串类型转成整型
Serial.println(angle); //输出数据到串口上,以便观察
temp = "";//请看临时变量
myservo.write(angle); //控制舵机转动相应的角度。
delay(100);//延时100毫秒
}
Servo myservo; // 创建一个伺服电机对象
char inByte = 0; //串口接收的数据
int angle = 0; //角度值
String temp = "";//临时字符变量,又或者说是缓存用的吧
void setup()
{
Serial.begin(9600);
myservo.attach(9);
}
void loop()
{
while(Serial.available()>0)
{
inByte=Serial.read();
temp += inByte;//把读到的字符存进临时变量里面缓存,
delay(2); //再继续判断串口还有没有数据,知道把所有数据都读取出来
}
angle = temp.toInt(); //把变量字符串类型转成整型
Serial.println(angle); //输出数据到串口上,以便观察
temp = "";//请看临时变量
myservo.write(angle); //控制舵机转动相应的角度。
delay(100);//延时100毫秒
}
效果如下:
请先
!