Paragraphs are comprised of sentences, but not random sentences. A paragraph is a group of sentences organized around a central topic.

codrone lite/pro_Arduino_Beginner_ part 2(飛行事件、動作、變數)

arduino(Beginner)_ Flight Events飛行

Step 1: 

初始設定程式

幾乎所有CoDrone編程都從初始設定區塊開始,嘗試熟悉它吧!

#include <CoDrone.h>

void setup() {
  CoDrone.begin(115200);

  CoDrone.pair();
}

void loop() {

}

程式碼註解:

  • 加入CoDrone資料庫
  • 設定鮑率115200來啟動連結藍芽版
  • 連結已配對過的CoDrone

這門課運作無人機的所有函式,我們都放在void setup{}之區塊中

 

Step 2: 

Void setup(設定區塊)和 void loop(迴圈區塊) 

所有Arduino sketch 草稿碼都包含void setup()和 void loop()兩個區塊。若沒有他們,你的程序就無法運作!

  • 你放入void setup() 的程式碼只會運作一次並在執行的最一開始運作。一個最好的例子就是你在設定鮑率時你不會一直重複設定對吧?!
  • void loop()裡設定的程式碼會不斷重複運作。當你的CoDrone用某些模式飛行或是使用LED燈時就是一些好例子

簡單來說:在 void setup() 中的程式碼只運作一次,而在 void loop()中會不斷的運作下去!

請在Arduino網站中了解更多: Setup()Loop()Functions

 

Step 3: 

執行飛行功能

在加入可以連結你的CoDrone的程式碼後你必須加入CoDrone.takeoff()函式。

第一次飛行你將使用CoDrone.takeoff()。這個函式總是讓無人機在空中盤旋3秒來穩定後執行下一個指令。如果8秒內沒有收到指令它就會自動著陸。下一個要學的就是使用CoDrone.land()讓你的CoDrone回到地面。

 

以下是程式碼的內容

#include <CoDrone.h>

void setup() {  
  CoDrone.begin(115200);  
  CoDrone.pair();

  CoDrone.takeoff(); //goes up and hovers for 3 seconds
  CoDrone.land(); //lands the CoDrone 
}

void loop() {
}
CoDrone takeoff and landing

 

Step 4:

 盤旋

如果你想要你的CoDrone在空中滯留超過3秒鐘,最好的方法就是在起飛和著陸中間加入CoDrone.hover()函式。盤旋指令會依據你在括弧內填入的秒數決定在空中滯留的時間。例如:你想要你的CoDrone起飛後盤旋2秒後,再開始著陸,則函式是CoDrone.hover(2),其中「2」代表2秒,並插在起飛和著陸指令之間。

以下是加入 CoDrone.hover()的程式碼:

附註:假如你起飛後的盤旋時間小於3秒的話,可以不使用CoDrone.hover() 因為 CoDrone.takeoff()已經有盤旋3秒的自動指令。

#include <CoDrone.h>

void setup() {
    CoDrone.begin(115200);
    CoDrone.pair();

    CoDrone.takeoff(); //goes up and hovers for 3 seconds
    CoDrone.hover(2); //hovers for an additional 2 seconds
    CoDrone.land(); //lands the CoDrone 
}

void loop() {
}
CoDrone takeoff, delay, and landing

Step 5: 

Turn it off! 關掉它!

你是無人機操作新手,所以我們完全不驚訝意外發生。防止意外發生最好的方法是加入緊急開關在你的程式碼中。假如你的CoDrone失控了,你會慶幸有加入緊急開關,你可以直接蓋住一些感應器,馬達就會立刻停止運作以脫離險境。

請確定以下程式碼加載於void loop區塊哩,讓你在覆蓋感應器11和14時(如下圖),馬達會自動關閉,我們會在條件式課程更詳細說明。

void loop(){
    byte bt8 = digitalRead(18);
    byte bt4 = digitalRead(14);
    byte bt1 = digitalRead(11);

    if(bt1 && bt4 && !bt8){
        CoDrone.emergencyStop();
    }
}
CoDrone Pro remote IR sensor pin numbers

Step 6: 

最終程式碼

最後你的程式碼內容應該呈現如下:

