Tag Archives: android

[Android ADK + Arduino] Lesson2 控制LED漸明漸暗

[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);
}
}
}
}
}

[Android ADK + Arduino] Lesson1 控制LED亮滅

本範例是[Beginning Android ADK with Arduino]一書中的Project 1. 透過Android畫面上的toggle button 來控制Arduino板上的LED燈亮滅.

您需要的硬體有:

1. Arduino MEGA ADK or 其他相容ADK板

2. Android手機或平板(2.3.3 or 3.1以上).

3. LED. 電阻x1, 線材一批.

   

Android端程式(部分)

Android端程式的關鍵在於在toggleButton狀態改變時, 呼叫sendLedSwitchCommand()方法, 對TARGET_PIN_2 (LED正極腳位)寫入 params[0]). 使用togglebutton而非一般button的用意在於其機械性質的差異, button需持續壓按才算為pressed, togglebutton則是在點擊之後就會改變狀態, 直到下一次點擊為止, 不需要一直壓著.

OnCheckedChangeListener toggleButtonCheckedListener = new OnCheckedChangeListener() {

        public void onCheckedChanged(CompoundButton buttonView,
                boolean isChecked) {
            if (buttonView.getId() == R.id.led_toggle_button) {
                new AsyncTask () {

                    @Override
                    protected Void doInBackground(Boolean… params) {
                        sendLedSwitchCommand(TARGET_PIN_2, params[0]);
                        return null;
                    }   
                }.execute(isChecked);
            }
        }
    };

在sendLedSwitchCommand()方法中則是使用mOutputStream.write()來控制LED的高低電位, 也就是亮滅.

public void sendLedSwitchCommand(byte target, boolean isSwitchedOn) {
        byte[] buffer = new byte[3];
        buffer[0] = COMMAND_LED;
        buffer[1] = target;
        if (isSwitchedOn) {
            buffer[2] = VALUE_ON;
        } else {
            buffer[2] = VALUE_OFF;
        }
        if (mOutputStream != null) {
            try {
                mOutputStream.write(buffer);
            } catch (IOException e) {
                Log.e(TAG, "write failed", e);
            }
        }
    }

Arduino端程式 部分, 省略main 與Acc物件定義.

Arduino端則是在loop()端終判斷接收到的value為何, 如果是VALUE_ON, 則digitalWrite(PIN, HIGH)來點亮LED. 反之則關閉.

#define COMMAND_LED 0x2
#define TARGET_PIN_2 0x2
#define VALUE_ON 0x1
#define VALUE_OFF 0x0

#define PIN 2

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 switch state
      byte value = rcvmsg[2];
          //set output pin to according state
          if(value == VALUE_ON) {
            digitalWrite(PIN, HIGH);
          } else if(value == VALUE_OFF) {
            digitalWrite(PIN, LOW);
          }
        }
      }
    }
  }
}

Android Facebook API實作列車 #1 – 申請Facebook App

有興趣使用Android 裝置上開發 Dacebook 應用的朋友們, CAVE將編寫一系列專文教您快快樂樂學會Android Facebook API。

預計內容如下:

1. 申請Facebook App

2. Graph API explorer

3. 第一支程式:

OpenSSL產生Android Key Hash
include android Facebook SDKsdk
載入Facebook畫面

5. 塗鴉牆發文

6. 上傳照片

7. 打卡

8. FQL (Facebook查詢語言).

本篇為第一篇: 申請Facebook App.

有時候我們會看到自己或是友人的Facebook訊息下方有 “來自XXX” 的副標題, 這個XXX就是一個Facebook app。 由於Facebook代表是一個人在虛擬世界中的動態, 可不能隨隨便便就讓一些不知名的程式透過您的帳號來發文。 (雖然有時候還是會有大洗板的狀況發生就是了…)。 下圖的 “來自cavedu” 就是阿吉老師自己寫的一個假的打卡Facebook App, 我6/13並沒有去新竹市立演藝廳呢!! 之後我們都會用這個app 來進行各種Facebook操作。

1. 請到Facebook 開發者網站 : https://developers.facebook.com/ 登入帳號就是您的帳號, 無須另外申請, 點選最上面的 “應用程式”。

