跳至正文
View Categories

3 min read

1、 Serial.begin(speed)函数 #

speed:以每秒位数(波特)为单位。允许的数据类型:long.
以每秒位数(波特)为单位设置串行数据传输的数据速率。要与串行监视器通信,请确保使用其屏幕右下角菜单中列出的波特率之一。但是,您可以指定其他速率 – 例如,通过引脚 0 和 1 与需要特定波特率的组件进行通信。


void setup() {
Serial.begin(9600); // opens serial port, sets data rate to 9600 bps
}
void loop() {}

2、 Serial.write(val/str/(buf, len))函数 #

val:作为单个字节发送的值。
str:作为一系列字节发送的字符串。
buf:作为一系列字节发送的数组。
len:要从数组发送的字节数。
将二进制数据写入串行端口。该数据作为一个字节或一系列字节发送;要发送代表数字数字的字符,请改用Serial.print()函数。
例如

void setup() {
  Serial.begin(9600);
}

void loop() {
  Serial.write(45); // send a byte with the value 45

  int bytesSent = Serial.write("hello");  //send the string "hello" and return the length of the string.
}

3、 Serial.print(val, [format])函数 #

Serial: 串口对象。请参阅串行主页上每个板的可用串行端口列表。
val: 要打印的值。允许的数据类型:任何数据类型。
将数据作为人类可读的 ASCII 文本打印到串行端口。此命令可以采用多种形式。数字使用每个数字的 ASCII 字符打印。浮点数类似地打印为 ASCII 数字,默认为两位小数。字节作为单个字符发送。字符和字符串按原样发送。
例如
Serial.print(78) 给出“78”
Serial.print(1.23456) 给出“1.23”

可选的第二个参数指定要使用的基础(格式);允许的值为二进制、八进制、十进制和十六进制。对于浮点数,此参数指定要使用的小数位数。
例如

Serial.print(1.23456, 0) 给出“1”
Serial.print(1.23456, 2) 给出“1.23”
Serial.print(1.23456, 4) 给出“1.2345”

您可以通过Serial.print()用F()包装它们来传递基于闪存的字符串。例如:
Serial.print(F(“Hello World”))
示例函数

/*
  Uses a for loop to print numbers in various formats.
*/
void setup() {
  Serial.begin(9600); // open the serial port at 9600 bps:
}

void loop() {
  // print labels
  Serial.print("NO FORMAT");  // prints a label
  Serial.print("\t");         // prints a tab

  Serial.print("DEC");
  Serial.print("\t");

  Serial.print("HEX");
  Serial.print("\t");

  Serial.print("OCT");
  Serial.print("\t");

  Serial.print("BIN");
  Serial.println();        // carriage return after the last label

  for (int x = 0; x < 64; x++) { // only part of the ASCII chart, change to suit
    // print it out in many formats:
    Serial.print(x);       // print as an ASCII-encoded decimal - same as "DEC"
    Serial.print("\t\t");  // prints two tabs to accomodate the label lenght

    Serial.print(x, DEC);  // print as an ASCII-encoded decimal
    Serial.print("\t");    // prints a tab

    Serial.print(x, HEX);  // print as an ASCII-encoded hexadecimal
    Serial.print("\t");    // prints a tab

    Serial.print(x, OCT);  // print as an ASCII-encoded octal
    Serial.print("\t");    // prints a tab

    Serial.println(x, BIN);  // print as an ASCII-encoded binary
    // then adds the carriage return with "println"
    delay(200);            // delay 200 milliseconds
  }
  Serial.println();        // prints another carriage return
}

4、 Serial.println(val, [format])函数 #

与Serial.print(val, [format])函数使用方法基本相同,区别是,本函数输出自动换行。

5、 所需元件清单 #

Arduino Uno主板
USB数据线
双色LED灯
面包板
9V电池
杜邦导线

6、 动手实验 #

实验1、使用按键切换红绿灯
A实验接线
redPin–D9
GND—GND
greenPin–D10
B实验代码

int buttonPin = 3;
const int redPin=9;
const int greenPin=10;
// setup initializes serial and the button pin
void setup() {
  Serial.begin(9600);
  pinMode(buttonPin, INPUT);
  pinMode(redPin, OUTPUT);
  pinMode(greenPin, OUTPUT);
}

// loop checks the button pin each time,
// and will send serial if it is pressed
void loop() {
  if (digitalRead(buttonPin) == HIGH) {
    Serial.write('H');
digitalWrite(redPin,HIGH);
digitalWrite(greenPin,LOW);
  }
  else {
    Serial.write('L');
   digitalWrite(redPin,LOW);
   digitalWrite(greenPin,HIGH);
  }

  delay(1000);
}

实验2、实现红绿渐变色
实验代码

const int RedPin = 9;
const int GreenPin = 10;
int val=0;    

void setup() 
{
  pinMode(RedPin, OUTPUT); //set redPin as OUTPUT
  pinMode(GreenPin, OUTPUT);//set greenPin as OUTPUT
  Serial.begin(9600); 
}
/******************************************************/
void loop() 
{
  for(val=255; val>0; val--) //
  {
   analogWrite(RedPin, val); //red value decrease
   analogWrite(GreenPin, 255-val);//green value increase
   Serial.println(val, DEC);//print the val on in serial monitor
   delay(30); //delay 30ms
  }
for(val=0; val<255; val++)
  {
   analogWrite(RedPin, val); //red value increase
   analogWrite(GreenPin, 255-val);//green value decrease
   Serial.println(val, DEC);//print the val on in serial monitor
   delay(30); //delay 30ms
  }
}