#include <CoDrone.h>

void setup() {
    CoDrone.begin(115200);
    CoDrone.pair();

    CoDrone.takeoff(); //goes up and hovers for 3 seconds
    CoDrone.hover(2); //hovers for 2 seconds
    CoDrone.land(); //lands the CoDrone 
}

void loop(){    
    byte bt8 = digitalRead(18);    
    byte bt4 = digitalRead(14);    
    byte bt1 = digitalRead(11);

    if(bt1 && !bt4 && !bt8){    
    CoDrone.emergencyStop();
    }
}

Step 7: 

Challenge挑戰

挑戰: CoDrone 伏地挺身

試試用一組程式碼讓你的CoDrone連續起飛著陸5次!目前你手上的程式碼只能讓你的無人機這樣做一次。

規則:

  1. CoDrone 在起飛時必須完全離開地面。
  2. CoDrone 必須在著陸時完全回到地面。
  3. CoDrone沒有最高限度要求

來比賽看誰的CoDrone在10秒內做最多組伏地挺身!

 

arduino (Beginner) _ Flight Movements飛行動作

Step 1: 

 橫滾、俯仰、偏航和油門

飛行器的移動方式與陸地車輛有點不同。儘管陸地車輛可以向前、向後,有時還可以左右移動,但飛行器不只有這些動作,甚至還有上下移動。想要確認 CoDrone是 如何在三維空間中移動,你可以使用以下術語:

橫滾控制的是CoDrone的橫向或是側向移動。Positive roll(正向橫滾)是把CoDrone向右移動;而negative roll(負向橫滾)是把CoDrone向左移動。

CoDrone roll diagram

俯仰是 CoDrone 向前和向後傾斜。CoDrone往前傾斜移動是Positive pitch(正向俯仰),而negative pitch(負向俯仰)是往後傾斜移動CoDrone。

CoDrone pitch diagram

偏航是CoDrone左右旋轉。Positive yaw(正向偏航)讓你的CoDrone向右轉;而negative yaw (負向偏航)是向左旋轉。

CoDrone yaw diagram
油門控制了CoDrone的垂直向上或下移動。Positive throttle(催油門)會讓CoDrone往上飛高;而negative throttle(收油門)讓CoDrone往下飛低。

CoDrone throttle diagram

請小心操作偏航和橫滾,偏航會左右旋轉CoDrone,而橫滾會左右移動CoDrone。

 

Step 2: 

活動:盲機體驗

學習新詞彙的最佳方法之一就是觀察它們的實際操作,因此你不僅要記住所有的飛行動作,你還要完成障礙賽!

找個朋友坐下並矇註他們的雙眼(或是要他們雙眼閉上就好) 接下來,只使用飛行動作詞引導他們讓他們最後坐在另一把椅子上通過障礙課程。請先確保任何危險的東西都遠離他們!

  • Positive throttle(催油門)=起立
  • Negative throttle(收油門)=坐下
  • Positive pitch(正向俯仰)=往前走
  • Negative pitch(負向俯仰)=往後走
  • Positive yaw(正向偏航)=向右轉
  • Negative yaw (負向偏航)=向左轉
  • Positive roll(正向橫滾)=向右走
  • Negative roll(負向橫滾)=向左走

例如:如果你要你朋友往前走,請說“正向俯仰(Positive pitch )2步”,就可以讓你朋友了解要他往前走2步。一旦你的朋友成功完成障礙賽,則換他幫你指向!

 

Step 3: 

移動指令

以下有3個步驟讓你的CoDrone自主飛行:

  1. 設定移動指令
  2. 發送指令
  3. 設定維持移動時間

移動指令就是你剛才學到的: 偏航、俯仰、橫滾和催、收油門。在Auduino中請使用以下格式設定變化數值:

CoDrone.setThrottle(0);
CoDrone.setPitch(0);
CoDrone.setRoll(0);
CoDrone.setYaw(0);

這些值可以設定翻為從數字-100到100。例如:如果你想要設定油門到70,請寫下 CoDrone.setThrottle(70)。這樣設定催油門的值在70但…這樣尚未把指令傳到你的CoDrone。 

 

Step 4: 

移動維持時間

