伺服电机控制
控制单个伺服电机
引入伺服电机控制函数库
#include <Servo.h>
创建Servo对象以控制伺服电机
Servo myservo;
示例代码如下:
#include <Servo.h>
Servo myservo; // 创建Servo对象用以控制伺服电机
int pos = 0; // 存储伺服电机角度信息的变量
void setup() {
myservo.attach(9); // Servo对象连接在9号引脚
Serial.begin(9600); //串口通讯
}
void loop() {
for (pos = 0; pos <= 180; pos += 1) {
// 每一步增加1度
myservo.write(pos); // 设置伺服电机转动角度,告诉伺服电机达到'pos'变量的角度
Serial.println(pos);
delay(15); // 等待15毫秒以确保伺服电机可以达到目标角度
}
for (pos = 180; pos >= 0; pos -= 1) { // 180度转到0度
myservo.write(pos); // 告诉伺服电机达到'pos'变量的角度
Serial.println(pos);
delay(15); // 等待15毫秒以确保伺服电机可以达到目标角度
}
}
控制多个伺服电机
硬件接线上,所有设备共地
建立四个servo对象:
Servo a, b, c, d;
设置四个电机所接入的引脚(在setup函数中设置)
a.attach();
b.attach();
.
.
.
串口通讯
引脚 RX:接受 TX:发送 在两设备进行硬件连接时,RX接TX,TX接RX
波特率:代表每秒传输多少位数据。
在串行通讯时,一部分数据可能存入了串口接收缓存中,此时需要检查缓存并读取
Serial. available () //检查
Serial. read () //读取
第一个函数返回值为缓存中数据的字节数量,第二个为数据第一个字节具体内容(若定义为int,则是字符的ASCII码),若还有后续数据则继续该函数read。
还有一个语句是将输入进入串口的整数信息进行分析随后输出(整数本身而不是ASCII码),其可以从字母和数字中将数字提取出来
int pos = Serial.parseInt(); //将提取出来的整数赋值给pos
字符:单引号 字符串:双引号
数组
一维数组
int data[5] = {1, 2, 3, 4, 5}
//定义数组中数据类型为整形;数组中有5个数据,这五个分别为1,2,3,4,5
在数组中,第一个数据的索引为0,故当引用其中数据时应注意索引号,例如引用第一个时,为data[0],依此类推。
若按一定规律取用数组数据时,可使用for循环对索引号进行循环。
二维数组
int data1[5] = {0,1,2,3,4};
int data2[5] = {5,6,7,8,9};
int data3[5] = {10,11,12,13,14};
int data4[5] = {15,16,17,18,19};
//上述四个一维数组可以看成一个四行五列的“矩阵”,二维数组可以直接表示该矩阵
int array[4][5] = {
{0,1,2,3,4},
{5,6,7,8,9},
{10,11,12,13,14},
{15,16,17,18,19},
};
数组应用不止局限于存放“数字”,也可以放字符、对象等相同的元素(可以理解成类似集合?)。
定义数组时第一个方括号中表示数组中数据个数的数字可以省略不写。