以下的程式碼可以直接全部複製貼到 visual c++ 上 ( // 之後是每一行的簡單說明 )
-------------------------------------------(以下開始)-----------------------------------------------------
#include "stdafx.h" //程式一開始已經先附好的標頭檔
#include "roboard.h" // 匯入 roboard.h 的標頭檔
int main()
{
roboio_SetRBVer(RB_100RD); // 選擇 roboard 的型號
rcservo_SetServo(RCSERVO_PINS3 , RCSERVO_SERVO_DEFAULT_NOFB);
// 選擇要使用 roboard 裡 Lab 的種類 及宣告要使用的角位
if(rcservo_Init() == false) // 初始化腳位 如果當中有問題則回傳錯誤資訊
{
printf("ERROR: fail to init RCServo lib (&s)!\n" , roboio_GetErrMsg());
return -1;
}
// -------------------- 以上為使用roboard函式庫控制馬達的基本開頭架構-------------------
rcservo_EnterPWMMode(); // 使用 EnterPWMMode() 這個函式庫
printf("Enter >> PINS3 , 999/1000 \n"); // 列印出 Enter >> PINS3 , 999/1000 \n 這一行文字
意思是 Pin3 這個角位在1000毫秒(一秒)內有999毫秒
是輸出3.3V的電壓只有1毫秒是輸出0V
意思是 Pin3 這個角位在1000毫秒(一秒)內有999毫秒
是輸出3.3V的電壓只有1毫秒是輸出0V
getchar(); // 按 Enter 鍵程式才繼續執行
rcservo_SendCPWM(RCSERVO_PINS3 , 1000L , 999L); // 使用 rcservo_SendCPWM() 這個函式
讓 Pin3 這個角位能連續送出如上敘述的電壓
讓 Pin3 這個角位能連續送出如上敘述的電壓
printf("Enter >> PINS3 , 500/1000 \n"); // 列印出 Enter >> PINS3 , 500/1000 \n 這一行文字
意思是 Pin3 這個角位在1000毫秒內有500毫秒
是輸出 3.3V 的電壓有500毫秒是輸出 0V 的電壓
意思是 Pin3 這個角位在1000毫秒內有500毫秒
是輸出 3.3V 的電壓有500毫秒是輸出 0V 的電壓
getchar(); // 按 Enter 鍵程式才繼續執行
rcservo_SendCPWM(RCSERVO_PINS3 , 1000L , 500L); // 使用 rcservo_SendCPWM() 這個函式
讓 Pin3 這個角位能連續送出如上敘述的電壓
讓 Pin3 這個角位能連續送出如上敘述的電壓
printf("Enter >> PINS3 , 200/1000 \n"); // 列印出 Enter >> PINS3 , 200/1000 \n 這一行文字
意思是 Pin3 這個角位在1000毫秒內有200毫秒
是輸出 3.3V 的電壓有800毫秒是輸出 0V 的電壓
意思是 Pin3 這個角位在1000毫秒內有200毫秒
是輸出 3.3V 的電壓有800毫秒是輸出 0V 的電壓
getchar(); // 按 Enter 鍵程式才繼續執行
rcservo_SendCPWM(RCSERVO_PINS3 , 1000L , 200L); // 使用 rcservo_SendCPWM() 這個函式
讓 Pin3 這個角位能連續送出如上敘述的電壓
讓 Pin3 這個角位能連續送出如上敘述的電壓
printf("Enter >> PINS3 , 0/1000 \n"); // 列印出 Enter >> PINS3 , 0/1000 \n 這一行文字
意思是 Pin3 這個角位在1000毫秒內有0毫秒
是輸出 3.3V 的電壓 也就是只輸出 0V 的電壓
意思是 Pin3 這個角位在1000毫秒內有0毫秒
是輸出 3.3V 的電壓 也就是只輸出 0V 的電壓
getchar(); // 按 Enter 鍵程式才繼續執行
rcservo_SendCPWM(RCSERVO_PINS3 , 1000L , 200L); // 使用 rcservo_SendCPWM() 這個函式
讓 Pin3 這個角位能連續送出如上敘述的電壓
讓 Pin3 這個角位能連續送出如上敘述的電壓
printf("Enter > close \n"); // 列印出 Enter > close \n 這一行文字
意思是按下 Enter 程式就結束了
意思是按下 Enter 程式就結束了
getchar(); // 按 Enter 鍵程式才繼續執行
rcservo_StopPWM(RCSERVO_PINS3); // 停止 Pin3 角位的訊號
rcservo_Close(); // 關閉程式庫
return 0;
}
-------------------------------------------(以上結束)-----------------------------------------------------
接下來程式打好後記得儲存 然後按下F7進行程式的編譯 編譯成功就表示程式沒有問題了
接下來要到 Visual Studio 2008 這個資料夾裡的 Projects 這個資料夾中
去找到你命名這個程式的資料夾 打開後會看到一個名稱為 Release 的資料夾
把這個資料夾裡的兩個檔案用隨身碟複製到 Roboard 裡面 這兩個就是你寫好的程式執行檔
這時你還要去下一個檔案 才能在 Roboard 上執行你剛寫好的程式
http://www.roboard.com/download_ml.htm
下載好後打開壓縮檔解壓縮 只要把 Winio裡的三個檔案 跟剛剛寫好複製過來的兩個檔案
丟在同一個資料夾裡就可以執行了喔~ ( 小心檔案路徑不能有中文 最好是直接放在c槽裡 )
因為我們沒有在 Roboard 裡灌 Visual C++ 所以他當然不認識我們寫好的程式檔
所以要在下載這個驅動檔讓電腦知道這是什麼檔案才能順利執行~
圖中黃色圈圈的角位就是 Pin3 紅色的則是你供給 Roboard 的電壓輸出 藍色的則是地線
黃紅藍這一排則是一組控制PWM伺服馬達的訊號排線 這個之後會再講解 ^^
而剛剛的程式就是在控制 Pin3 (黃色圈圈的那根) 角位的電壓而已
所以只要把從電子材料行買回來的 Led 燈的正極(Led 較長的腳)接上黃色圈圈的角位
負極(Led 較短的角) 接上藍色圈圈的角位 Led燈就會發亮啦~
這個程式執行後 首先按下 Enter 會發現 Led 變亮了 再按一次後會變得較不亮
再按一次後只有微微亮 再按一次就熄滅了
以較不亮來說明 是程式執行到了這個部分 :
printf("Enter >> PINS3 , 500/1000 \n"); // 列印出 Enter >> PINS3 , 500/1000 \n 這一行文字
意思是 Pin3 這個角位在1000毫秒內有500毫秒
是輸出 3.3V 的電壓有500毫秒是輸出 0V 的電壓
getchar(); // 按 Enter 鍵程式才繼續執行
rcservo_SendCPWM(RCSERVO_PINS3 , 1000L , 500L); // 使用 rcservo_SendCPWM() 這個函式
讓 Pin3 這個角位能連續送出如上敘述的電壓
讓 Pin3 這個角位能連續送出如上敘述的電壓
這時 Pin3 送出的電壓是 0.5秒的3.3V 0.5秒的0V 連續送出這周期1秒的方波
這時雖然 Led 燈實際上是亮暗亮暗的一直在切換 但由於速度太快
我們看起來就好像變得比一開始暗一點而已
利用這個方法 就可以控制 Led燈的亮度摟~
今天的這個程式所用到的函式是 rcservo_EnterPWMMode() 裡的 rcservo_SendCPWM()
用法就如剛剛簡單的說明 控制馬達有很多很多種的語法
以後會再跟大家一一做介紹的 就敬請期待吧~

沒有留言:
張貼留言