2. 首次進入時, 本畫面是空白的, 因為您尚未建立任何Facebook app。 請點選 “建立新的應用程式”。 依序完成即可, 過程中您需要輸入您的行動電話號碼, 收到系統傳來的認證碼之後才能申請完成。

3. 申請完成之後如下圖,  一些東西我遮起來了, 這不會影響到您之後寫程式。 請注意圖中間有一個Android Key Hash欄位, 我們必須使用OpenSSL 這個工具在您用來開發的電腦上產生一組Android Key Hash, 填入這個欄位之後, 才能讓我們的Android app 順利透過現在這個 Facebook app 來進行各種動作。

請注意: 如果您會在一台以上的電腦進行開發的話, 就要每一台電腦都產生一組Android Key Hash才行。

這樣就完成第一步囉!!

Android Facebook API 小小心得整理

由於教課的需要, 最近把Android Facebook API 簡單摸過一遍, 我會在近日把Android Facebook API 的功能整理出來, 帶領大家一步步開發出Facebook常見的功能, 例如po文, 上傳照片以及打卡等等。

我是從入門者的角度來切入, 所以如果您是自己看Facebook範例就能一路過關斬將的朋友, 就不用看這裡啦~

希望可以幫到有興趣開發Android Facebook app的朋友們。 預計內容如下:

申請facebook app

Graph API explorer

在Eclipse中匯入Android Facebook sdk

專題1 載入Facebook畫面

   什麼是SSO (Single Sign-on 與 Access token)

   facebook.authorize 權限說明

專題2 po文塗鴉牆

專題3 上傳照片

專題4 打卡功能

專題5 FQL

4月最後一場 Android ADK / Arduino 研習 – 4/28 於淡江大學

http://tkurobotclub.blogspot.com/2012/03/android-adk-arduino.html

4月最後一場Android ADK / Arduino 研習, 有興趣的朋友請千萬不要錯過啦~

歡迎線上報名!!

4/16 台中女中

4/22 CAVE大本營

4/23 聖約翰科大

======================================================

時間 : 101428日星期六  13:00~17:00

地點 : 淡江大學E819

主辦單位:淡江大學電機工程學系、淡江大學機器人研究社。

協辦單位:CAVE教育團隊、翰尼斯企業有限公司

備註:
1. 
活動現場將配有Arduino MEGA ADK開發板與NXShield-M擴充板乙套使用(至多兩位參加者共用造成不便敬請見諒)

2. 自行攜帶筆記型電腦與Android裝置,以便實際操作。

