• arduino串口通信


     https://www.arduino.cn/thread-47262-1-1.html

    1软串口和正常串口一样,各种发送函数。

    2多个软口直接发送不需要激活,接受的时候需要激活指定。 

    3目前安测试最多两个软串口

    4单片机之间9600波特率正常,115200会有乱码

    软串口

    #include <SoftwareSerial.h>
    //实例化软串口
    SoftwareSerial mySerial(2, 3); // RX, TX
    
    void setup()
    {
      Serial.begin(115200);
      while (!Serial) {
      }
    
      Serial.println("Goodnight moon!");
    
      mySerial.begin(9600);
      mySerial.println("Hello, world?");
    }
    
    void loop()
    {
      if (mySerial.available())
        Serial.write(mySerial.read());
      if (Serial.available())
        mySerial.write(Serial.read());
    }
    

     同时使用多个软串口
    当需要连接多个串口设备时,可以建立多个软串口,但限于软串口的实现原理,Arduino UNO只能同时监听一个软串口,当存在多个软串口设备时,你需要使用listen() 函数指定需要监听的设备。如程序中存在portOne、portTwo两个软串口对象时,你欲监听portOne,便需要使用portOne.listen() 语句,要切换监听port2,便使用portTwo.listen() 语句。
    示例程序如下:

    /*
    Arduino UNO软串口通信
    通过listen()切换监听软串口
    */
    
    #include <SoftwareSerial.h>
    SoftwareSerial portOne(10, 11);
    SoftwareSerial portTwo(8, 9);
    
    void setup() {
      Serial.begin(9600);
      while (!Serial) {
      }
    
      portOne.begin(9600);
      portTwo.begin(9600);
    }
    
    void loop() {
    //监听1号软串口
      portOne.listen();
    
      Serial.println("Data from port one:");
      while (portOne.available() > 0) {
        char inByte = portOne.read();
        Serial.write(inByte);
      }
    
      Serial.println();
    //监听2号软串口
      portTwo.listen();
    
      Serial.println("Data from port two:");
      while (portTwo.available() > 0) {
        char inByte = portTwo.read();
        Serial.write(inByte);
      }
    
      Serial.println();
    }
    

      

    jiehsou解析

    int ledPin =  2; 
    String comdata = "";
    char terminator = ';';
    void setup() {
       pinMode(ledPin, OUTPUT);
       digitalWrite(ledPin, HIGH);
      Serial.begin(9600);
      while(Serial.read()>= 0){} //clear serialbuffer
    }
      
    void loop() {
      // read data from serial port
      if(Serial.available()>0){
          comdata =Serial.readStringUntil(terminator);
          //Serial.print("REC: ");
          //Serial.println(comdata);
     
          if(comdata=="open"){
          digitalWrite(ledPin, LOW);}
          else{
          digitalWrite(ledPin, HIGH);
            }
            
     
           
        }
        while(Serial.read()>= 0){}
    }
    

      

     

    遥控器发送16进制

    #include <SoftwareSerial.h>
    
    SoftwareSerial mySerial(D2, D1); // RX, TX
    
    
    void setup()
    {
      Serial.begin(115200);
      mySerial.begin(115200);
    
      delay(4000);
     
    }
    
    uint8_t msg1_open[2]={0xe3, 0x01};
    uint8_t msg2_close[2]={0xe3, 0x02};
    uint8_t msg3_hot[2]={0xe3, 0x03};
    uint8_t msg4_clode[2]={0xe3, 0x04};
    uint8_t msg5_27[2]={0xe3, 0x05};
    
    
    
    void loop()
    {
      
       
          
      
        Serial.write(msg1_open, 2);
        mySerial.write(msg1_open, 2);
        delay(3000);
    
      
            
    }
    

      

  • 相关阅读:
    计算某一日期是在一年中第几周
    动态生成web表-asp.net table
    sql server 小技巧(7) 导出完整sql server 数据库成一个sql文件,包含表结构及数据
    循环取月的三位英语名 Jan Feb
    Python面向对象编程
    算法
    UDP Sockets in C#
    C++ 11
    GNU Make
    C++ 11
  • 原文地址:https://www.cnblogs.com/kekeoutlook/p/14195282.html
Copyright © 2020-2023  润新知