void setup(){
pinMode(9, OUTPUT);
pinMode(8, OUTPUT);
Serial.begin(9600);
Serial.println("Please Keyin y/n To Control LED...");
}
void loop(){
if(Serial.available()){
if(Serial.read()=='y'){
analogWrite(8, 255);
analogWrite(9, 0);
Serial.println("LED is ON.");
}else{
analogWrite(8, 0);
analogWrite(9, 255);
Serial.println("LED is OFF.");
}
}
}
黃彥霖 發表在 痞客邦 留言(1) 人氣(2,032)
本篇文章重點就是用 Arduino 實作類比輸出,可以使 LED 漸漸亮~漸漸暗~。
主要程式碼只有一行 analogWrite(9, i); ,這行程是碼的 9 代表 輸出 腳, i 代表 亮度,0 最暗,255 最亮。
void setup(){
pinMode(9,OUTPUT);
}
void loop(){
for(int i = 0; i < 255; i++){
analogWrite(9, i);
delay(3);
}
delay(50);
for(int i = 255; i > 0; i--){
analogWrite(9, i);
delay(3);
}
delay(50);
}
黃彥霖 發表在 痞客邦 留言(0) 人氣(4,719)
請先下載 Timer 庫。並解壓縮到 Arduino 專案路徑下 (存檔路徑)
https://github.com/JChristensen/Timer#installation
傳統我們要控制 LED 閃爍頻率則是修改 delay() 延遲時間,但是如果之後要讓 10 個 LED 以不同頻率閃爍則非常困難。如果之後只是要修改其中一個LED頻率,那麼其他9個LED也要修改,而且還要大量計算好時間,這是非常不容易維護的。如下是使用傳統作法:
黃彥霖 發表在 痞客邦 留言(7) 人氣(50,051)
請勿使用 Aduino 內建的 COM 輸入,內建有些BUG可能無法正確輸出。這裡我是用 Access Port 軟體,也是將資料從COM輸出至Arduino軟體。
下載:http://www.sudt.com/en/ap/download.htm
打開 Access Port 從左上角的齒輪圖案設定 COM 與 包率 (9600、115200...等等)。
OK後按下電源圖案即可與 Arduino通信
在下方的框框輸入 ABC 並按下 Enter 後,點選 [發送資料按鈕] 即可看見 第12腳 LED 發光發亮。
黃彥霖 發表在 痞客邦 留言(1) 人氣(6,856)

