进阶之路(中级篇) - 017 有关于Arduino 驱动舵机及相关问题
1 /********************************* 2 代码功能:通过串口控制电机 3 使用函数: 4 Serial.available(); //判断串口是否接收到数据 5 Serial.print(字符串); //通过TX传出去 6 Serial.write(字符串); //写入串口中 7 Serial.println(字符串); //通过TX传出去,并在尾端加换行 8 strtol(字符串启始指针,字符串结束指针,字符转换长度); //字符串转整形 9 constrain(数据,区间上界,区间下界); //约束数据范围函数 10 strtok(将要分解字符串首地址,"分割字符"); //字符分割函数(s指向要分解的字符串,之后再次调用要把s设成NULL。) 11 调用的库:#include <Servo.h> //设置舵机的库:详情见:https://www.arduino.cc/en/Reference/Servo 12 (电机名称).attach(控制电机引脚); //初始化电机 13 (电机名称).write(角度); //写入旋转角度 14 (电机名称).writeMicroseconds(中间参数); //设置电机的转动方向值,详情见:http://www.cnblogs.com/jikexianfeng/p/6269629.html 15 (电机名称).read(); //用于读取舵机角度的语句,可理解为读取最后一条write()命令中的值。返回值为伺服的角度,从0到180度。 16 (电机名称).attached(); //检查伺服变量是否连接到引脚。如果伺服器连接到引脚,则为真; 否则为假。 17 (电机名称).detach(); //从其引脚分离伺服变量。如果所有伺服变量都分离,则引脚9和10可以用于使用analogWrite()进行PWM输出。 18 创作时间:2016*01*10 19 作者邮箱:jikexianfeng@outlook.com 20 ********************************/ 21 #include <Servo.h> 22 23 char buffer[10]; 24 Servo servo1; 25 Servo servo2; 26 int L = 2; 27 int R = 3; 28 29 void setup() 30 { 31 servo1.attach(L); 32 servo2.attach(R); 33 Serial.begin(9600); 34 Serial.flush(); 35 servo1.write(90); 36 servo2.write(90); 37 Serial.println("STARTINC...."); 38 } 39 void loop() 40 { 41 if(0<Serial.available()){ 42 int index = 0; 43 delay(100); 44 int numChar = Serial.available(); 45 if(numChar > 10){ 46 numChar = 10; 47 } 48 while(numChar--){ 49 buffer[index++] = Serial.read(); 50 } 51 splitString(buffer); 52 } 53 } 54 55 void splitString(char *data){ 56 Serial.print("Data entered:"); 57 Serial.println(data); 58 char *parameter; 59 parameter = strtok(data,","); //首次调用时,s指向要分解的字符串,之后再次调用要把s设成NULL 60 while(NULL != parameter){ 61 setServo(parameter); 62 parameter = strtok(NULL,","); //首次调用时,s指向要分解的字符串,之后再次调用要把s设成NULL 63 } 64 for(int x =0;x<9;x++){ 65 buffer[x] = '\0'; 66 } 67 Serial.flush(); 68 } 69 70 void setServo(char *data){ 71 if((data[0] == 'R')||(data[0] == 'r')){ 72 int firstVal = strtol(data+1,NULL,10); 73 firstVal = constrain(firstVal,0,180); 74 servo2.write(firstVal); 75 Serial.print("Servo2 is set to:"); 76 Serial.println(firstVal); 77 } 78 if((data[0] == 'L')||(data[0] == 'l')) 79 { 80 int firstVal = strtol(data+1,NULL,10); 81 firstVal = constrain(firstVal,0,180); 82 servo1.write(firstVal); 83 Serial.print("Servo1 is set to:"); 84 Serial.println(firstVal); 85 } 86 }
参考博客:http://www.cnblogs.com/jikexianfeng/p/6269629.html
参考网站:https://www.arduino.cc/en/Reference/Servo