• 沒有找到結果。

34 //設定藍芽名稱與密碼的程式碼

在文檔中 Arduino上課講義 (頁 34-42)

#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

在文檔中 Arduino上課講義 (頁 34-42)

相關文件