串口屏远程控制arduino 2560 板载LED亮灭

一 目的

此文章记录了arduino与陶晶驰串口屏实现联动,电机屏幕双态开关远程控制arduino2560板载的LED点亮和熄灭。

二 接线

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接 串 口 屏 或 串 口 工 具 的TX


void  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]);//88888
    radio.openReadingPipe(1,  addresses[1]);  //  66666
    radio.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,  "t0.txt=\"open\"");//屏幕输出打开
                 TJC.print(str);//给串口屏反馈                               
                 sendend();
                 //digitalWrite(LED_BUILTIN, HIGH);   // 板载LED点亮,灯不亮LED在13引脚,与SCK冲突
                 Serial.println("开灯");//给串口反馈状态
                 //将指令发射出去
                 radio.stopListening();
                 const  char  text2[]  =  {"open"};
                radio.write(&text2,  sizeof(text2));
                delay(100);
                Serial.println("状态已发送给MAGA:");
                Serial.println("接收通道打开");
                radio.startListening();
                delay(100);
                }
              if  (comd[2]==0x00)
              {
                sprintf(str,  "t0.txt=\"close\"");//屏幕输出关闭
                TJC.print(str);                
                sendend();
                //digitalWrite(LED_BUILTIN, LOW);    // 板载LED熄灭
                Serial.println("关灯");
                 //将指令发射出去
                 radio.stopListening();
                 const  char  text2[]  =  {"close"};
                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
printh ff ff ff

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
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]);//66666
    radio.openReadingPipe(1,  addresses[0]);  //  88888
    radio.setPALevel(RF24_PA_HIGH);
     Serial.println(F("接收器准备就绪"));
     radio.startListening();
}
 
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  ==  "open")  
        {
            Serial.print("01接收到:");
            Serial.println(comdata);
            digitalWrite(led,HIGH);
            radio.stopListening();
            radio.startListening();
        }
        if  (comdata  ==  "close")  
        {
            Serial.print("01接收到:");
            Serial.println(comdata);
            digitalWrite(led,LOW);
            radio.stopListening();
            radio.startListening();
        }
 
    else
    {
        radio.startListening();
        Serial.println("未收到数据");
    }
}
}

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值