创客百科

姿势共享,有节操无门槛参与的创客百科,创客动力之源 \ (^_^) /

用户工具

站点工具


arduino:libraries:boxz_servoraw

servoRaw()

说明

通过servoRaw(),您可以以一种原始协议的方式通过串口对两个舵机进行控制。
其格式为: 0xF | 0xFF | 0xFF
对应数据: 控制|舵机2(右侧) |舵机1(左侧)
Byte 1(High):最高位,控制位。4个bit中的B0001使能左侧舵机,B0010使能右侧舵机。如无使能则忽视角度变化。
Byte 2-3:舵机2(右侧),范围从0x00到0xFF,实际有效范围取决于舵机最小值与最大值的设定
Byte 4-5(Low):舵机1(左侧),范围从0x00到0xFF,实际有效范围取决于舵机最小值与最大值的设定

另外,由于串口通信发送的是ASC码,而本函数接收的是十六进制整数,所以需要对Arduino接收的串口数据进行转换。
例如,如果你要想让BOXZ双手抬起,需要发送 “262143”, 而不是 “0x3FFFF”

语法

servoRaw(data);
以一种原始协议的方式对两个舵机进行控制。

参数

data:16进制无符号长整数数据
串口发送的指令转换如下:
左手抬起:0x1FFFF = 131071
右手抬起:0x2FFFF = 196607
左手落下:0x10000 = 65536
右手落下:0x20000 = 131072
双手抬起:0x3FFFF = 262143
双手落下:0x30000 = 196608
左30右90:0x35A1E = 219678


说明:左侧手臂到30度,即0x1E,右侧手臂到90度,即0x5A,那么双手联动的指令就是 0x35A1E。所以串口发送的数据应为219678。另外需要注意的是,舵机一般最大到180度,即0xB4,而本库限制最大值为160,即0xA0。因此任何大于0xA0的角度都会被视为160度。如果需要大于160度,需修改BOXZ.h中的库参数SERVO_POSMAX。

返回

例子:

#include "BOXZ.h"
 
unsigned long key;
String comdata = "";
 
void setup()
{
  Serial.begin(9600);
  boxz.initServo();
  Serial.println("Hello! BOXZ!");
}
 
void loop()
{
  while (Serial.available() > 0)  
  {
    comdata += char(Serial.read());
    delay(2);
  }
  if (comdata.length() > 0)
  {
    Serial.println(comdata);
    key = comdata.toInt();
    Serial.println(key);
    comdata = "";
    boxz.servoRaw(key);
  }
}

返回BOXZ目录

本页面的其他翻译:
arduino/libraries/boxz_servoraw.txt · 最后更改: 2016/12/25 22:15 (外部编辑)