2012年7月17日 星期二

程式撰寫 --- rcservo_SendCPWM() 之 Led亮度控制

在所有的項目都設定好之後     接下來就是寫程式的工作了



一開始先舉個簡單的做例子    今天就來教大家玩玩看 Led 燈吧~


以下的程式碼可以直接全部複製貼到 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
       
   getchar();   // 按 Enter 鍵程式才繼續執行

   rcservo_SendCPWM(RCSERVO_PINS3 , 1000L , 999L);  // 使用 rcservo_SendCPWM() 這個函式
                                                                                     讓 Pin3 這個角位能連續送出如上敘述的電壓







 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 這個角位能連續送出如上敘述的電壓








 printf("Enter  >>  PINS3 , 200/1000 \n");    //  列印出 Enter  >>  PINS3 , 200/1000 \n 這一行文字
                                                                        意思是 Pin3 這個角位在1000毫秒內有200毫秒
                                                                        是輸出 3.3V 的電壓有800毫秒是輸出 0V 的電壓

   getchar();   // 按 Enter 鍵程式才繼續執行

   rcservo_SendCPWM(RCSERVO_PINS3 , 1000L , 200L);  // 使用 rcservo_SendCPWM() 這個函式
                                                                                     讓 Pin3 這個角位能連續送出如上敘述的電壓












 printf("Enter  >>  PINS3 , 0/1000 \n");    //  列印出 Enter  >>  PINS3 , 0/1000 \n 這一行文字
                                                                   意思是 Pin3 這個角位在1000毫秒內有0毫秒
                                                                   是輸出 3.3V 的電壓    也就是只輸出 0V 的電壓

   getchar();   // 按 Enter 鍵程式才繼續執行

   rcservo_SendCPWM(RCSERVO_PINS3 , 1000L , 200L);  // 使用 rcservo_SendCPWM() 這個函式
                                                                                     讓 Pin3 這個角位能連續送出如上敘述的電壓












   printf("Enter  >  close \n");     //  列印出 Enter  >  close \n 這一行文字
                                                   意思是按下 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++  所以他當然不認識我們寫好的程式檔


所以要在下載這個驅動檔讓電腦知道這是什麼檔案才能順利執行~









接下來電路的接法是這樣的 :     以下這張圖是 RB-100RD 的右半邊





圖中黃色圈圈的角位就是 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 送出的電壓是   0.5秒的3.3V   0.5秒的0V    連續送出這周期1秒的方波


這時雖然 Led 燈實際上是亮暗亮暗的一直在切換   但由於速度太快


我們看起來就好像變得比一開始暗一點而已


利用這個方法  就可以控制 Led燈的亮度摟~








今天的這個程式所用到的函式是 rcservo_EnterPWMMode() 裡的  rcservo_SendCPWM()


用法就如剛剛簡單的說明     控制馬達有很多很多種的語法    


以後會再跟大家一一做介紹的     就敬請期待吧~































沒有留言:

張貼留言