最後一個步驟就是設定你的無人機飛行多久時間,以下是給你參考多種的飛行指令:

CoDrone.setRoll(60);
CoDrone.setPitch(-60);
CoDrone.move(1.5);

CoDrone.move(1.5)會在你送出飛行指令後暫停你的程式碼1.5秒。這將使你的 CoDrone 在移動到下一行代碼之前有 1.5 秒的時間來執行動作。

CoDrone with Arduino set, send, and delay

 

 

Step 5:

最終程式碼

現在你可以把他們全部組一起了!讓你的CoDrone起飛、以速度50催油門2秒、往前飛再用速度30左飛2秒然後著陸。別忘了在voild loop裡加入緊急開關喔!

以下是你的程式碼呈現內容:

#include <CoDrone.h>

void setup() {
    CoDrone.begin(115200);
    CoDrone.pair();

    CoDrone.takeoff();          //Take off for 3 seconds

    CoDrone.setThrottle(50);            //Throttle for 2 seconds
    CoDrone.move(2);

    CoDrone.setThrottle(0);              // Set throttle back to 0
    CoDrone.setPitch(30);
    CoDrone.setRoll(-30);                //Pitch and roll for 2 seconds
    CoDrone.move(2);

    CoDrone.land();          //Land

}

void loop () {
    byte bt8 = digitalRead(18);
    byte bt4 = digitalRead(14);
    byte bt1 = digitalRead(11);

    if(bt1 && bt4 && !bt8){
        CoDrone.emergencyStop();
    }
}

程式碼註解:

  • 設定鮑率在115200
  • 與附近無人機連結
  • 起飛2秒
  • 速度50催油門(往上飛)2秒
  • Positive pitch(正向俯仰)往前飛再速度30、negative roll(負向橫滾)飛向左邊2秒
  • 著陸
  • 如果感應器11和14被覆蓋,停止馬達運作

 

Step 6: 

Challenge挑戰

Challenge: Pin Point點到點移動

在相距幾英尺分別放一個起始板和著陸板。嘗試使用你的程式碼讓 CoDrone 移動從一個板子飛到下一個板子。

規則:

  1. CoDrone 必須從起始起飛並在著陸板上降落
  2. CoDrone必須自己移動—即不能用搖桿控制

如果你希望在更有挑戰,你可以:

  • 請讓CoDrone遠離著陸板
  • 加一個圈狀物或是障礙物讓CoDorne飛過或是繞過它們
  • 將目的地改成標靶樣式並賦予它們分數。中心點是最高分,越接近邊緣越低分。

 

Arduino (Beginner)_ Variables變數

 

Step 1: 

何謂變數?

變數在所有編程語言和大多數程序中都很重要!就像數學,變數是佔位符和數字的數據存儲。一般來說你可以在編程的一開始先創造變數並儲存它的值,之後你可以在編程中用變數時把時把它叫出來使用。

我們來看個示範吧!有時CoDrone的鮑率很難記—-到底是112500還是115200? (是115200沒錯)常常在腦中找尋數字不如保存波特率的值成變數,以下是呈現方式:

int x = 115200;

現在115200就縮短成變數x了!每當你用x在你的程序中,你可以想像它被115200取代了。

#include <CoDrone.h>

int x = 115200;

void setup() {
    CoDrone.begin(x);     //same as CoDrone.begin(115200)
    CoDrone.pair();
}

void loop () {
}

 

Step 2: 

變數使用方式

以下是使用變數的3步驟

  1. 宣告—在編程中創造變數
  2. 儲存—儲存變數的職
  3. 呼叫—在之後編程中使用該變數

宣告變數

使用變數前你要先宣告它。請使用以下函式做宣告變數:

DataType VariableName

