servo類函數(shù)的用法
attach |
連接舵機(jī)(自帶庫(kù)僅9/10腳有效) |
write |
角度控制 |
writeMicroseconds() |
更精準(zhǔn)的角度控制(μm級(jí)) |
read() |
讀上一次舵機(jī)轉(zhuǎn)動(dòng)角度 |
attached() |
檢查舵機(jī)及是否連接控制板上 |
detach() |
斷開舵機(jī)連接,使接口(9/10腳)可做PWM輸出 |
servo類函數(shù)語(yǔ)法
attach |
servo.attach(pin)/ servo.attach(pin, min, max) |
– |
servo.write(angle) |
– |
servo.writeMicroseconds(μm) |
– |
servo.read() |
– |
servo.attached() |
– |
servo.detach() |
- 讓舵機(jī)從0°轉(zhuǎn)到180°再到0°
#include <Servo.h>
Servo myservo; //創(chuàng)建一個(gè)舵機(jī)控制對(duì)象
// Arduino自帶的Servo函數(shù)庫(kù)只可以同時(shí)控制兩個(gè)模擬舵機(jī);
//且最好使用D9 D10腳;
//若需要控制多個(gè)舵機(jī)則需要用pwm功能;
//使用Servo類最多可以控制8個(gè)舵機(jī)
int pos = 0; // 該變量(pos)用于存儲(chǔ)舵機(jī)角度位置
/*~~~~~~~~~~~~~~~~~~~~~~~~~~樸實(shí)的分割線~~~~~~~~~~~~~~~~~~~~~~~~~~ */
void setup()
{
myservo.attach(9); // 該舵機(jī)由arduino第九腳控制
}
/*~~~~~~~~~~~~~~~~~~~~~~~~~~樸實(shí)的分割線 ~~~~~~~~~~~~~~~~~~~~~~~~~~ */
void loop()
{
for(pos = 0; pos < 180; pos += 1) // 從0°到180°運(yùn)動(dòng)
{ // 每次步進(jìn)一度,實(shí)際會(huì)有些偏差屬正?,F(xiàn)象
myservo.write(pos); // 指定舵機(jī)轉(zhuǎn)向的角度
delay(15); // 等待15ms讓舵機(jī)到達(dá)指定位置
}
for(pos = 180; pos>=1; pos-=1) //從180°到0°運(yùn)動(dòng)
{
myservo.write(pos); // 指定舵機(jī)轉(zhuǎn)向的角度
delay(15); // 等待15ms讓舵機(jī)到達(dá)指定位置
}
//myservo.write(pos); //注釋主函數(shù)的內(nèi)容,取消注釋此內(nèi)容
//將pos換為具體的0到180間任意數(shù),上電可直接讓舵機(jī)轉(zhuǎn)到該位置
}
- 用轉(zhuǎn)動(dòng)滑動(dòng)電位器調(diào)整
#include <Servo.h>
Servo myservo;
//創(chuàng)建一個(gè)舵機(jī)控制對(duì)象
int potpin = 0; //該變量用于存儲(chǔ)用電位器讀出的模擬值
int val;
// 該變量用與存儲(chǔ)舵機(jī)角度位置
void setup()
{
myservo.attach(9);
// 該舵機(jī)由arduino第九腳控制
}
void loop()
{
val = analogRead(potpin); //讀取電位器控制的模擬值 (范圍在0-1023)
val = map(val, 0, 1023, 0, 179); //將電位器讀取的(0,1023)規(guī)劃為(0,179)
myservo.write(val);
// 指定舵機(jī)轉(zhuǎn)向的角度
delay(15);
// 等待15ms讓舵機(jī)到達(dá)指定位置
}
因?yàn)樵谥谱饕粋€(gè)東西時(shí)需要用到舵機(jī),在調(diào)整舵機(jī)零點(diǎn)的時(shí)候犯了糊涂,耽誤了不少時(shí)間,調(diào)整好后索性做一次總結(jié),供大家參考!
參考于[https://www./en/Reference/Servo]
及[(https://www./thread-1038-1-1.html)]
|