3. 規格限定:Android手機版本需為2.3.4以上,平板版本需為3.1以上方能使用ADK功能。如不確定您的設備是否支援請來電或來信詢問。(0973108985劉几銘/ giming@cavedu.com


收費:在校生100元,名額有限請儘早報名。

匯款方式:
銀行名稱 :郵局 淡江大學郵局 
戶名 :淡江大學機器人研究社劉几銘
銀行代號 :700
帳號 :2441285-0408338

超級好禮相贈:
  1. Android ADK材料包乙包,不包含Arduino MEGA ADK控制板與NXShield-M擴充板和麵包板。

活動議程:

13:00 CAVE教育團隊簡介

13:20 安裝EclipseAndroid環境 (建議先行安裝完成)
            Arduino 1.0 環境安裝與介紹
            第一支Arduino程式
&n
bsp;           
匯入CapSense AndroidAccessory / USB_Host_Shield函式庫
            搭配 NXShield 控制樂高機器人(感測器存取, 馬達控制).

14:30 中場休息、茶敘

14:50  使用Android裝置控制周邊:LED,伺服馬達,按鈕等

15:40  使用Android裝置控制樂高機器人(姿態感測器)
           [
小型專題]           

16:50 結語、賦歸

注意:主辦單位保留修改與解釋活動之所有權利。

聯絡方式:0973108985 劉几銘 / giming@cavedu.com


若不方便轉帳繳費,我們預計會有幾天在淡江大學體育館SG121(機器人研究社社辦)進行收費處理,由於人數有限制,活動以已繳費對像為優先錄取。


0416 Android ADK嵌入式系統研習@台中女中

0416 陰雨綿綿的天氣,CAVE到了台中女中對中區的資訊與生活科技老師們舉辦Android ADK嵌入式系統研習。

25位名額早早就額滿了,謝謝大家的支持。CAVE新秀 – 几銘老師,現在是淡江電機系大四,也是機器人研究社社長喲。

首先先用Arduino控制LED燈來暖身

接著就是組裝出一臺輪型機器人啦,大家都用手機拍照之後回到座位慢慢組。

几銘老師示範機器人利用Android的Orientatino sensor來朝著指定方向前進,就是指南車啦。

Android ADK在開發上是比較硬的,既便如此,許多老師表示對於Android + Arduino這個課題相當有興趣。CAVE會努力提供更多優質內容給大家的!

花絮時間:阿吉老師示範藍牙與樂高機器人的各種控制方法。

[Android ADK + Arduino] 姿態感測器控制Arduino/NXT機器人

使用Android手機透過USB線來控制Arduino MEGA ADK. 本專案是透過NXShield-M讓Android手機得以控制樂高NXT周邊。由於NXShield為 MindSensors公司系列產品,所以在函式庫中也完整支援了MindSensors產品。

我們之後會陸續發表更多Android ADK + Arduino的教學影片,也請大家看看 豐原高中郭老師的專業部落格

包好Android ADK的Arduino 1.0環境請按我下載

Arduino程式與Android範例程式請到 CAVE實驗室 下載

請看以下影片,聲音是阿吉老師的聲音啦(很沙啞)  歡迎分享~

[youtube=https://www.youtube.com/watch?feature=player_embedded&v=hHVM_5KmHdA]

[Android ADK + Arduino] USB姿態控制機器人

Google ADK 結合NXT機器人成果出爐!! 使用Android手機的姿態感測器來控制 樂高機器人。 請注意NXT主機已經換成 Arduino MEGA ADK。 並透過NXShield-M來連接 NXT 馬達。

下一個範例是透過Android手機來控制Arduino控制板上的servo, 敬請期待!

您需要的硬體是:

Android手機(2.3.4)以上 or Android平板 3.1以上。

Arduino MEGA ADK

NXShield-M  (專門用來連接樂高NXT周邊, 如果用不到的話就不需要這一片擴充板)

電源: 可用USB供電 or 9V (最大10.5V)直流電源

Android 端程式與Arduino端程式請都由 CAVE實驗室 下載

 

[Android 教學] Google 圖表工具

http://code.google.com/intl/zh-TW/apis/chart/

範例程式下載請按我

今天要介紹的是 Google Chart Tools 表格工具, 包含了長條圖, 雷達圖, 圓餅圖, 折線圖等等只要是圖表這邊都可以使用。可以在您的網站中嵌入或是Android app 中使用本項服務來得到各種精美的表格。

本範例修改自 [Google Android SDK開發範例大全|第3版] 範例0903, 會將輸入字串送給Google Chart Tools 之後回傳正確的QRCode。

問題來了, 這些參數說真的不是太好懂, 所以可以使用圖表精靈 Chart Wizard(http://code.google.com/intl/zh-TW/apis/chart/image/docs/chart_wizard.html), 它真的超好用的!  只要了解基本的參數設定, 人人都可以做出超精美的表格~

舉例來說, 我想要產生一張雷達圖, 我只要點選進入雷達圖選項之後, 調整參數, 然後把以下參數貼到Android程式中就可以了。事實上browser會自動辨識 < img >標籤把它變成一張圖, 所以我們刪除標籤只留下內文。

“http://chart.apis.google.com/chart?chxl=0:|Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec&chxt=x,y&chs=300×300&cht=r&chco=FF0000&chd=t:63,64,67,73,77,81,85,86,85,81,74,67,63&chls=2,4,0&chm=B,FF000080,0,0,0”

以上比較重要的參數有 chxl 是分類項目名稱(Jan~Dec)。chs是圖表尺寸, chd是各分類項目值。所以Jan的值是63, Feb是64…  以此類推到Dec是63。

在Android中, 我們可以透過 WebView.loadData()方法來將回傳結果顯示在螢幕上。

範例程式下載請按我

請注意本範例只示範Android app 去載入不同的Google Chart Tools 參數, 所以範例程式中不論輸入什麼所載回來的圖型都是一樣的唷! 如果需要在app端自行輸入參數來調整的話, 您需要使用EditText.getText().toString() 來取得 輸入欄位中的資訊, 再指定到對應的 Google Chart Tools參數中。


[Android ADK] 環境建置說明 #2 Android裝置 ADK環境設定

[Android ADK] 環境建置說明 #2

Android裝置 ADK環境設定並執行DemoKit 範例程式

請先閱讀 [Android ADK] 環境建置說明 #1 Arduino 與相關函式庫

請注意執行時,ADK開發板需使用DC電源,不可使用AC電源,否則可能會抓不到裝置甚至損壞。

方才下載的ADK套件中的app資料夾是一個名為DemoKit的 Android程式,它可以讓您的Android裝置與ADK開發板互相溝通。ADK開發板可接收來自Android裝置的指令,例如點亮ADK開發板上 的LED燈;或是回送指令給Android裝置,例如ADK開發板上的搖桿狀態與溫度計讀數。

在Eclipse環境中安裝並執行DemoKit範例程式:

1.      您必須先依序安裝下列項目才能建置Android開發環境,詳細安裝步驟請參考:http://code.google.com/p/androidbmi/wiki/InstallAndroid . 大部分的時間都花在這…

A.    JDK

B.     Eclipse

C.     在Eclipse中下載Android開發套件

2.      確認已安裝了 Google APIs API Level 10 add-on 函式庫,裡頭包含了支援周邊模式(accessory mode)的Open Accessory函式庫,可支援Android手機2.3.4或Android平板3.1以上的裝置。如果您的設備都在3.1以上,您只需要使用API Level 12即可。更多有關API Level的使用資訊請參考the USB Accessory 說明頁面。(http://developer.android.com/guide/topics/usb /accessory.html#choosing)

3.      點選 File > New > Project…,然後點選Android > Android Project。

4.      在Project name: 欄位中輸入專案名稱:DemoKit。

5.      接著選擇Create project from existing source,點選 Browse,選擇剛剛的app 資料夾之後點選 Open,最後點選 Finish來關閉對話視窗。

6.      在Build Target中選擇「 Google APIs (Platform 2.3.3, API Level 10) 」。

注意:即便這裡只顯示 2.3.3,最新的Google API add-on 函式庫API level 10 已支援了USB Open Accessory API。

7.      正確載入如下圖,點選頁面下方的 Finish。

8.      將Demokit安裝在您的Android裝置上。手機設定請參考此頁:

http://www.appinventor.tw/phone

9.      將ADK開發板 (USB-A) 與您的Android裝置連接(micro-USB)。請確認ADK開發板的DC 電源已接上,或使用micro-USB 連接ADK開發板與電腦,這樣可以讓您監測(this also allows you to monitor the ADK開發板). 連接之後會跳出一個視窗,詢問您是否讓DemoKit程式與ADK開發版進行溝通。如果沒有出現prompt,請確認DC電源是否接上並重新連接ADK開 發板。

終於完成了!您可以在Android裝置上移動彩色LED或servo控制條來和ADK互動了(當然您得找個小伺服機),也可以按下螢幕上的relay按鈕。另一方面,您可以按下ADK開發板上的按鈕或轉動搖桿,看看Android裝置螢幕上所產生的效果。

        注意:Teemino與Arduino MEGA ADK這兩片板子並無LED與搖桿。

監測ADK開發板

The ADK 韌體檔案中包含了一些重要的資料,日後您如果需要開發專屬的周邊設備,您就需要好好了解它們。在firmware/arduino_libs /AndroidAccessory 資料夾下的檔案相當重要,因為它們負責偵測並連接那些已支援周邊模式的Android裝置。您可以自行對 arduino_libraries_directory /AndroidAccessory 資料夾下的相關程式碼,以及 firmware/demokit/demokit.pde 這個韌體檔中加上必要的 除錯指令(例如Arduino的 Serial.print() 指令),接著重新上傳到ADK開發板來看看韌體的實際運作方式。

您也可 以從Arduino Serial Monitor 來檢查相關訊息,請點選 Tools > Serial Monitor 並設定baud rate為 115200。如果您要進一步理解USB周邊是如何與Android裝置進行溝通的話,請參閱以下頁 面:http://developer.android.com/guide/topics/usb/adk.html#accessory- protocol。

[Android ADK] 環境建置說明 #1 Arduino 與相關函式庫

Android ADK安裝手冊  #1 Arduino 與相關函式庫

本文件說明如何安裝Arduino軟體,並接續安裝ADK開發板上的Android應用程式。開始安裝之前,請先下載以下檔案來設定開發環境:

注意:本文件是以Windows作業系統來說明,如果您使用MAC或是Linux,請自行參閱http://developer.android.com/guide/topics/usb/adk.html

注意:Android ADK要求Android版本為2.3.4(手機)或3.1(平板電腦)以上,所以請先確認您的Android裝置的版本符合此項需求。

懶人包:500MB製作中

您需要下載以下的東西:

1. Arduino軟體:包含了相關的函式庫以及開發環境,我們就是由此安裝ADK開發板的韌體。

2. CapSense 函式庫:包含了可感測體電容(human capacitance)的相關函式. ADK開發板上裝有這種電容按鈕。

3. ADK套件: 包含ADK開發板的韌體檔案,以及ADK開發板與Shield轉接板相關的硬體設計檔案。

安裝 Arduino軟體與相關函式庫

1.      由Arduino官方網站下載並安裝Arduino軟體。

2.      下載並解壓縮ADK套件,您會看到app、firmware以及hardware 這三個資料夾。

3.      下載並解壓縮CapSense

4.      安裝函式庫:

a.       將 firmware/arduino_libs/AndroidAccessory and firmware/arduino_libs /USB_Host_Shield 這兩個資料夾複製到 /libraries/ 資 料夾下,請注意要複製完整的資料夾,不能只複製底下的檔案。

b.      在  /libraries/ 資料夾下建立一個名為「CapSense」的資料夾。

c.       從剛剛解壓縮的CapSense 檔案中找到 CapSense.cpp and CapSense.h,將這兩個檔案複製到上一步所建立的CapSense 資料夾。

這時候您應該會在Arduino的libraries資料夾下看到以下三個資料夾: AndroidAccessory, USB_Host_Shield, and CapSense。

安裝ADK開發板的韌體:

1.      使用micro-USB埠將ADK開發板連接到您的電腦,這可讓電腦與開發板進行雙向通訊同時讓電腦對ADK開發板供電。

2.      啟動Arduino軟體。

3.      點選 Tools > Board > Arduino Mega 2560 來指定ADK開發板的種類。

注意:

4.      選擇正確的USB 埠:

點 選 Tools > Serial Port > COM# 來指定正確的通訊埠。COM埠會根據不同的電腦而有所不同,不一定都是同一組號碼。COM1 通常會被保留, ADK板一般來說會被指定為COM2或COM3, 依序延伸. 您可由下圖中看到ADK開發板被指定為COM14。


5.      點選 File > Open and 選擇 firmware/demokit/demokit.pde 來開啟檔案, 這是ADK開發板的韌體檔. 也可以直接將這個檔案拖拉至Arduino環境。

6.      點選 Sketch > Verify/Compile 來確保sketch可以順利編譯沒有錯誤。編譯成功會顯示Done Compiling, 如下圖。

7.      點選File > Upload to I/O Board。當Arduino畫面顯示「Done uploading.」,這時ADK開發板已經可以與您的Android裝置進行雙向溝通了。

請接續下篇 -> #2 Android裝置 ADK環境設定

Android 4.0 SDK 已經可以下載了!!

http://developer.android.com/index.html  Android 新版 SDK 主頁面

http://developer.android.com/sdk/android-4.0-highlights.html   Android 4.0有那些新功能?

大家看到下面可愛的冰淇淋三明治了嘛?   新版的Android 4.0 一統手機與平板的作業系統版號。 如同蘋果的iOS一樣, 在同一個環境下即可以開發給手機/平板電腦的應用程式。

現在CAVE的夥伴們正在開心地更新到新的作業環境, 之後會不定期分享有趣的範例出來。

請看 Samsung 的 Galaxy NEXUS 示範影片. 個人感覺UI真的有很大的進步呢!!