无线遥控控制直流电机和无刷电机开关

 一 目的

        此文章记录了arduino与陶晶驰串口屏实现联动,点击屏幕双态开关远程控制arduino2560板载的直流电机和无刷电机开关。为手搓乒乓球发球机做准备。

二 接线

2.1串口屏接线

串口屏与Arduino UNO接线如下:

————————————————

RX  <-> TX0(D1)   //此种接线必须在串口屏下载时断开连接,arduino通讯时断开串口屏下载工    具,因为串口不能一对多。同样此链接无法实现连接串口屏时串口监视。

TX <->  RX0(D0) //可以通过软串口进行,比如示例图片中接线D6和D7。                                        

GND    <->   GND

VCC   <-> VCC

————————————————

2.2 nRF24L01与arduino uno接线

nRF24L01 与Arduino UNO接线如下:

————————————————
/*nRF24L01   Arduino UNO
VCC         <->       3.3V
GND        <->       GND
CE           <->       D9
CSN        <->        D10
MOSI      <->        D11
MISO      <->        D12

SCK        <->        D13

IRQ         <->        不接
————————————————

2.3 nRF24L01与arduino 2560接线

nRF24L01 与Arduino MEGA接线如下:

————————————————
/*nRF24L01   Arduino MEGA
VCC         <->       3.3V
GND        <->       GND
CE           <->       D53
CSN        <->        D49
MOSI      <->        D51
MISO      <->        D50

SCK        <->        D52

IRQ         <->        不接   

————————————————

三 代码

3.1 发射端代码


#define lenth 6
#include <SoftwareSerial.h>#include <SPI.h>
#include "printf.h"
#include "RF24.h"
#define CE_PIN 9
#define CSN_PIN 10
//#define LED_BUILTIN 13
// 定义引脚
RF24 radio(CE_PIN, CSN_PIN);const  byte  addresses[][6]={"66666","88888"};//为双向通信创建两个通道地址,6为写通道,8为读取通道
bool radioNumber = 1;  //接收机和发射机区分标志,可不用 ,本案例保留
bool role = false;  // 接收机和发射机区分转换位,可不用 ,本案例保留 true = TX role, false = RX role
float payload = 0.0;//发射成功,标记
const  char  text[32]  ={0};//用于存放接收到的数据SoftwareSerial TJC(6,7);//7接 串 口 屏 或 串 口 工 具 的RX, arduino的6接 串 口 屏 或 串 口 工 具 的TXvoid  sendend()//结束代码
{TJC.write(0xff);TJC.write(0xff);TJC.write(0xff);
}// the setup function runs once when you press reset or power the board
void setup() {Serial.begin(9600);//串口屏采用相同的波特率while (!Serial) {// some boards need to wait to ensure access to serial over USB}//等待串口准备好Serial.println(F("串口准备就绪"));if (!radio.begin()) {Serial.println(F("发射器无应答!!"));while (1) {}  // hold in infinite loop}//等待发射器回应radio.setChannel(114);//设置信道(0-127),114号通道radio.openWritingPipe(addresses[0]);//88888radio.openReadingPipe(1,  addresses[1]);  //  66666radio.setPALevel(RF24_PA_HIGH);Serial.println(F("发射器准备就绪"));//pinMode(LED_BUILTIN, OUTPUT);TJC.begin(115200);//串口屏采用相同的波特率}// the loop function runs over and over again forever
void loop() {char  str[100];int  m  =  0;//以下判断接收到的串口的信息while  (TJC.available()  >=  lenth)  {unsigned  char  comd[lenth];unsigned  char  head  =  TJC.peek();if  (head  ==  0x55){TJC.readBytes(comd,lenth);if  (comd[3]  ==  0xff  &&  comd[4]  ==  0xff  &&  comd[5]  ==  0xff){if  (comd[1]  ==  0x00)  {if  (comd[2]  ==  0x01)  {sprintf(str,  "t8.txt=\"供求机构打开\"");//屏幕输出打开TJC.print(str);//给串口屏反馈                               sendend();//digitalWrite(LED_BUILTIN, HIGH);   // 板载LED点亮,灯不亮LED在13引脚,与SCK冲突//Serial.println("开灯");//给串口反馈状态//将指令发射出去radio.stopListening();const  char  text2[]  =  {"supplyOpen"};radio.write(&text2,  sizeof(text2));delay(100);Serial.println("状态已发送给MAGA:");Serial.println("接收通道打开");radio.startListening();delay(100);}if  (comd[2]==0x00){sprintf(str,  "t8.txt=\"供球机构关闭\"");//屏幕输出关闭TJC.print(str);                sendend();//digitalWrite(LED_BUILTIN, LOW);    // 板载LED熄灭//Serial.println("关灯");//将指令发射出去radio.stopListening();const  char  text2[]  =  {"supplyClose"};radio.write(&text2,  sizeof(text2));delay(100);Serial.println("状态已发送给MAGA:");Serial.println("接收通道打开");radio.startListening();delay(100);}} else if (comd[1]  ==  0x01)  {if  (comd[2]  ==  0x01)  {sprintf(str,  "t9.txt=\"射球机构打开\"");//屏幕输出打开TJC.print(str);//给串口屏反馈                               sendend();//digitalWrite(LED_BUILTIN, HIGH);   // 板载LED点亮,灯不亮LED在13引脚,与SCK冲突Serial.println("射球机构打开");//给串口反馈状态//将指令发射出去radio.stopListening();const  char  text2[]  =  {"shootOpen"};radio.write(&text2,  sizeof(text2));delay(100);Serial.println("状态已发送给MAGA:");Serial.println("接收通道打开");radio.startListening();delay(100);}if  (comd[2]==0x00){sprintf(str,  "t9.txt=\"射球机构关闭\"");//屏幕输出关闭TJC.print(str);                sendend();//digitalWrite(LED_BUILTIN, LOW);    // 板载LED熄灭Serial.println("射球机构关闭");//将指令发射出去radio.stopListening();const  char  text2[]  =  {"shootClose"};radio.write(&text2,  sizeof(text2));delay(100);Serial.println("状态已发送给MAGA:");Serial.println("接收通道打开");radio.startListening();delay(100);}}}}  else{TJC.read();}}
}

3.2 串口屏代码

串口屏代码:弹起事件

printh 55
printh 00
prints bt0.val,1//根据不同的按键修改bt0按键代码
printh ff ff ff

串口屏代码:按下事件

if(bt0.val==1)//根据不同的按键修改bt0按键代码
{bt0.txt="关闭"
}
if(bt0.val==0)
{bt0.txt="打开"
}

3.3 接收端代码

//arduino maga 接收端代码,接收到open 打开LED灯,接收到close 关闭LED灯。
#include  <SPI.h>
#include  <nRF24L01.h>
#include  <RF24.h>#define SCK_PIN 52
#define MOSI_PIN 51
#define MISO_PIN 50#define DC_EN A3//直流电机调速器控制,供求机构#include <Servo.h>//无刷电机控制,射球机构Servo esc1; // 创建一个Servo对象,用于控制ESC
Servo esc2; // 创建一个Servo对象,用于控制ESC//#define
RF24  radio(53,  49);//  CE,  CSN
const  char  text[32]={0};//用于存放接收到的数据
const  byte  addresses[][6]={"66666","88888"};//为双向通信创建两个通道地址,6为写通道,8为读取通道
int  led=13;//2560上的LED为D13.void  setup()  
{Serial.begin(9600);while (!Serial) {// some boards need to wait to ensure access to serial over USB}//等待串口准备好Serial.println(F("串口准备就绪"));if (!radio.begin()) {Serial.println(F("接收器无应答!!"));while (1) {}  // hold in infinite loop}//等待发射器回应radio.begin();radio.setChannel(114);//设置信道(0-127),114号通道radio.openWritingPipe(addresses[1]);//66666radio.openReadingPipe(1,  addresses[0]);  //  88888radio.setPALevel(RF24_PA_HIGH);Serial.println(F("接收器准备就绪"));radio.startListening();pinMode(DC_EN, OUTPUT); // 设置引脚为输出模式esc1.attach(4); // 将ESC1连接到数字引脚4esc2.attach(5); // 将ESC2连接到数字引脚5esc1.writeMicroseconds(1000); // 设置初始脉冲宽度为1000us(中立点)esc2.writeMicroseconds(1000); // 设置初始脉冲宽度为1000us(中立点)esc1.writeMicroseconds(2000);esc2.writeMicroseconds(2000);delay(500);esc1.writeMicroseconds(1000);esc2.writeMicroseconds(1000);
}void  loop() 
{   //Serial.println("代码在这里执行");//uint8_t pipe;//if (radio.available(&pipe))if  (radio.available()>0)  //  是否有有效数据可以读取       {   //Serial.println("接收到数据1");radio.read(&text,sizeof(text));// delay(500);String comdata  = "";comdata += text;//Serial.println("接收到数据:");//Serial.println(comdata);if  (comdata  ==  "supplyOpen")  {Serial.print("接收到:");Serial.println(comdata);digitalWrite(led,HIGH);analogWrite(DC_EN,177);radio.stopListening();radio.startListening();}if  (comdata  ==  "supplyClose")  {Serial.print("接收到:");Serial.println(comdata);digitalWrite(led,LOW);analogWrite(DC_EN,0);radio.stopListening();radio.startListening();}if  (comdata  ==  "shootOpen")  {Serial.print("接收到:");Serial.println(comdata);//digitalWrite(led,HIGH);esc1.writeMicroseconds(1500);esc2.writeMicroseconds(1500);radio.stopListening();radio.startListening();}if  (comdata  ==  "shootClose")  {Serial.print("接收到:");Serial.println(comdata);//digitalWrite(led,LOW);esc1.writeMicroseconds(1000);esc2.writeMicroseconds(1000);radio.stopListening();radio.startListening();}else{radio.startListening();Serial.println("未收到数据");}
}
}

四 遥控器界面

    4.1本例控制界面

 4.2 首页

4.3 姿态数据界面

4.4 模拟控制界面

 五 实际操控

演示视频

手搓乒乓球发球机

六 源文件

6.1 串口屏文件

请上文章顶端下载

6.2 遥控器文件

请上文章顶端下载

6.3 接收器文件

请上文章顶端下载

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1487989.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

pdf2image:将PDF文档转化为图像的Python魔法

标题&#xff1a;探索pdf2image&#xff1a;将PDF文档转化为图 像的Python魔法 背景 在数字时代&#xff0c;我们经常需要处理各种格式的文档&#xff0c;尤其是PDF文件。PDF以其跨平台的可读性和稳定性而广受欢迎。然而&#xff0c;有时我们需要将PDF文件转换成图像格式&am…

C++ - char*、const char*、char[]、string

const char* const char* 用来定义字符串常量。 char[ ] char型的字符数组是一种定长的数组&#xff0c;存储指定长度的字符序列&#xff0c;数组中的每个元素都是一个char类型的变量&#xff0c;如&#xff1a; char arr[] {h, a, l, l, o, \0}; char c arr[0]; // 访问…

CentOS怎么关闭自动锁屏?

禁止自动锁屏 有时候几分钟不用Centos&#xff0c;系统就自动锁屏了&#xff0c;这是一种安全措施&#xff0c;防止别人趁你不在时使用你的系统。但对于大部分人而言&#xff0c;这是没有必要的&#xff0c;尤其是Centos虚拟机&#xff0c;里面没啥重要的东西&#xff0c;每次…

光伏发电管理软件:光伏企业的核心驱动力

光伏产业面对日益增长的装机容量、复杂多变的运维需求以及激烈的市场竞争&#xff0c;光伏企业如何高效管理、优化运营、提升效益&#xff0c;成为了行业关注的焦点。在此背景下&#xff0c;鹧鸪云光伏发电管理软件应运而生&#xff0c;并逐渐成为光伏企业的核心驱动力。 一、提…

Transformer合集

资料 位置编码&#xff1a;https://zhuanlan.zhihu.com/p/454482273 自注意力&#xff1a;https://zhuanlan.zhihu.com/p/455399791 LN&#xff1a;https://zhuanlan.zhihu.com/p/456863215 ResNet&#xff1a;https://zhuanlan.zhihu.com/p/459065530 Subword Tokenizati…

效率翻倍的秘密:探索AI工具的新世界

大家好&#xff0c;我是你们的效率小助手米兔&#xff01;你是否曾在加班熬夜中挣扎&#xff0c;对着电脑屏幕发呆&#xff0c;感觉工作效率低到怀疑人生&#xff1f;别急&#xff0c;今天我要给你们安利几款超给力的AI工具&#xff0c;让你的工作变得轻松又愉快&#xff01; …

c++笔记4

目录 深度优先搜索DFS DFS的复杂度 DFS与递归 递归与暴力枚举 递归树 DFS与栈 DFS的搜索剪枝 搜索剪枝与优化 可行性剪枝 最优化剪枝 减少等效的分支 优化搜索顺序 搜索的记忆化 搜索的复杂度 大多时候&#xff0c;搜索的复杂度都是指数级的。各种剪枝方案&#…

2024世界技能大赛某省选拔赛“网络安全项目”B模块--操作系统取证解析

2024世界技能大赛某省选拔赛“网络安全项目”B模块--操作系统取证解析 任务一、操作系统取证解析:总结:任务一、操作系统取证解析: A 集团某电脑系统被恶意份子攻击并控制,怀疑其执行了破坏操作,窃取了集团内部的敏感信息,现请分析 A 集团提供的系统镜像和内存镜像,找到…

WIX Toolset 3.11 对本地化的支持方案

1.准备主题文件和本地化文件 WIX Toolset种主题文件为xml文件&#xff0c;负责配置控件的布局&#xff0c; 本地化文件为wxl文件&#xff0c;负责配置待加载的字符串&#xff0c;主题文件根据ID加载需要显示的文字内容。考虑到英文和中文字符长度大小不一&#xff0c;所以这里…

与Bug较量:Codigger之软件项目体检Software Project HealthCheck来帮忙

在软件工程师的世界里&#xff0c;与 Java 小程序中的 Bug 作战是一场永不停歇的战役。每一个隐藏在代码深处的 Bug 都像是一个狡猾的敌人&#xff0c;时刻准备着给我们的项目带来麻烦。 最近&#xff0c;我就陷入了这样一场与 Java 小程序 Bug 的激烈较量中。这个小程序原本应…

【充电模块】

目录 一、实物图 二、原理图 引脚定义 模块特性 原理 三 、简介 四、注意事项 源文件下载 可访问底部联系方式也可前往电子校园网官网搜索关键词 关键词&#xff1a; 充电模块 一、实物图 二、原理图 引脚定…

springboot校园论坛网站-计算机毕业设计源码11401

摘 要 基于Java语言和Springboot框架的校园论坛网站设计与实现&#xff0c;为校园内的师生提供了丰富的功能和便捷的服务。本论文旨在详细介绍该网站的设计思路、功能特点以及技术实现。 论文介绍了网站的注册与登录功能&#xff0c;用户可以通过提供必要信息注册账号&#xf…

代码随想录算法训练营day6 | 242.有效的字母异位词、349. 两个数组的交集、202. 快乐数、1.两数之和

文章目录 哈希表键值 哈希函数哈希冲突拉链法线性探测法 常见的三种哈希结构集合映射C实现std::unordered_setstd::map 小结242.有效的字母异位词思路复习 349. 两个数组的交集使用数组实现哈希表的情况思路使用set实现哈希表的情况 202. 快乐数思路 1.两数之和思路 总结 今天是…

yolov8训练自己的实例分割数据集

参考&#xff1a; 1、官方教程&#xff1a;https://docs.ultralytics.com/zh/tasks/segment/ 2、YOLOv8制作自己的实例分割数据集保姆级教程&#xff08;包含json转txt&#xff09; 下载最新yolov8代码 git clone https://github.com/ultralytics/ultralytics.git一、制作自…

【日常记录】【JS】对一个数组,按照某个字段的值,进行分组

文章目录 1. 前言2. lodash 的分组3. Object.groupBy()参考链接 1. 前言 在开发中&#xff0c;经常会遇到一组数据&#xff0c;要按照某个字段进行分组&#xff0c;这个时候会有很多种方法&#xff0c;可以使用 forEach、reduce、等其他方法 reduce 方法 function groupBy(arr…

亚马逊云科技 re:Inforce 2024中国站大会

亚马逊云科技 re:Inforce 2024中国站大会 - 生成式AI时代的全面安全&#xff0c;将于7月25日本周四在北京富力万丽酒店揭幕

最新2024海报制作工具免费下载,赶紧体验!

在这个信息爆炸的时代&#xff0c;一张独特而有吸引力的海报如何打动观众的心已经成为每个人都需要关注的问题。如果你感到困惑&#xff0c;那么你就来到了正确的地方。今天我们要讨论的是免费版本的海报制作软件。我们将从软件的选择、操作模式、设计技巧等方面进行详细的解释…

AlibabaCloudAI

快速体验 Spring Cloud Alibaba AI JDK要求最低17 1.SpringAI Spring AI 旨在简化包含人工智能相关功能的应用程序的开发&#xff0c;避免不必要的复杂性。 Spring AI 的核心是提供抽象&#xff0c;作为开发 AI 应用程序的基础。这些抽象有多种实现方式&#xff0c;只需极少…

数据库-小练习

根据题目要求&#xff0c;完成下列任务&#xff1a; 新建表和数据库 //建立数据库 mysql> create database mydb15_indexstu; Query OK, 1 row affected (0.00 sec)//使用数据库 mysql> use mydb15_indexstu; Database changed//创建表student mysql> create table s…

Pytorch深度学习实践(5)逻辑回归

逻辑回归 逻辑回归主要是解决分类问题 回归任务&#xff1a;结果是一个连续的实数分类任务&#xff1a;结果是一个离散的值 分类任务不能直接使用回归去预测&#xff0c;比如在手写识别中&#xff08;识别手写 0 − − 9 0 -- 9 0−−9&#xff09;&#xff0c;因为各个类别…