[Android ADK + Arduino] Lesson1 控制LED亮滅
本範例是[Beginning Android ADK with Arduino]一書中的Project 2. 透過Android畫面上的SeekBar滑桿 來控制Arduino板上的LED燈漸明漸暗。
您需要的硬體有:
1. Arduino MEGA ADK or 其他相容ADK板
2. Android手機或平板(2.3.3 or 3.1以上).
3. LED(5V). 電阻(220歐姆) x1, 線材一批.
Android端程式(部分)
Android端程式的關鍵在於使用SeekBar物件的狀態監聽事件來 呼叫sendLedIntensityCommand()方法, 對TARGET_PIN_2 (LED正極腳位)寫入 params[0]). 我們將SeekBar分成256個等級來控制LED的明暗, 和上個範例是不一樣的效果唷.
OnSeekBarChangeListener ledIntensityChangeListener = new OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress,
boolean fromUser) {
ledIntensityTextView.setText(“LED intensity: ” + ledIntensitySeekBar.getProgress());
new AsyncTask () {
@Override
protected Void doInBackground(Byte… params) {
sendLedIntensityCommand(TARGET_PIN_2, params[0]);
return null;
}
}.execute((byte) progress);
}
//…其它省略
};
在sendLedIntensityCommand()方法中則是使用mOutputStream.write()來控制LED漸明漸暗 .
public void sendLedIntensityCommand(byte target, byte value) {
byte[] buffer = new byte[3];
buffer[0] = COMMAND_LED;
buffer[1] = target;
buffer[2] = value;
if (mOutputStream != null) {
try {
mOutputStream.write(buffer);
} catch (IOException e) {
Log.e(TAG, “write failed”, e);
}
}
}
Arduino端程式 部分, 省略main 與Acc物件定義.
Arduino端程式與上一個範例 差別在於使用analogWrite方法來控制LED, 而非digitalWrite. 請注意您所使用的PIN腳位必須支援PWM才可以唷.
void loop() {
if (acc.isConnected()) {
//read the received data into the byte array
int len = acc.read(rcvmsg, sizeof(rcvmsg), 1);
if (len > 0) {
if (rcvmsg[0] == COMMAND_LED) {
if (rcvmsg[1] == TARGET_PIN_2){
//get the analog value
byte value = rcvmsg[2];
//set output pin to according analog value
analogWrite(PIN, value);
}
}
}
}
}