arduino
[ Arduino之Ardublock實作筆記 ] 遙控車控制實作 (整合藍芽與紅外線接收模組)
<source : greatway9999>
一、功能描述
(一)、紅外線遙控
按下遙控的前後左右,可讓車子做出 "前進"、"後退"、"左旋"、"右旋"的動作。
按下 "OK"鍵 (或自行選擇合適按鍵來定義),讓車子 "停止",並且蜂鳴器發出旋律。
自行定義兩個按鍵,控制紅燈與綠燈。
(二)、藍芽遙控
動作同上,讓藍芽與紅外線可自由控制。
二、所需材料列表
<圖片來源 : 露天拍賣>
3.蜂鳴器
4.智高Arduino積木組
備註 : 以上圖片來源為隨機在露天拍賣上尋找,非和特定廠商合作。
三、實作分享
(一)、查找紅外線按鈕的對應數字組
請先於此處,下載 <IRRemote>程式庫。並載入Arduino的城市庫,同時記得將原本的 Robot Remote程式庫先移除,避免衝突。
再透過IRrecvDemo這支範例程式,讀取遙控器上各指定按鍵的十進位數字。如下圖。
以我接收到的數字為例 :
前進 : 417813165
後退 : 417845805
...,把這些數字記錄下來,待會要填到程式中。
(二)、撰寫動作指令,以Ardublock為例
1.設定紅外線與藍芽
先宣告一個紅外線數值變數 "IR" ,初始值為0。
接著再將紅外線接收器所接受到的值,存到 "IR" 變數。
宣告一個字元變數 "char" ,並設定讀取序列的值存到 "char" 。作為藍芽模組控制用。
程式撰寫如下圖 :
2.定義動作
右馬達接到腳位pin4,左馬達接到腳位pin7。紅燈接到D9腳位。綠燈接到D11腳位。
以 "OR"的方式將讓紅外線與藍芽兩個條件並存。將剛紀錄到的紅外線對應數字組,填到條件中。
若你是使用Android手機,請於Play商店中下載藍芽控制app,同時設定前、後、左、右、停、亮紅燈、亮綠燈。記得這些條件要和紅外線遙控的功能相對應。
最後以副程式的方式呈現。程式碼如下 :
3.將副程式整合到主程式,如下圖。
4.下載 TimeFreeTone模組,並寫入程式
將上述程式的ardublock轉成 ardu C語言,接著下載 TimeFreeTone模組。
下載完後,把TimeFreeTone載入 Arduino 程式庫,再重新開啟。如此將可以在Arduino範例程式中看到TimeFreeTone模組。打開TimeFreeToneExample程式,並將標頭擋、腳位宣告、和旋律程式寫入剛才轉好的 ardu C語言。完成程式如下圖,最後記得要將藍芽的brad rate改成38400。
#include <IRremote.h>
#include <Servo.h>
#include <TimerFreeTone.h>
#define TONE_PIN 10
int melody[] = { 262, 196, 196, 220, 196, 0, 247, 262 };
int duration[] = { 250, 125, 125, 250, 250, 250, 250, 250 };
unsigned long _ABVAR_1_IR = 0UL ;
//libraries at http://www.duinoedu.com/
IRrecv monRecepteur(3);
char _ABVAR_2_char = ' ' ;
Servo servo_pin_4;
Servo servo_pin_7;
void IR_control();
void setup()
{
monRecepteur.enableIRIn();
Serial.begin(38400);
servo_pin_4.attach(4);
servo_pin_7.attach(7);
pinMode( 9 , OUTPUT);
pinMode( 11 , OUTPUT);
_ABVAR_1_IR = 0UL ;
}
void loop()
{
_ABVAR_1_IR = monRecepteur.lireCodeIr() ;
_ABVAR_2_char = Serial.read();
IR_control();
Serial.print("IR=");
Serial.print(_ABVAR_1_IR);
Serial.println();
Serial.print("CHAR=");
Serial.print(_ABVAR_2_char);
Serial.println();
delay( 100 );
}
void IR_control()
{
if (( ( ( _ABVAR_1_IR ) == ( 417813165 ) ) || ( ( _ABVAR_2_char ) == ('1') ) ))
{
servo_pin_4.write( 120 );
servo_pin_7.write( 60 );
}
if (( ( ( _ABVAR_1_IR ) == ( 417829485 ) ) || ( ( _ABVAR_2_char ) == ('2') ) ))
{
servo_pin_4.write( 60 );
servo_pin_7.write( 60 );
}
if (( ( ( _ABVAR_1_IR ) == ( 417796845 ) ) || ( ( _ABVAR_2_char ) == ('3') ) ))
{
servo_pin_4.write( 120 );
servo_pin_7.write( 120 );
}
if (( ( ( _ABVAR_1_IR ) == ( 417845805 ) ) || ( ( _ABVAR_2_char ) == ('4') ) ))
{
servo_pin_4.write( 60 );
servo_pin_7.write( 120 );
}
if (( ( ( _ABVAR_1_IR ) == ( 417857280 ) ) || ( ( _ABVAR_2_char ) == ('5') ) ))
{
servo_pin_4.write( 90 );
servo_pin_7.write( 90 );
for (int thisNote = 0; thisNote < 8; thisNote++) { // Loop through the notes in the array.
TimerFreeTone(TONE_PIN, melody[thisNote], duration[thisNote]);
delay(50); // Short delay between notes.
}
}
if (( ( ( _ABVAR_1_IR ) == ( 417808575 ) ) || ( ( _ABVAR_2_char ) == ('6') ) ))
{
digitalWrite( 9 , HIGH );
digitalWrite( 11 , LOW );
}
if (( ( ( _ABVAR_1_IR ) == ( 417841215 ) ) || ( ( _ABVAR_2_char ) == ('7') ) ))
{
digitalWrite( 9 , LOW );
digitalWrite( 11 , HIGH );
}
}
程式到此結束。
---
相關文章 :
#紅外線接收模組 #bluetooth #IRRemote #TimeFreeTone
0 留言