例如: int Example宣告`一個名為 Example 的整數變數。

 

Step 3: 

數據類型

在上一步中,你可能對數據類型感到困惑! 數據類型很重要,因為它們決定了每個變數可以存儲多少數據。 請確認你為你的程序選擇正確數據種類!

  • byte—位元組。可以是0到255中的任一整數
  • int —整數。可以是-32,768到32,767中的任一整數
  • long – 長整數。可以是-2,147,483,648到2,147,483,647中的任一整數

 

Step 4: 

變數的名字

你可以任意為你的變數命名,只要不要有空格或特殊符號。以int HappyFace123舉例。

定義一個值

當你要定義一個變數時,他的值會自動成0。如果你不想要它是0,你可以設定初始值。例如:你想把HappyFace123的值換成10,你要寫:

int HappyFace123 = 10

Step 5: 

範圍

在編程時要記住變數的範圍是一個非常重要的規定。範圍決定了您的變數在程序中的位置。如果你試著輸入超出變數的範圍,編譯器會顯示錯誤訊息”範圍內未被定義”

範圍的基本規定:變數只能在其初始化的括號裡使用。

以下提供幾個範例:

 範例1

void setup(){ //BRACKET START
//x is initialzed inside the setup's brackets
int x; 
x=2;
}             //BRACKET END

void loop(){
x=1; //running this will give an error
}

x 在void setup()的括號內初始化,所以它只能在這些括號內使用。x = 2可以使用是因為他也有在void setup()範圍裡。然而如果你試著在void loop()中設定x = 1,你會看到範圍錯誤因為它不在同一個括號內。

範例2

 

void setup(){ 

if(true){//BRACKET START
    int x; 
    x=1;
    }//BRACKET END

x=2; //running this will give an error
}

x在if(true)括號中初始化,所以它只能在這些括號內使用。x=1可以使用是因為它有在if(true)括號裡。當你試著設定x=2在if語句外的void setup() ,你會看到錯誤訊息因為它不再相同的括號內。

Example 3範例3

 

int x;

void setup(){     
    x=1;
}             

void loop(){
    x=2;
}

運作成功!變數x在void setup()之前和任何括號之外初始化。這稱做全域(global)變數,且可以在整個城市裡的任何區塊使用。

Step 6: 

變數與數學

使用數學運算可以非常輕鬆地更改編程中的變數。 你的數學老師聽到這個會很開心!

範例1

int y = 4;
int z = 3;
int x = y + z;

範例2

你看到的此等於符號並不代等於”或是”相等” 。在編程中只是代表 “指派”,意為設定這個變數的值, 這應該有助於你理解我們將談到的內容。

有件你能在編程中做的事就是在變數的方程式中變化它的值。

例如:

int y = 4;
int x = 3;
x = y + x;

X原本的值是3,但當他在方程式x=4+3中使用後新的x值就是7。

我們理解這個解釋讓人困惑但我們保證這很正常。

Step 7: 

Challenge挑戰 方形變數

使用以下設置程式碼讓你的 CoDrone 起飛,然後以方形圖案飛行!

規則:

  1. 只能用固定的變數但你可以調整當中的值
  2. 初始化變數後你不能用其他任何數字!唯一例外是鮑率。

設置程式碼

#include <CoDrone.h>

int A = 1;
int B = 500;
int C = 5;
int D = 2;
int E = 10;
int F = 3;

void setup(){  
    CoDrone.begin(115200);  
    CoDrone.pair();

    CoDrone.takeoff();   
}

void loop(){
    byte bt8 = digitalRead(18);
    byte bt4 = digitalRead(14);
    byte bt1 = digitalRead(11);

    if(bt1 && bt4 && !bt8){
        CoDrone.emergencyStop();
    }
}

程式碼範例

#include <CoDrone.h>

int A = 1;
int B = 500;
int C = 5;
int D = 2;
int E = 10;
int F = 3;

void setup(){  
    CoDrone.begin(115200);  
    CoDrone.pair();  

    CoDrone.takeoff();  
    CoDrone.move(D);  

    CoDrone.setThrottle((C * C) * F);  //5 * 5 * 3  = 75; move at 75% power throttle for 2 seconds
    CoDrone.move(A * D);             // 1 * 2 = 2  

    CoDrone.setThrottle(0);          // Zero out the throttle
    CoDrone.move(); 

    CoDrone.land();                    
}

void loop(){
    byte bt8 = digitalRead(18);
    byte bt4 = digitalRead(14);
    byte bt1 = digitalRead(11);

    if(bt1 && bt4 && !bt8){
        CoDrone.emergencyStop();
    }
}