#include <SoftwareSerial.h>
SoftwareSerial BTSerial(10, 11); // 藍芽 HC-05 可以設定,但 HC-06 不可設定,YFRobot 可以設定,
但是傳送 Tx 與接收 Rx 腳位和 HC-05 相反,所以腳位定義須改為 BTSerial(11, 10),且 AT 指令不同 void setup()
{
pinMode(9, OUTPUT); // 讓 Key/SET 腳位為 1,以便進入 AT 模式設定 digitalWrite(9, HIGH);
Serial.begin(9600);
Serial.println("Enter AT commands:");
BTSerial.begin(9600);
}
void loop() {
if (BTSerial.available())
Serial.write(BTSerial.read());
if (Serial.available())
BTSerial.write(Serial.read());
}
YFRobot 藍牙模組採用大 陸公司自行開發藍牙核心 板 BC-04,與一般市面常 用 HC-05 不同。所以,AT 指令集也不太相同。
YFRobot 藍牙模組的 AT 指令結尾不能加 '?' ,而且 大小寫均可接受。
YFRobot 密碼稱為PIN
YFRobot 鮑率設定BAUD
YFRobot 設定時,中間不 可加入冒號:
1. HC-05 藍牙模組的 AT 指令結尾需加 '?' ,僅支援大寫。
2. HC-05 密碼稱為PSWD
3. HC-05 鮑率設定UART
4. HC-05 設定時,中間要加入冒號,正確會顯示 OK
36
補充:若想用較便宜的 ATMEGA8 取代 ATMEGA328,使用前須自行將 Bootloader 寫進 ATMega 晶片,但容 量較小,可用於簡單電路。
硬體電路連接如下:
軟體燒錄步驟說明如下:
1. File→Examples→ArduinoISP,先『燒錄』該程式,目的是將 Arduino 當成 ISP 的板子(勿先接) 2. 選擇 Tools→Board→ATMEGA8 或其他規格(此時須將左上圖電路連接)
3. Tools→Programmer→Arduino as ISP 4. Tools→Burn Bootloader(經過一段時間)
5. 看到右側訊息表示成功 ,若看到右側訊息表示失敗
補充:底下自製電路是將藍芽設定與 Bootloader 寫進 ATMega 晶片電路結合在一起,以方便使用。
泰山高中電子科陳致中老師 Arduino 上課範例 5 名稱:控制串列式全彩 LED (利用可變電阻調亮度)
/* 串列式全彩 LED 硬體接腳 Din、Vcc、GND(最長)、Dout
使用前先到 https://github.com/adafruit/Adafruit_NeoPixel
按右下的"DOWNLOAD ZIP"→下載後解壓縮→重新命名為"Adafruit_NeoPixel"→
複製於 C:\Program Files (x86)\Arduino\libraries,方可使用 H 檔案 WS2812 系列串列式 RGB LED 連接在 Pin 2
*/
#include <Adafruit_NeoPixel.h>
#define TOP_DOWN 0
#define DOWN_TOP 1
#define MEDIUMSPRINGGREEN 0x00FA9A
#define INDIGO 0x4B0082
const int pot = A5; //宣告可調電阻分壓後連接在 A5 腳,以調整亮度
#define PIN 2
#define LED_CNT 42 //宣告多少顆 LED // 建構名為 leds 的 Adafruit_NeoPixel 類別
Adafruit_NeoPixel leds = Adafruit_NeoPixel(LED_CNT, PIN, NEO_GRB + NEO_KHZ800);
// 設定===================================================================
void setup() {
leds.begin(); // 初始化 clearLEDs(); // 關閉所有 LED leds.show(); // 開啟所有 LED }
// 主程式===================================================================
void loop(){
int x=analogRead(pot);
leds.setBrightness(x/4); //宣告可調電阻分壓後連接在 A5 腳,以調整亮度 brightness();
//三原色逐字點亮
for (int i=0; i<LED_CNT; i++) { clearLEDs(); // 關閉所有 LED for (int j=0; j<=i; j++) {
Dout
38
for (int i=0; i<LED_CNT*20; i++) {
cascade(MEDIUMSPRINGGREEN, TOP_DOWN, 50);
// 第一個引數為顏色, 第二個引數為方向, 第二個引數為掉落時間(ms) }
}
// 龍捲風函數=============================================================
void cyclone(unsigned long color, byte wait) { // weight 為淡化外部眼顏色的亮
leds.setPixelColor(i, red, green, blue); // 設定亮的中間眼 Set the bright middle eye // 使兩個眼往兩側逐漸變暗
for (int j=1; j<3; j++) { if (i-j >= 0)
leds.setPixelColor(i-j, red/(weight*j), green/(weight*j), blue/(weight*j));
if (i-j <= LED_CNT)
leds.setPixelColor(i+j, red/(weight*j), green/(weight*j), blue/(weight*j));
}
leds.setPixelColor(i, red, green, blue);
for (int j=1; j<3; j++) { if (i-j >= 0)
leds.setPixelColor(i-j, red/(weight*j), green/(weight*j), blue/(weight*j));
if (i-j <= LED_CNT)
40
leds.setPixelColor(i+j, red/(weight*j), green/(weight*j), blue/(weight*j));
}
void cascade(unsigned long color, byte direction, byte wait) {
leds.setPixelColor(i, rainbowOrder((rainbowScale * (i + startPosition)) % 192));
}
brightness(); // 調整亮度 leds.show(); // 開啟 LED }
// 產生彩虹色帶函數======================================================
// 輸入 0~191 以取得顏色值
// 顏色變化為紅=>黃=>綠=>淺綠=>藍=>粉紅=>紅...
uint32_t rainbowOrder(byte position) { // 6 個顏色區域(每區 32 點)
if (position < 31) { // 紅=>黃 (Red = FF, blue = 0, Green = 00=>FF) return leds.Color(0xFF, position * 8, 0); // 只遞增綠色成份 }
else if (position < 63) { //黃=>綠 (Red = FF=>00, Green = FF, blue = 0) position -= 31; // 第 2 區
return leds.Color(0xFF - position * 8, 0xFF, 0); // 只遞減紅色成份 }
else if (position < 95) { //綠=>淺綠 (Red = 0, Green = FF, Blue = 00=>FF) position -= 63; // 第 3 區
return leds.Color(0, 0xFF, position * 8); // 只遞增藍色成份 }
else if (position < 127) { //淺綠>藍 (Red = 0, Green = FF=>00, Blue = FF) position -= 95; // 第 4 區
return leds.Color(0, 0xFF - position * 8, 0xFF); // 只遞減綠色成份 }
else if (position < 159) { //藍=>粉紅 (Red = 00=>FF, Green = 0, Blue = FF) position -= 127; // 第 5 區
return leds.Color(position * 8, 0, 0xFF); // 只遞增紅色成份 }
else {//160 <position< 191 粉紅=>紅 (Red = FF, Green = 0, Blue = FF=>00) position -= 159; // 第 6 區
return leds.Color(0xFF, 0x00, 0xFF - position * 8); // 只遞減藍色成份 }
}
void brightness() // 讀取 A5 分壓結果,以控制亮度 { int x=analogRead(pot);
leds.setBrightness(x/4);
}
42