• Arduino串口的一些高级用法


    1.配置串口通信数据位、校验位、停止位
    通常我们使用Serial.begin(speed)来完成串口的初始化,这种方式,只能配置串口的波特率。
    而使用Serial.begin(speed, config)可以配置数据位、校验位、停止位等。
    例如Serial.begin(9600,SERIAL_8E2)是将串口波特率设为9600,数据位8,偶校验,停止位2。
    config可用配置如下:

    config可选配置 数据位 校验位 停止位   config可选配置 数据位 校验位 停止位
    SERIAL_5N1 5 1   SERIAL_5E2 5 2
    SERIAL_6N1 6 1   SERIAL_6E2 6 2
    SERIAL_7N1 7 1   SERIAL_7E2 7 2
    SERIAL_8N1 8 1   SERIAL_8E2 8 2
    SERIAL_5N2 5 2   SERIAL_5O1 5 1
    SERIAL_6N2 6 2   SERIAL_6O1 6 1
    SERIAL_7N2 7 2   SERIAL_7O1 7 1
    SERIAL_8N2 8 2   SERIAL_8O1 8 1
    SERIAL_5E1 5 1   SERIAL_5O2 5 2
    SERIAL_6E1 6 1   SERIAL_6O2 6 2
    SERIAL_7E1 7 1   SERIAL_7O2 7 2
    SERIAL_8E1 8 1   SERIAL_8O2 8 2


    2. if (Serial)的用法
    当串口被打开时,Serial的值为真。串口被关闭时Serial的值为假。
    比较囧的是,这个方法只适用于Leonardo和micro的Serial,也就是说连接连接到电脑USB的那个模拟串口。
    例如以下程序,当你没有使用串口监视器打开串口时,程序就会一直循环运行while (!Serial) {;} ,当你打开串口监视器,程序会退出while循环,开始loop中的程序。

    [C++] 纯文本查看 复制代码
    1
    2
    3
    4
    5
    6
    7
    8
    void setup() {
      Serial.begin(9600);
      while (!Serial) {;}
    }
     
    void loop() {
     
    }



    3.read和peek输入方式的差异
    串口接收到的数据都会暂时存放在接收缓冲区中,使用read()与peek()都是从接收缓冲区中读取数据。不同的是,使用read()读取数据后,会将该数据从接收缓冲区移除;而使用peek()读取时,不会移除接收缓冲区中的数据。
    你可以使用以下程序,观察其运行结果:

    [C++] 纯文本查看 复制代码
    01
    02
    03
    04
    05
    06
    07
    08
    09
    10
    11
    12
    13
    char col;
    void setup() {
      Serial.begin(9600);
    }
     
    void loop() {
      while(Serial.available()>0){
        col=Serial.read();
        Serial.print("Read: ");
        Serial.println(col);
        delay(1000);
      }
    }



    [C++] 纯文本查看 复制代码
    01
    02
    03
    04
    05
    06
    07
    08
    09
    10
    11
    12
    13
    char col;
    void setup() {
      Serial.begin(9600);
    }
     
    void loop() {
      while(Serial.available()>0){
        col=Serial.peek();
        Serial.print("Read: ");
        Serial.println(col);
        delay(1000);
      }
    }



    4. 串口读入int型数据
    实际上是串口读入字符串,再转换为int型数据。

    [C++] 纯文本查看 复制代码
    1
    2
    3
    4
    5
    6
    7
    8
    9
    while (Serial.available() > 0) {
        int inChar = Serial.read();
        if (isDigit(inChar))
    {
    inString += (char)inChar;
    }
    i=inString.toInt();
    }
    }



    5.输出不同进制的文本
    我们可以是用 Serial.print(val, format)的形式输出不同进制的文本
    参数val 是需要输出的数据
    参数format 是需要输出的进制形式,你可以使用如下参数:
    BIN(二进制)
    DEC(十进制)
    OCT(八进制)
    HEX(十六进制)
    例如,使用Serial.print(123,BIN),你可以在串口调试器上看到1111011
    使用Serial.print(123,HEX),你可以在串口调试器上看到7B

    6.Arduino MEGAArduino DUE上其他串口用法
    serial1serial2serial3
    和serial用法一样
    比如serial3.begin(9600);


    6.修改串口缓冲区大小
    Arduino串口缓冲区默认为64字节,如果你单次传输的数据较多可以将
    arduino-1.0.5-r2hardwarearduinocoresarduinoHardwareSerial.cpp中的
    #define SERIAL_BUFFER_SIZE 64
    修改为
    #define SERIAL_BUFFER_SIZE 128
    这样就有128字节的缓冲区了

  • 相关阅读:
    Ubuntu 16.04 快速搭建ftp服务(转载)
    emmc协议简介(转载)
    产品经理简介
    小程序常用代码
    微信登录
    sql临时表与变量表
    备份数据库与还原数据库
    JQuery多个异步操作后执行(resolve,promise,when,done)
    苹果IOS下text-shadow与box-shadow失效的解决办法
    jS弹出新窗口被拦截的解决方法
  • 原文地址:https://www.cnblogs.com/anandexuechengzhangzhilu/p/10717303.html
Copyright © 2020-2023  润新知