創作內容

5 GP

戰車改造程式碼部分

作者:做遙控的りゅうおう│2019-12-09 19:11:59│巴幣:10│人氣:594

因為有人問我詳細的程式碼部分
然後同時又專題做完了就來說明一下程式碼好了
不過本身就是很簡單的邏輯而已 沒有很難
跟市面上自走車之類的程式碼基本一樣啦

因為我都選用arduino來做 自然偏向C的寫法 所以要記得加分號
C基本上都能用


有好幾種寫法 像我之前的cv33和其他台的差異比較大 所以cv33的就不講了
這裡就直接用arduino原本就有的函式來用

首先 因為要讀取接收器出來的訊號
先宣告幾個變數(儘量取的有點分別 不然會搞混

下面這個是潘興的程式碼 腳位接A0~A5
然後記得在setup那邊設定為輸入(好像預設也是輸入不過我習慣會設)

因為馬達驅動板通常要使用pwm腳位 所以要先去看哪幾隻是pwm腳位
不然沒辦法變速

因為我有接聲音模組 所以鮑率是9600
用監控視窗要調成一樣的才不會亂碼

主程式部分(void loop())是一個只要有上電一直執行的大迴圈 只要沒delay基本上是感覺不出停頓的
所以我遙控的時候 戰車其實在做 讀取>馬達轉>迴圈結束>讀取>馬達轉>.....這樣子

然後就是讀取訊號值了 接收器出來的是PWM波
而我們利用pulseIn()去讀取高電位時間就可以了
再用Serial.println()輸出在監控視窗看值(ln是自動在輸出值後換行 可加可不加 對整體沒什麼影響)
一般遙控器中立點讀出來大約在1500左右 通常會±4左右跳動 範圍大概為900~2100
這邊要注意的是 如果該腳位沒有接訊號 但是有讀值的話會當機(應該說停很久才下一步)

順序是有差的 有時候要注意一下

有了這些值之後就能夠對其做動作了
像是中立點大約在1500左右
那我就寫if(signal1<1520&&signal1>1480){} 像這樣就能在if寫條件讓他停止
在括弧中塞入要執行的東西 但要記得儘量不要有delay()之類的 會造成整個程式延遲 遙控就不會那麼順暢
要做其他動作就用else if 來寫條件即可

analogWrite(腳位,0~255) 0就是停 255就全速
因為是一對的 所以改變有值的地方就能控制方向
若不用變速用digitalWrite()也可以 我潘興一開始用錯還以為不能變速

像是機槍那些基本上就是用旗標來判斷動作 高於某個值觸發這樣
我的10式有利用數迴圈來判斷搖桿動作速度 這樣能夠在同一隻搖桿上做更多動作
就不需要那麼多通道的遙控器 不過因為還有bug所以就不放上來了 而且有點難解釋

下面這個是10式開砲部分
我多用了一個load變數 去限制填彈時間
開完砲後有點像倒數計時那樣 只是數的是迴圈跑幾次這樣
跑夠多之後load旗標就成立 然後一直維持這個值 直到下次開砲
(這邊有delay 但是短 主要是拖時間去配合主砲的燈亮的時間和炮聲的時間差 這要用試的才能配
由於馬達把所有arduino nano的pwm腳位都用掉了
砲縮和俯仰是用副程式來寫的
放在void loop()之前 要使用的話 像下面這個就是呼叫servo5(90);這樣
這個要使用的變數都能自己改

基本上如果像我潘興的話 接收器六個腳位 馬達驅動板六個腳位 前後車燈兩個(不算負極) 伺服馬達兩個腳位 主砲燈機槍燈
nano板基本上會塞滿
而像10式的話我用了三片nano才夠做我要弄的功能 板與板之間用高低電位溝通

然後記得共地(所有負極接在一起) 共地很重要
伺服馬達很吃電 記得注意電流 我一開始弄10式的時候沒分流就燒了一條線ㄏㄏ

還有問題的話也可以問我 不過太難我可能也沒辦法回答就是
引用網址:https://home.gamer.com.tw/TrackBack.php?sn=4616243
All rights reserved. 版權所有,保留一切權利

相關創作

留言共 9 篇留言

K&C
今天介電實習才教鮑率呢w
想確認一下,硬體的部分是
遙控器>>接收器>>nano>>馬達模組(課本說用L298N,但好像不太夠)>>馬達
嗎...(電子科高二萌新誠心的發問

12-12 22:27

做遙控的りゅうおう
對 接線是這樣沒錯
不過這邊我非常不推薦用L298N 發熱非常嚴重(他散熱片那麼大就知道他非常需要散熱了
我用的是MX1508供電用兩顆鋰電(2S 8.4V~7.2V 基本上不發熱12-12 22:35
K&C
第三張圖片的程式是要放在setup的部份對吧(摸索中

12-18 01:20

做遙控的りゅうおう
宣告可以用全域變數 讀值在loop裡面就可以12-18 01:52
K&C
請問有需要另外導入別的函式庫嗎owo

12-21 13:55

做遙控的りゅうおう
如果你照我的寫法的話是不用 除非要加聲音模組之類的 再去導入就好12-21 13:59
K&C
那麼walk=1的功能是什麼

12-21 14:05

做遙控的りゅうおう
那個是我拿來判斷開砲的時候是不是在走的旗標 我是寫成walk=1開砲時不震動 walk=0就會有車身的震動這樣 不弄這個的話無視就好12-21 14:07
K&C
如果要往前的話是要這樣子寫嗎
if(signal1>1600&&signal2>900&&signal2<2100)
{
analogWrite(in1,255);
analogWrite(in2,255);
analogWrite(in3,0);
analogWrite(in4,0);
}

12-30 22:59

做遙控的りゅうおう
呃 通常in1和in2是一對的(這邊也看你接到馬達驅動板的方式啦
一對的要一個是0~255另一個0
至於哪兩個不是0 要看你的接線 所以用測的再去調就好12-30 23:03
做遙控的りゅうおう
看你要不要用twitter問我可能比較方便?12-30 23:05
Niko_韎
學會了學會了(←完全看不懂

06-10 10:43

做遙控的りゅうおう
沒有完整程式碼其實會很難懂啦06-10 11:55
eason603
想問舵機那邊沒有PWM之後用的副程式,看起來是給角度之後算時間讓他停?,不過驅動是直接用digitalWrite的High跟Low驅動舵機嗎,但我改接成在D2,用DigitalWrite驅動會亂跳或是不動。

12-07 23:40

做遙控的りゅうおう
舵機是吃一個pwm訊號,需要給他一個約在HIGH 500us~2500us的pulse去控制角度,high的時間決定他轉的角度,我自己大部分用照片這樣寫法
https://truth.bahamut.com.tw/s01/202212/85b046fe9913c37a965b19dccac00051.JPG?w=300 12-07 23:46
eason603
您的俯仰舵機是怎麼控制的,我如果使用for迴圈搭配delay(2)的話俯仰期間會讓其他程式無法做動,但改成用millis()的話好像是因為loop卡幾秒才會跑完一次(其他程式沒有delay,所以如果用now - millis > 2的if搭配angle++,讓他跑一圈loop動一度就會變成移動速度過慢,目前是讓他一圈動3度,不過精度就很低

12-28 19:00

eason603
另外我在導入DFplayermini後,雖然用softSerial讓監控可以持續,但偶爾速度會變非常慢,9600鮑率最慢快2秒才回傳一次或直接不回傳,把#include"DFRobotDFPlayerMini.h"註解掉就正常了

12-28 19:07

做遙控的りゅうおう
這我就不確定是哪一條程式嗎造成延遲了
不過serial.print等函式本身其實花蠻久時間,如果沒用到的註解掉比較不會造成整體延遲12-28 19:22
我要留言提醒:您尚未登入,請先登入再留言

5喜歡★inazuma106 可決定是否刪除您的留言,請勿發表違反站規文字。

前一篇:1/35 CHURCHI... 後一篇:1/35 CHURCHI...

追蹤私訊切換新版閱覽

作品資料夾

Lobster0627全體巴友
大家可以多多來我的YT頻道看看哦(*´∀`)~♥https://www.youtube.com/@lobstersandwich看更多我要大聲說6小時前


face基於日前微軟官方表示 Internet Explorer 不再支援新的網路標準,可能無法使用新的應用程式來呈現網站內容,在瀏覽器支援度及網站安全性的雙重考量下,為了讓巴友們有更好的使用體驗,巴哈姆特即將於 2019年9月2日 停止支援 Internet Explorer 瀏覽器的頁面呈現和功能。
屆時建議您使用下述瀏覽器來瀏覽巴哈姆特:
。Google Chrome(推薦)
。Mozilla Firefox
。Microsoft Edge(Windows10以上的作業系統版本才可使用)

face我們了解您不想看到廣告的心情⋯ 若您願意支持巴哈姆特永續經營,請將 gamer.com.tw 加入廣告阻擋工具的白名單中,謝謝 !【教學】