ADXL345 是一種常見、便宜、簡單、好用的 3 軸加速度計。我這片 ADXL345 模組是我在露天拍賣買的,約台幣 110 元...,比起之前買的 LSM303DLH 就要台幣 6、7 百元要來的便宜多了...Orz
另外記得
信號線 都要接
10K 上拉電阻,不然會讀不到...( 只要是走 i2c 協定的都要接上拉電阻
實際接線圖 (右邊小塊板子就是 ADXL345 ):
特寫 ADXL345 模組:
執行結果:
黃彥霖 發表在 痞客邦 留言(49) 人氣(50,178)

還有一篇基本篇可參考:http://lolikitty.pixnet.net/blog/post/163032620
#include <Wire.h>
// LSM303DLHC 的 i2c 地址。由於 Arduino i2c 資料空間是 7 bit 所以要右移一個位元
int i2cAddress = 0x32 >> 1;
void
setup() {
Serial.begin(9600);
Serial.println("-------------------");
Wire.begin(); // 啟用 i2c
writeReg(0x20,0b00100111); // 打開三軸加速計的電源 ,設定每秒讀取10次,啟用XYZ軸
}
void
loop() {
Wire.beginTransmission(i2cAddress);
Wire.write(0x28 | (1 << 7));
Wire.endTransmission();
Wire.requestFrom(i2cAddress, 6);
byte xla = Wire.read();
byte xha = Wire.read();
byte yla = Wire.read();
byte yha = Wire.read();
byte zla = Wire.read();
byte zha = Wire.read();
int x = (xha << 8 | xla) >> 4;
int y = (yha << 8 | yla) >> 4;
int z = (zha << 8 | zla) >> 4;
Serial.print("X : ");
Serial.print(x);
Serial.print(" Y : ");
Serial.print(y);
Serial.print(" Z : ");
Serial.println(z);
delay(500);
}
/*************************************************************
* 寫入佔存器:writeReg(int reg, int value)
* reg:佔存器地址
* value:要寫入的值
*/
void writeReg(int reg, int value){
Wire.beginTransmission(i2cAddress);
Wire.write(reg);
Wire.write(value);
Wire.endTransmission();
}
/*************************************************************
* 讀取佔存器:readReg(int reg)
* reg:要讀取的佔存器地址
*/
int readReg(int reg){
Wire.beginTransmission(i2cAddress);
Wire.write(reg);
Wire.endTransmission();
Wire.requestFrom(i2cAddress, 1);
int value = Wire.read();
Wire.endTransmission();
return value;
}
黃彥霖 發表在 痞客邦 留言(1) 人氣(1,791)

還有一篇進階篇可參考:http://lolikitty.pixnet.net/blog/post/163257851
#include <Wire.h>
// LSM303DLHC 的 i2c 地址。由於 Arduino i2c 資料空間是 7 bit 所以要右移一個位元
int i2cAddress = 0x32 >> 1;
void
setup() {
Serial.begin(9600);
Serial.println("-------------------");
Wire.begin(); // 啟用 i2c
writeReg(0x20,0b00100111); // 打開三軸加速計的電源 ,設定每秒讀取10次,啟用XYZ軸
}
void
loop() {
Serial.print("X : ");
Serial.print(readReg(0x29));
Serial.print(" Y : ");
Serial.print(readReg(0x2B));
Serial.print(" Z : ");
Serial.println(readReg(0x2D));
delay(500);
}
/*************************************************************
* 寫入佔存器:writeReg(int reg, int value)
* reg:佔存器地址
* value:要寫入的值
*/
void writeReg(int reg, int value){
Wire.beginTransmission(i2cAddress);
Wire.write(reg);
Wire.write(value);
Wire.endTransmission();
}
/*************************************************************
* 讀取佔存器:readReg(int reg)
* reg:要讀取的佔存器地址
*/
int readReg(int reg){
Wire.beginTransmission(i2cAddress);
Wire.write(reg);
Wire.endTransmission();
Wire.requestFrom(i2cAddress, 1);
int value = Wire.read();
Wire.endTransmission();
return value;
}
黃彥霖 發表在 痞客邦 留言(2) 人氣(2,806)
// 資料手冊 i2c 的 TC74 A0 地址是寫 1001000
#include <Wire.h>
int i2cAddress = 72; // TC74 A0 的 i2c 地址 ( 2 進制 1001000 轉成 10 進制後為 72 )
void setup() {
Serial.begin(9600);
Serial.println("-------------------");
Wire.begin(); // 一定要寫
}
void loop() {
Wire.beginTransmission(i2cAddress);
Wire.write(0);
Wire.endTransmission();
Wire.requestFrom(i2cAddress, 1); // 一定要寫
while(Wire.available() == 0); // 等待回應
Serial.println(Wire.read()); // 讀取溫度並傳送至電腦顯示
delay(500); // 延遲0.5秒
}
黃彥霖 發表在 痞客邦 留言(0) 人氣(4,305)

本次使用 CSR BC-4 藍牙模組 ,是一款常見的藍芽模組,個人覺得便宜好用...
程式碼:
void
setup(){
黃彥霖 發表在 痞客邦 留言(2) 人氣(9,611)
Arduino 官方的 Serial.read() 一次只能讀取一個字元 ( char ) ,但是在很多應用上都是使用字串 ( String ) 操控比較多,另外一整行寫入官方已經有實作 Serial.println() 了,所以這裡不再講解。今天來介紹如何使 Arduino UART 讀取 一整行字串的程式碼,如下:
黃彥霖 發表在 痞客邦 留言(2) 人氣(21,328)