# 机器人基础--串口通信

控制器默默地执行我们的指令,一遍又一遍……你是否会突然想知道,它现在是不是在偷懒?
机器人想证明它真的没有偷懒,它可以每次做完一部分事情以后就告诉你,它现在把事情做到哪里了。

# 情景分析

  1. 控制器上面有一个硬件叫做串口,它可以使用0号(接收)和1号端口(发送),通过特定的方式,传递出信息。而电脑上一般使用的是USB接口,所以UnoMax上还有一个芯片,专门把串口转换成USB接口,这样控制器就可以往串口上送出信息,再转成USB信号,然后电脑接收到信息,显示出来。
  2. 串口在使用前也需要先配置,主要是配置速度,称为波特率。配置指令是Serial.begin(speed)speed是要设置的速度,通常设置为115200,对应积木
  3. 串口发出数据的指令是Serial.print(val)val是要传送的信息,通常是一段文字,当然还有其他的许多东西都可以传送出来,只要是能在程序里面描述的就行。对应积木 ,还有另一种形式Serial.println(),在信息后添加换行符号,后面再发送的信息将显示在新的一行上。对应的积木 ,可以通过选择框切换打印/打印并换行

# 流程解析

  1. 控制器开机后,使用Serial.begin(115200)指令,配置串口速度为115200。
  2. 使用Serial.print("你好,我已经运行了")指令来向串口打印字符串。
  3. 使用Serial.print(millis())指令来向串口打印数字,数字为millis()指令获取到的开机时长。
  4. 使用Serial.println("毫秒了,我没有偷懒!")指令来打印字符串,跟之前打印的字符串拼接成一行,并换行。下次打印时将在新的行上。
  5. 暂停一段时间后重复步骤2,3,4。
uml diagram

# 参考程序

  • oseppBlock IDE 程序

  • Arduino IDE 程序
void setup() {
    Serial.begin(115200);  //配置串口速度为115200
}

void loop() {
    Serial.print("你好,我已经运行了");     //打印信息的前半段
    Serial.print(millis());                //把开机后的毫秒数打印出来
    Serial.println("毫秒了,我没有偷懒!");  //打印信息的后半段
    delay(1000);                           //做其他事情1秒钟
}
1
2
3
4
5
6
7
8
9
10

# 运行结果

注意:让机器人悬空,马达有可能会意外转动(上传成功前,控制器会运行之前上传的程序)
接通电源,上传程序后,打开串口监视器,注意也要把串口监视器的速度设置成115200,看到机器人定时向你汇报它没有偷懒。

# 课程解读

  1. 指令millis(),可以告诉我们:电源接通了多长时间了。
  2. Serial.print()可以自动识别内容是数字或者字符。
  3. Serial.println()指令将在打印内容的后面添加一个换行符号,来控制电脑显示时换行。也可以不填入内容,仅输出换行字符。
  4. 串口通讯需要先用指令设置速度,电脑上也要设置同样的速度。

# 拓展知识

  1. 串口表示的是数据是一次一位传输的,位是最小的传输单位,用英文bit表示。我们设置的速度就是一秒钟能传送多少个bit。相应地有一种接口可以同时传输多个bit,叫做并口。
  2. 为了数据在发送和接收处都能准确理解,还需要一种方法表示开始发送了,发送完成了等等,称为协议。我们使用的是RS232协议。

# oseppBlock操作视频

# ArduinoIDE操作视频