Robofun 機器人論壇

 找回密碼
 申請會員
搜索
熱搜: 活動 交友 discuz

藍芽控制伺服馬達

查看數: 12754 | 評論數: 17 | 收藏 0
關燈 | 提示:支持鍵盤翻頁<-左 右->
    組圖打開中,請稍候......
發佈時間: 2017-11-23 23:37

正文摘要:

我使用藍芽+inventor 2 APP(手機控制)+arduino  控制伺服馬達   我希望能夠按住1個按鈕=>角度慢慢上升&下降 +指定角度    目前可以指定伺服馬達到180度&1度    但現在按住 ...

回復

f660229 發表於 2017-12-10 21:40:34
謝謝講解
超新手 發表於 2017-12-9 06:44:16
當然可以,只是速度慢了一點點點點(us級)
f660229 發表於 2017-12-9 00:34:33
case 'B' 不能改成這樣嗎??
ang = ang - 1;
if (ang < 0) ang = 0;
超新手 發表於 2017-12-8 05:43:34
本帖最後由 超新手 於 2017-12-8 08:04 編輯

為什麼說"類似"?
case a 執行後,ang 會越變越大。
case b 執行後,ang 會則越來越小
f660229 發表於 2017-12-7 23:44:17
case 'A'
ang = ang + 1;
if (ang > 180) ang = 180;

case 'B'
if (ang > 0) ang = ang - 1;

這2個不是類似的嗎?為什麼case 'B要這樣改??

超新手 發表於 2017-12-7 08:04:31
一個是用來增加角度
一個是用來減少角度
看你的 APP 就知道了,
按下 up 送出 A
按下 down 送出 B
f660229 發表於 2017-12-6 22:35:34
本帖最後由 f660229 於 2017-12-6 22:47 編輯

謝謝你的講解

請問 case 'A'  跟  case 'B'  的程式為什麼不太一樣  

對不起我問題有點多   因為一些原因沒辦法把問題一次提出來
超新手 發表於 2017-12-6 08:28:14
1.Serial 跟SoftwareSerial的差別在哪裡??
Serial 是CPU的硬體功能, 完全由硬體負責, 所以讀沒幾行就可搞定
限制就是必須使用固定接腳(如 0, 1)
SoftwareSerial 是用 軟體去模擬, 雖然你用起來和硬體的方式差不多, 但事實
上是前人寫了幾十行的程式去模擬. 好處就是只要是 I/O 腳大致都可以
但鮑率不能太快, 佔用 CPU 時間多
有硬體Serial 可用, 當然就用硬體
2 改ang = ang + 1 (或 ang = ang - 1)
改大一點,  一次加多一點(或減多一點)
但注意不要加(減) 過頭, 要修改一下判斷式的寫法
3. 其實最主要的問題是
要先設 a 的值, 再啟動計時器
否則如果先啟動計時器, 如果此時計時中斷先發生
而 a 又剛好等於 0, 就會先把計時器關掉
就算再設 a 為 1, 也會因為沒計時器中斷
所以也不會繼續執行
其他的話, 就是多餘的程式, 我只是減化而
不過我不覺得會有突然變 90 的問題,
所以我也不確定你的程式是那邊有問題
我也只是把你的程式小改一下而已



f660229 發表於 2017-12-6 00:25:45
本帖最後由 f660229 於 2017-12-6 00:27 編輯

我的也是UNO板   藍芽的鮑率我有改過 因為學校是教我們用38400
跳到90度是指 --> 按住會跑到0度  放開就會跳到接近90度的位置
請問  1.Serial 跟SoftwareSerial的差別在哪裡??
        2.怎麼改上升下降的速度??
        3.可以講解我的積木圖為什麼錯誤嗎??

可以動作了   只是從0度要往上的時候會卡一下
真的很感謝你   
超新手 發表於 2017-12-1 08:39:29
本帖最後由 超新手 於 2017-12-1 09:00 編輯

你的程式雖然有點小問題, 但應不至變成 90度
或許有其他問題

我照你的程式打, 小改了一下
按住不放, 可以由小變大, 或由大變小
注意!!! 我使用的是 UNO,
所以我直接用 Serial 就可以了, 不用 SoftwareSerial
而且我的藍牙是9600bps
(一般預設都是 9600, 你有特別改過藍牙鮑率嗎?)
和你不同,
timer 預設時間 100ms, 預設關閉
所以要按"住" 18 秒才會從 0 到 180 度

  1. #include <Servo.h>
  2. Servo myservo;
  3. char command;
  4. int ang = 90;

  5. void setup()
  6. {
  7.   Serial.begin(9600);
  8.   myservo.attach(9);
  9.   myservo.write(90);

  10. }
  11. void loop()
  12. {
  13.   if (Serial.available() > 0)
  14.   {
  15.     command = Serial.read();
  16.     Serial.println(command);
  17.     switch (command)   {
  18.       case'A':
  19.         ang = ang + 1; if (ang > 180) ang = 180;
  20.         myservo.write(ang);
  21.         delay(40);
  22.         break;

  23.       case 'B':
  24.         if (ang > 0) ang = ang - 1;
  25.         myservo.write(ang);
  26.         delay(40);
  27.         break;
  28.       case'C':
  29.         ang  = 180;
  30.         myservo.write(180);
  31.         break;
  32.       case'D':
  33.         ang = 0;
  34.         myservo.write(0);
  35.         break;

  36.     }
  37.   }
  38. }
複製代碼


另外, 你說的跳到 90 度
應該不會是說, 先按 0 度(或 180 度), 再按 up 或 down, 就會先跳到 90 度吧?

未命名.jpg (114.59 KB, 下載次數: 621)

未命名.jpg
f660229 發表於 2017-11-30 09:40:33
本帖最後由 f660229 於 2017-11-30 11:51 編輯

對不起我是新手看不太懂   
請問應該怎麼設置積木?還是說Arduino的程式需要更改?
謝謝講解
超新手 發表於 2017-11-27 08:30:37
1. 我試過, 沒問題. 不知道你是怎麼改的?
2. 如果你要按"住"時, 角度會慢慢增加或減少
app 就要設一個 timer 和 變數
當up鈕按下時, 把 變數 設為1, timer 看到  變數等於 1, 就固定時間送 A
當up鈕鬆開時, 把 變數 設為0
當down鈕按下時, 把 變數  設為2, timer 看到  變數等於 2, 就固定時間送 B
當down鈕鬆開時, 把 變數設為 0  
f660229 發表於 2017-11-24 21:35:31
本帖最後由 f660229 於 2017-11-24 22:55 編輯

拿掉之後 就變成按下up&down鍵後直接到0度
超新手 發表於 2017-11-24 19:09:08
在app中, 拿掉鬆開的程式
f660229 發表於 2017-11-24 18:44:28
本帖最後由 f660229 於 2017-11-30 09:47 編輯

謝謝講解  請問我該怎麼改?
超新手 發表於 2017-11-24 06:39:07
你放開後就會送E或F.就會write 1600us(約等於90度)

小黑屋|手機版|Archiver|機器人論壇 from 2005.07

GMT+8, 2024-11-22 01:05 , Processed in 0.188782 second(s), 10 queries , Apc On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回復 返回頂部 返回列表