本社群由Nantou.py使用者社群以及國立虎尾科技大學電機資訊學院負責維護,它是一群熱愛智慧生活科技以及Python的專業教師所組成,大家一同快樂地研究有關數位生活中人工智慧、大數據、物聯網、雲端服務、APPS、福祉科技、感知網路服務、車載網路服務、及網際網路等資通訊技術,並運用這些資通訊以及Python技術來提升我們的日常生活品質,建立更好的生活環境。
2010年5月27日 星期四
在Android下使用Modbus協定來連結PLC設備
2010年5月25日 星期二
CAN晶片介紹(MCP2510)
MCP2510是由Microchip所生產可支援FULL CAN 2.0A/B的晶片,該晶片支援CAN Bus 上限1Mbps的通訊能力,它是利用SPI介面和微控器進行溝通。您可以在http://www.alldatasheet.com/datasheet-pdf/pdf/74933/MICROCHIP/MCP2510.html下載它的使用手冊。
2010年5月23日 星期日
2010年5月22日 星期六
2010年5月20日 星期四
[轉貼]通用汽車與Google合作 為Chevrolet Volt提供導航功能
通用汽車在早前舉行的CES大會上公佈一款汽車專用軟件《OnStar Mobile 》,讓車主無論身處何地,都可透過智能手機即時監控汽車狀況及控制汽車上的功能。官方表示目前支援多個手機平台,包括: Android、iPhone、Blackberry等,不過該軟件暫時只能應用在即將推出的「Chevrolet Volt」汽車上。
最近通用汽車發佈新聞稿表示,旗下子公司OnStar將與Google合作,為「Chevrolet Volt」汽車加入導航系統。通用汽車指出,新Android版本的《OnStar Mobile 》已經加入了「導航」標籤,車主只需按下標籤,就能在Android手機上看到汽車的所在位置。另外,車主還可將Google地圖搜索結果發送至汽車上,然後通過OnStar的導航系統接收,即時顯示車主行車路線。
除了以上新增導航功能外,原本OnStar系統功能包括: 查看汽車電量狀況、進行遠端充電、控制車門開鎖或解鎖、開啟引擎、啟動車內空調等。該軟件目前是測試階段,仍未推出完整版本,所以有部份功能未能夠應用,但通用汽車預計在正舉行的Google I/O大會展示這款《OnStar Mobile 》,到其時再檢視用家報告作參考。
2010年5月16日 星期日
如何觀察Activity從Running到Pause或從Pause到Running
1. 建立一個新專案,並實作onPause()和onStart()兩個函式。
2. 利用Toast物件來顯示Activity的狀態。
3. 執行此專案。
4. 執行另一個專案,如snake,此時會看到原來的專案顯示處於Pause狀態。
5. 在模器手機上按下"回到上一個動作"的按鈕,您可看到顯示處於Running狀態。
package com.example;
import android.app.Activity;
import android.os.Bundle;
import android.widget.Toast;
public class TestActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
@Override
protected void onPause() {
// TODO Auto-generated method stub
Toast.makeText(this, "Pause", Toast.LENGTH_SHORT).show();
super.onPause();
}
@Override
protected void onStart() {
// TODO Auto-generated method stub
Toast.makeText(this, "Running", Toast.LENGTH_SHORT).show();
super.onStart();
}
}
用UML來表示由AIDL所產生的介面內部物件的關係圖
2010年5月12日 星期三
利用AIDL實作遠端服務之步驟
1. 建立專案,建立RemoteServiceBinding的Activity類別,按下Finish鍵。
2. 建立IRemoteServiceCallback介面並宣告valueChanged兩個函式。
3. 建立IRemoteService介面並宣告registerCallback和unregisterCallback兩個函式。
4. 建立ISecondary介面並宣告getPid和basicTypes兩個函式。
5. 建立遠程RemoteService類別。
6. 在AndroidManifest.xml檔案中增加服務,記得在Process欄位上補上:remote。
7. 在RemoteServiceBinding.java程式中,宣告兩個按鈕及1個文字物件,並利用findViewById函式將這些物件和視域建立關係,利用setOnClickListener函式,來為按鈕安裝監聽按鈕的事件之監聽器。
8. 實作ServiceConnection內的函式。
9. 在RemoteService類別中增加IRemoteService.Stub物件,並將該物件當成onBind函式的傳回值。
10. 此時執行後再下Start Service按鈕如標題欄如顯示Binding則表示成功。
11. 在RemoteService.java下,實作registerCallback和unregisterCallback兩個函式,並宣告RemoteCallbackList
12. 在RemoteService.java下,實作1個handler來定期處理事情,呼叫valueChanged函式來改變Activity上的畫面。
13. 在RemoteServiceBinding.java下,實作valueChanged函式,並將收到的值顯示在畫面上。
2010年5月11日 星期二
USB設備及電腦監控整合設計
1. 修改VID及PID,此部份可以修改VB或Keil C,只要兩邊一致即可。
例如:修改dscr.a51(粗體是修改的部份)
DeviceDscr: db deviceDscrEnd-DeviceDscr ;; Descriptor length
db DSCR_DEVICE ;; Decriptor type
db 10H, 01H ;; Specification Version (BCD)
db 00H ;; Device class
db 00H ;; Device sub-class
db 00H ;; Device sub-sub-class
db 64 ;; Maximum packet size
db 25H, 9H ;; Vendor ID ;;************************
db 99H, 12H ;; Product ID ;;************************
dw 0001H ;; Product version ID
db 1 ;; Manufacturer string index
db 2 ;; Product string index
db 0 ;; Serial number string index
db 1 ;; Numder of configurations
deviceDscrEnd:
2. 讓USB設備起動時能用燈號來顯示(修改periph.c中TD_Init())
該函式只執行一次。
void TD_Init(void) // Called once at startup
{
int i,j;
PORTACFG = 0x00;
OEA = 0xFF;
PORTBCFG = 0x00;
OEB = 0xFF;
OED = 0xFF;
P0=0;
for(i=0; i<1000; i++)
for(j=0; j<1000; j++);
P0=0xff;
for(i=0; i<1000; i++)
for(j=0; j<1000; j++);
P0=0;
IN07VAL |= bmEP2 ;
OUT07VAL |= bmEP2;
OUT07IEN |= bmEP2;
IN07IEN |= bmEP2;
//HID code end
suspCount = 1;
OEA = 0xFF;
Rwuen = TRUE; // Enable remote-wakeup
}
3. 讓USB設備上的燈號持續顯示,可以修改TD_Poll函式,宣告一個全域變數cnt並在TD_Init()上初始化。
int cnt;
void TD_Init(void) // Called once at startup
{
int i,j;
PORTACFG = 0x00;
OEA = 0xFF;
PORTBCFG = 0x00;
OEB = 0xFF;
OED = 0xFF;
P0=0;
for(i=0; i<1000; i++)
for(j=0; j<1000; j++);
P0=0xff;
for(i=0; i<1000; i++)
for(j=0; j<1000; j++);
P0=0;
cnt=0;
IN07VAL |= bmEP2 ;
OUT07VAL |= bmEP2;
OUT07IEN |= bmEP2;
IN07IEN |= bmEP2;
//HID code end
suspCount = 1;
OEA = 0xFF;
Rwuen = TRUE; // Enable remote-wakeup
}
void TD_Poll(void) // Called repeatedly while the device is idle
{
cnt++;
if(cnt>10000)
{
P0=1-P0;
cnt=0; }
}
4. 能由電腦來控制故要修改ISR_Ep2out(),利用該函式來控制flag全域變數,對TD_Poll()函式進行控制。
int cnt;
int flag;
void TD_Init(void) // Called once at startup
{
int i,j;
PORTACFG = 0x00;
OEA = 0xFF;
PORTBCFG = 0x00;
OEB = 0xFF;
OED = 0xFF;
P0=0;
for(i=0; i<1000; i++)
for(j=0; j<1000; j++);
P0=0xff;
for(i=0; i<1000; i++)
for(j=0; j<1000; j++);
P0=0;
cnt=0;
flag=0; IN07VAL |= bmEP2 ;
OUT07VAL |= bmEP2;
OUT07IEN |= bmEP2;
IN07IEN |= bmEP2;
//HID code end
suspCount = 1;
OEA = 0xFF;
Rwuen = TRUE; // Enable remote-wakeup
}
void ISR_Ep2out(void) interrupt 0
{
int i;
if (EPIO[IN2BUF_ID].cntrl & bmEPBUSY)
{
TOGCTL = 0x08 | IN2BUF_ID;
WRITEDELAY();
if (TOGCTL & 0x80)
TOGCTL |= 0x20;
else
TOGCTL |= 0x40;
}
for (i=0; i < OUT2BC; i++)
{
flag=OUT2BUF[0];
// P0=OUT2BUF[0];
// P1=OUT2BUF[1]; //-------------------------------------------------
// P3=OUT2BUF[2];
}
OUT2BC = 0;
EZUSB_IRQ_CLEAR();
OUT07IRQ = bmEP2;
}
5. 最後修改VB控制程式,增加兩個按鈕程式
Private Sub Command1_Click()
If MyDeviceDetected = False Then
MyDeviceDetected = FindTheHid
End If
If MyDeviceDetected = True Then
OutputReportData(0) = 0
'Write a report to the device
Call WriteReport
Call WriteReport
'Read a report from the device.
Call ReadReport
End If
End Sub
Private Sub Command2_Click()
If MyDeviceDetected = False Then
MyDeviceDetected = FindTheHid
End If
If MyDeviceDetected = True Then
OutputReportData(0) = 1
'Write a report to the device
Call WriteReport
Call WriteReport
'Read a report from the device.
Call ReadReport
End If
End Sub
利用代理人技術來協助進行簡報
2010年5月10日 星期一
2010年5月9日 星期日
[活動資訊]Android 系統元件探討 (5/22 下午場)
Android 系統元件探討 (不含 Android 應用程式開發)
大綱
- 拆解 Android 架構:專注於系統層面
- 特化的 Dalvik VM
- 系統元件:SurfaceFlinger, PixelFlinger, libagl, AudioFlinger
- 跟想像有些落差的 Android HAL
議程簡介
儘管 Android 是相當火紅的專案,市面上有大量的書籍與資料探索 Android 應用程式開發,但鮮少有專文探討 Android
系統中若干經典的軟體元件,如 Dalvik VM, SurfaceFlinger, PixelFlinger, libagl,
AudioFlinger, HAL 等項目,往往得在原始程式碼中探險許久,才會有些端倪。講者有幸能在系統層面耕耘一段時日,於是想藉由
Study Area 的場合,將這些系統元件作一簡要探索,希望能對有心移植 Android 或改良整體功能與效能的朋友,能有所助益。
建議聽者背景 (任一)
(1) 已熟悉 C/C++/Java 語言程式設計者
(2) 對 Android 系統移植有興趣者
問題的熱血人士
注意事項
(1) 本議程僅探索 Android 系統層面的元件,不探討 Android 應用程式開發
(2) 免費分享的初衷是引導更多熱心的朋友投入 ARM/Embedded 系統開發,礙於時間與資源的限制,無法確保每處技術細節皆正確,但相當歡迎討論交流
時間
2010 年 05 月 22 日 (星期六)
下午 02:00 ~ 05:00
時間規劃: 3 hr
講師簡介
Jim Huang (黃敬群),慣用網路暱稱為 "jserv",熱血工讀生。自 1999 年開始參與自由由軟體開發,於 2005 年起提供以自由軟體為基礎的技術資訊服務,涉及手機、GPS 導航、數位電視、電子廣告系統、機器人等嵌入式系統設計。
基於對電腦技術與自由軟體的熱愛,於 2009 年共同創立 0xlab,期許能以團隊的優勢提供完整戰力,為軟體界做出些許貢獻。
web: http://jserv.sayya.org/
blog: http://blog.linux.org.tw/jserv/
0xlab: http://0xlab.org/
地點
逢甲大學 校本部 資訊電機館 102 教室(資電館正門進來右轉靠右第2間教室)
[ 交通資訊 | 校內地圖 ]
建議由逢大路側(東門)前往活動地點
費用
free!
活動報名網址
http://www.study-area.org/samc/registry/add/44
2010年5月8日 星期六
[轉貼]Tricorder - 手機感測器監視軟體
- 類型:工具
- 費用:免費
- 測試版本:5.6
- 測試機型:HTC G1 CyanogenMod-4.2.15.1
market://search?q=pname:org.hermit.tricorder
像Android這樣新一代的智慧型手機比較不一樣的地方是:內建多種感測器,所以才能達成更多類型的應用。Tricorder就是用來監控這些感測器,將各種數據圖形化。上圖是重力偵測,顯示水平儀及加速器的改變。
這是「磁通量」的感應,只要接近導磁的金屬,就會產生數值變化。
聲波分析:隨著麥克風接受的聲音大小作波形、頻率以及強度變化。
地理資訊:通過GPS顯示所在位置的經緯度、高度及方向、速度,以及電子羅盤的方位。
電磁波譜:主要監控GSM/3G的基地台(無線電波)以及Wi-Fi(低強度微波)的訊號強度。
太陽活動:從伺服器上下載太陽黑子、原子與電子等的活動數據。
設定畫面:可以設定各種感測器的細部功能。
幫助畫面中對每個項目都有詳細的說明。
其實這個程式對一般人來說,可能只是有趣地瞭解一下手機的感測器;不過也許對於開發者來說,尤其需要用到相關感測器功能的時候,Tricorder就能提供相當好的資訊了。
2010年5月7日 星期五
利用Blender來設計Android OpenGL物件模型
2. 在eclipse中選擇Import選項,把下載到的檔案滙入,如右圖。
3. 執行結果
4. 查看原始程式,注意看vertices和indices兩個陣列值。
5. 利用Blender將繪製的立方體模型輸出成Wavefront(*.obj)檔案
6. 利用記事本將滙出的檔案打開
7. 修改上述的兩個陣列檔
public void onDrawFrame(GL10 gl) {
// Clears the screen and depth buffer.
gl.glClear(GL10.GL_COLOR_BUFFER_BIT GL10.GL_DEPTH_BUFFER_BIT);
// Replace the current matrix with the identity matrix
gl.glLoadIdentity();
// Translates 4 units into the screen.
gl.glTranslatef(0, 0, -4);
gl.glRotatef(30, 1, 0, 0);
gl.glRotatef(30, 0, 1, 0);
gl.glScalef(0.5f, 0.5f, 0.5f);
// Draw our square.
square.draw(gl);
}
8. 修改程式並執行
婚姻帳單
14年前那個風雨交加的夜晚,我眾叛親離,跟著深愛的你到深圳做了打工妹。
貧窮的你落榜後除了生病的母親、衰弱的父親和那半間破瓦屋,就剩下我了。
記得當初來深圳打工的路費用的也是我做一個月民辦老師的工資。我所受的苦
都是為了今生能與你長相守。
或許,我的眼光不錯,你是很棒的。
10年後的今天,當我家所有的人鬆了一口氣,原諒我沒嫁錯郎的時候,有了
車、有了別墅的你卻在直言不諱地對我說,你找到了"心靈知音",如果我願意
解除婚姻的話,財產、孩子都給我;否則你背叛我,我不能有怨言。
我笑了,說3天後給你答覆。
3天後,我開列了一張婚姻的清單給你過目:
1、婚姻10年,你穿舊了 3套睡衣,穿壞了4雙拖鞋,踏破了21雙皮鞋。破的皮
鞋最多,因為你在外面掙錢所花的時間多,所以會有"心靈知音"看上成功的你。
2、婚姻 10年,我穿舊了10套睡衣、著爛了11 雙拖鞋、踏壞了16雙皮鞋。我破
的拖鞋和皮鞋都多,是因為我照顧家和孩子的時間比你多,出外面和你並肩戰
鬥的時間也不少,因此操勞的我成了沒有新鮮感的" 黃臉婆"。
3、婚姻10年,常青樹的你升值X倍,離婚後,從深圳排到杭州那麼多的美女等
著"成功人士、成熟有品位" 的你挑選。
4、婚姻10年,青春快逝的我貶值了10000倍;實話實說,離婚了我再婚的機會
是1%,年老的我看不上和我年齡相近的男人,而除非太差,一般的男人是不願
意娶一個帶著孩子的中年女人的。
5 、婚姻10年,繁忙的你只燒過 26次飯給我吃。
6 、婚姻10年,忙碌的我一年 365天,日日三餐,做好飯給你吃。
7 、婚姻10年,生一個孩子,我用了10 個月,養、育、教了10年。
8 、婚姻10年,生一個孩子,你用了 10 分鐘,給了他一個姓。
9 、婚姻 10 年,我和你父母和睦相處,沒有一句高聲的話語。
10、婚姻10年,你一直不肯原諒愛女心切的我的父母,沒有叫過一聲爸爸媽
媽。貧窮時你說我爸爸媽媽不會應答你,你堅決不肯叫;有錢後說不再怕他們
了而不叫。難道你願意自己的女兒在能夠選擇的時候去選擇貧窮嗎?希望女兒
富足,這是人之常情呀!
親愛的,如果你看了上面的婚姻總結,能夠用眼睛看著我說離婚的話,我成全
你的心願。你什麼時間跟我提,我都可以,我答應和你離婚。
只是,我等了你一年,你都沒有再提離婚這件事。
變得早回家、勤炒菜、會拖地,你不是將功贖罪吧?
或許,因為,有良心的人居多,所以這世界上還是房子比監獄多。