zoukankan      html  css  js  c++  java
  • Arduino通讯串口

    串口是Arduino与其它设备进行通信的接口

    所有的Arduino控制板有至少一个串口(又称作为UART或USART)。它通过0(RX)和1(TX)数字引脚经过串口转换芯片连接计算机USB端口与计算机进行通信。因此,如果你使用这些功能的同时你不能使用引脚0和1作为输入或输出

    Arduino Mega 有三个额外的串口:Serial 1使用19(RX)18(TX)Serial 2使用17(RX)16(TX)Serial3使用15(RX)14(TX);若要使用这三个引脚与您的个人电脑通信,你需要一个额外的USB转串口适配器,因为这三个引脚没有连接到Mega上的USB转串口适配器,若要用它们来与外部的TTL串口设备进行通信,将TX引脚连接到您的设备的RX引脚,将RX引脚连接到您的设备的TX引脚,将GND连接到您的设备的GND,(不要直接将这些引脚直接连接到RS232串口;他们的工作电压在+/- 12V,可能会损坏您的Arduino控制板。)

    Serial.begin(9600);      //开启串行通信接口并设置通信波特率

    if (Serial)   //表示指定的串口是否准备好   

    比较囧的是,这个方法只适用于Leonardo和micro的Serial

    Arduino Mega 特有:
    if (Serial1)
    if (Serial2)
    if (Serial3)

     Serial.available(); //获取从串口能够读取有效的字节数

    这是已经传输到,并存储在串行接收缓冲区(能够存储64个字节)的数据。 available()继承了 Stream

    注意使用时通常用delay(100)以保证串口字符接收完毕

     

    仅适用于Arduino Mega

     

    Serial1.available()

     

    Serial2.available()

     

    Serial3.available()

     

     Serial.end()     停用串行通信,使RX和TX引脚用于一般输入和输出。要重新使用串行通信, 需要 Serial.begin()语句

    Serial.read();

    读取串口数据,一次读一个字符,读完后删除已读数据

    返回串口缓存中第一个可读字节,当没有可读数据时返回-1,整数类型

     bl=Serial.findUntil("ell","|");    从串行缓冲区读取数据,直到找到一个给定字符串或字符串终止位;

    如果目标字符串被发现,该函数返回true,如果超时则返回false

    参数1  要搜索的字符串

    参数2  终止位

    Serial.flush();    等待输出数据传送完毕

    Serial.peek();  读取下一字节

    读串口缓存中下一字节的数据(字符型),但不从内部缓存中删除该数据。也就是说,连续的调用peek()将返回同一个字符

    返回串口缓存中下一字节(字符)的数据,如果没有返回-1,整数int型

    while(Serial.read()>= 0){}       清空缓存

    因Serial.read()函数读取串口缓存中的一个字符,并删除已读字符。因此可以用这句代码来清空串口缓存

     s=Serial.parseInt();//从缓冲区读取一个int整数

    Serial.print();   串口输出数据函数,写入字符串数据到串口

    语法:

    Serial.print(val)

    Serial.print(val,format)

    val: 打印的值,任意数据类型 ;   format: 输出的数据格式,包括整数类型和浮点型数据的小数点位数

    示例

    Serial.print(78, BIN) 得到 "1001110"       BIN表示二进制

    Serial.print(78, OCT) 得到 "116"             OCT表示8进制

    Serial.print(78, DEC) 得到 "78"               DEC表示10进制--默认

    Serial.print(78, HEX) 得到 "4E"               HEX表示16进制

    Serial.print(1.23456, 0) 得到 "1"              取0位小数

    Serial.print(1.23456, 2) 得到 "1.23"         取2位小数

    Serial.print('N') 得到 "N"                          输出字符串

    Serial.println();   与Serial.print()类似  后面自动加入换行

    int x=Serial.readBytes(buffer,length);   从串口读取指定长度length的字符到缓存数组buffer  

    返回存入缓存的字符数,0表示没有有效数据

    Serial.readBytesUntil(character,buffer,length); 从串口缓存读取指定长度的字符到数组buffer,遇到终止字符character后停止

    character : 终止的字符 (char)

    buffer: 存储读取数据的缓存(char[] 或byte[])

    返回存入缓存的字符数,0表示没有有效数据

    String comdata =Serial.readString();   从串口缓存区读取全部数据到一个字符串型变量

    返回从串口缓存区中读取的一个字符串--包括

    String comdata =Serial.readStringUntil(terminator);   从串口缓存区读取字符到一个字符串型变量,直至读完或遇到某终止字符

    terminator:终止字符(char型)

    返回值 从串口缓存区中读取的整个字符串,直至检测到终止字符

    float comfloat=Serial.parseFloat();    读串口缓存区第一个有效的浮点型数据,数字将被跳过。当读到第一个非浮点数时函数结束

    返回值  返回串口缓存区第一个有效的浮点型数据,数字将被跳过

    int comInt=Serial.parseInt()     从串口接收数据流中读取第一个有效整数(包括负数)

    注意:非数字的首字符或者负号将被跳过;当可配置的超时值没有读到有效字符时,或者读不到有效整数时,分析停止;如果超时且读不到有效整数时,返回0

    返回值  返回下一个有效整型值

    Serial.find()     从串口缓存区读取数据,寻找目标字符串target(char型)

    语法:

    char target[] = ”目标字符串”;

    Serial.find(target);

    返回值  找到目标字符串返回真,否则为假 

    Serial.findUntil(target,terminal);从串口缓存区读取数据,寻找目标字符串target(char型数组),直到出现终止字符串terminal(char型数组),找到为真,否则为假

    Serial.write();    串口输出数据函数。写二进制数据到串口

    语法   Serial.write(val)     val: 字节

    Serial.write(str)    str: 一串字节

    Serial.write(buf, len)    buf: 字节数组   len: buf的长度

    返回值     字节长度

    Serial.SerialEvent();     串口数据准备好时触发的事件函数,即串口数据准备好调用该函数

    语法:Serial.serialEvent{//statements}

    statements: 任何有效的语句

    当使用print()发送一个数据时,Arduino发送的并不是数据本身,而是将数据转换成字符(无论是何种类型的数据,如int a=100数据也会被转化为三个char型数据,即’1’ .’0’.’0’),再将字符翻译成ASCII码发送出去,串口监视器接收到ASCLL码,则会显示对应的字符(串口监视器会自动进行ASCII码翻译工作)。因此,使用print()函数是以ASCLL码的形式输出数据到串口。

        而当使用write()函数时,Arduino发送的是数值本身,省略了把字符转化为ASCII码的过程。串口监视器接收到数据后,也会将数值当做ASCLL码而显示其对应的字符(write()函数只支持发送0~255整型数据)

    资料:https://blog.csdn.net/iracer/article/details/50334041    

  • 相关阅读:
    事件代理(event的target属性)
    搜狗输入法软件分析
    软件工程概论项目——第7天
    软件工程概论项目——第6天
    软件工程概论项目-第5天
    软件工程概论项目——第四天
    软件工程概论项目——典型用户场景分析
    软件工程概论项目-第三天
    软件工程概论项目-第二天
    软件工程概论项目——第一天
  • 原文地址:https://www.cnblogs.com/liming19680104/p/10928858.html
Copyright © 2011-2022 走看看