陶晶驰串口屏与Arduino Uno通信详解:远程控制Arduino 2560上的LED实现方法

一 材料清单

        arduino uno         1个

        arduino 2560       1个

        nrf24l01               2个

        陶晶驰串口屏      1个

二 本文目的

通过串口屏触摸按键远程控制arduino 2560上的LED 点亮。

三 硬件接线

3.1 发射端接线

3.1.1uno和发射模块接线

nRF24L01 与Arduino UNO接线如下:

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

SCK        <->        D13

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

3.1.2 串口屏和uno接线

串口屏与Arduino UNO接线如下:

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

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

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

GND    <->   GND

VCC   <-> VCC

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

3.2 接收端接线

nRF24L01 与Arduino 2560接线如下:

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

SCK        <->        D52

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

四 代码部分

4.1发射端代码

发射端由串口屏和arduino uno 组成,测试代码如下:

#include  <SPI.h>
#include  <nRF24L01.h>
#include  <RF24.h>
#include<ArduinoJson.h>
#define TJC Serial
#define lenth 6
RF24  radio(9,10);//  CE,  CSN
const  char  text[32]  ={0};//用于存放接收到的数据
const  byte  addresses[][6]={"66666","88888"};//为双向通信创建两个通道地址,6为写通道,8为读取通道
bool  ok=0;

void  sendend()
{
    TJC.write(0xff);
    TJC.write(0xff);
    TJC.write(0xff);
}

void  setup()  
{
    TJC.begin(115200);//串口屏采用相同的波特率
    radio.begin();
    radio.setChannel(114);//设置信道(0-127),114号通道
    radio.openWritingPipe(addresses[0]);//88888
    radio.openReadingPipe(1,  addresses[1]);  //  66666
    radio.setPALevel(RF24_PA_HIGH);
}
    int  n  = 0;
    int  buttun  =  1;

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();
                 radio.stopListening();
                 const  char  text2[]  =  {"open"};
                 bool  ok=radio.write(&text2,  sizeof(text2));
                delay(100);
                //Serial.print("00发送:");
                //Serial.println("OOReqMesFor01")
                radio.startListening();
                delay(100);
                }
              if  (comd[2]==0x00)
              {
                sprintf(str,  "t0.txt=\"close\"");
                TJC.print(str);
                sendend();
                radio.stopListening();
                const  char  text2[]  =  ("close");
                bool  ok=radio.write(&text2,  sizeof(text2));
                delay(100);
                //Serial.print("00发送:");//串口屏接0,1口无法调试,串口不能一对多,不能一边和串口屏通讯,一边和电脑通讯实现监控。
                //Serial.println("OOReqMesFor01")
                radio.startListening();
                delay(100);
              }
             }
            }
        }  else
        {
        TJC.read();
        }
    }
}

 4.2 串口屏代码

串口屏端代码如下:

printh 55
printh 00
prints bt0.val,1
printh ff ff ff

注意:bt0是根据你的按键标签变动的。

4.3 接收端代码

接收端为arduino 2560 ,其代码如下:

#include  <SPI.h>
#include  <nRF24L01.h>
#include  <RF24.h>
RF24  radio(49,  53);//  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(115200);
    radio.begin();
    radio.setChannel(114);//设置信道(0-127),114号通道
    radio.openWritingPipe(addresses[1]);//66666
    radio.openReadingPipe(1,  addresses[0]);  //  88888
    radio.setPALevel(RF24_PA_HIGH);
}
 
void  loop() 
{
    if  (radio.available()  >  0)  //  是否有有效数据可以读取
    {
        radio.read(&text,  sizeof(text));
        delay(500);
        String  comdata  ="";
        comdata  +=  text;
 
        if  (comdata  ==  "open")  
        {
            Serial.print("01接收到:");
            Serial.println(comdata);
            digitalWrite(led,HIGH);
            radio.stopListening();
        }
        if  (comdata  ==  "close")  
        {
            Serial.print("01接收到:");
            Serial.println(comdata);
            digitalWrite(led,LOW);
            radio.stopListening();
            radio.startListening();
        }
 
    else
    {
        radio.startListening();
    }
}
}

作者:wenguitao

物联沃分享整理
物联沃-IOTWORD物联网 » 陶晶驰串口屏与Arduino Uno通信详解:远程控制Arduino 2560上的LED实现方法

发表回复