請問arduino利用bluetooth控制servo的code

小弟剛接觸arduino沒多久, 目前想玩看看用手機bluetooth控制arduino板的servo
是否有高手能提供code?

目前小弟是設定servo.write(ang), int ang = 90

void loop(){
if(Serial.available()){
Char = Serial.read();

if (Char == 'a'){
ang = ang + 60;
delay(1000);

但這種寫法好像只能一次轉一個角度, 可以輸入一次,轉兩次角度嗎

ang= ang +60;
delay(1000);
ang = ang +120;
delay(1000):

(加60度後停一秒再加120度)

但好像這樣寫servo就不會動= =
請問各位高手是該怎麼寫才對,謝謝
2016-09-07 21:57 發佈

KanonLin wrote:
小弟剛接觸arduino...(恕刪)


不知道你這 Servo 的控制方式是什麼
原來的
ang = ang + 60;
delay(1000);
看起來是每下轉60度的指令就要等 1 秒
我猜馬達控制器的加減速曲線一秒只能走60度
要轉180度可能要做60度三次或是改控制器的程式碼
有控制器的程式碼的話PO上來看看
#include <Servo.h>

Servo ServoAndroid;
char Char;
int ang = 90;

void setup(){

ServoAndroid.attach(3,600,2400);
Serial.begin(9600);

}

void loop(){
if(Serial.available()){
Char = Serial.read();

if (Char == 'a'){
ang =ang + 60;
delay(3000);
ang = ang + 120;
delay(3000);

Serial.print(ang);
}
else if (rxChar == 'h'){
ang = ang -60;
Serial.print(ang);
}

ang = constrain(ang,0,180);
}
ServoAndroid.write(ang);
delay(500);


感覺就算改長delay 他依樣都給我一氣呵成60+120=180度
我不懂怎麼讓他分開動作?? 假如我要輸入後要讓他不斷重複動作要怎麼寫呢?!如+30-30+30-30+30-30....
KanonLin wrote:
#include ...(恕刪)

#include <Servo.h>
Servo ServoAndroid;
char Char;
int ang = 90;
void setup{
ServoAndroid.attach(3,600,2400);
Serial.begin(9600);
}
void loop{
if(Serial.available){
Char = Serial.read;
if (Char == 'a'){
ang =ang + 60; /*這裡你只計算角度值沒有執行SERVO的控制*/
delay(3000);
ang = ang + 120; /*角度值 = ang + 60 + 120 = ang + 180*/
delay(3000);
Serial.print(ang);

}
else if (rxChar == 'h'){
ang = ang -60;
Serial.print(ang);
}
ang = constrain(ang,0,180);
}
ServoAndroid.write(ang);
delay(500);
感覺就算改長delay 他依樣都給我一氣呵成60+120=180度
我不懂怎麼讓他分開動作?? 假如我要輸入後要讓他不斷重複動作要怎麼寫呢?!如+30-30+30-30+30-30....

======================================================
Serial.print(ang);

ServoAndroid.write(ang);

先搞清楚上面2個函式哪一個是servo的控制函式,

找到後加到delay之前就可以.
越是親密的人 越需要你的尊重 ,尊重你的另一半 感情才能長長久久
感恩!!

if(Serial.available()){
Char = Serial.read();

if (rxChar == 'a'){
servo1.write(60);
delay(2000);
servo1.write(90);
delay(2000);
servo1.write(150);
delay(2000);

我這樣寫他就會做三個角度的動作了!!
但他就只會做一次!!
請問怎樣可以讓他不斷持續重複呢
60>>90>>150>>60>>90>>150>>60>>90>>150>>
KanonLin wrote:
感恩!!
if(Serial.available){
Char = Serial.read;
if (rxChar == 'a'){
servo1.write(60);
delay(2000);
servo1.write(90);
delay(2000);
servo1.write(150);
delay(2000);
我這樣寫他就會做三個角度的動作了!!
但他就只會做一次!!
請問怎樣可以讓他不斷持續重複呢
60>>90>>150>>60>>90>>150>>60>>90>>150>>


會只做一次的原因是你的SERVO控制是在串口的判斷式內執行,

造成每收到一次'a'才執行一次SERVO的動作,

把SERVO的控制放到串口接收的判斷式外就可以一直執行SERVO的控制了,

void loop{
if(Serial.available){
Char = Serial.read();
}
if (Char == 'a'){
servo1.write(60);
delay(2000);
servo1.write(90);
delay(2000);
servo1.write(150);
delay(2000);
}
}
改成上面應該SERVO就會一直動作,直到串口收到非'a'的指令後停止動作.
越是親密的人 越需要你的尊重 ,尊重你的另一半 感情才能長長久久
恩恩!!可以了!!十分感謝!!
請問大哥是否知道OV7670怎麼接arduino以及code
因為爬了許久的文 好像很少有人寫這個!!
想說不知道可不可以用手機藍芽連結去看畫面

KanonLin wrote:
恩恩!!可以了!!...(恕刪)


Google
越是親密的人 越需要你的尊重 ,尊重你的另一半 感情才能長長久久
需要找找吧

KanonLin wrote:
小弟剛接觸arduino...(恕刪)
內文搜尋
X
評分
評分
複製連結
Mobile01提醒您
您目前瀏覽的是行動版網頁
是否切換到電腦版網頁呢?