2010年9月29日 星期三

手機遙控電視

最近電視的遙控器壞了,
想到可不可以用手機遙控電視?
手機已經有語音撥號功能,
那用手機作語音遙控電視可不可行呢?

電視內建紅外線接收器了,
手機大部份也有紅外線傳輸功能,
二者可以結合嗎?

坐在沙發上,喊著 "台視" 自動轉到台視去
喊著 "大聲點" 自動變大聲
喊"關機" 自動關機!

很棒的智慧生活,對不對?
希望大家給點意見

2010年9月27日 星期一

單顆LED控制

1.左右來回移動

2.由兩側向中央對齊再往兩側移動

3.依序點亮

第一個Keil C程式

1. 選擇Project專案上的New選項,建立led專案,按下儲存鈕。

2. 選擇Atmel公司的AT89C51晶片,按下確定鈕。

3.選擇建立新檔案,另存led.c。

4.輸入基本程式骨架。

5.在Source Group1上按下右鍵,選擇Add Files to Group 'Source Group1'選項。

6.選擇led.c,按下Add鍵,再按下Close鍵。

7.輸入程式

8.選擇Debug選單中Start/Stop Debug Session選項,進行除錯。

9.選擇Peripherals選單中,I/O-Ports選項再選Port1來觀察Port1的狀態。

10.按下全速執行鈕執行程式。

此時您會發現LED會從第1顆點亮到第8顆後就消失了,請社員想想看要如何修改程式。

利用IPC及AIDL來打造車身電子通訊網路應用程式的框架(PUSH MODEL)

在9月25日我們提到如何利用IPC及AIDL來打造車身電子通訊網路應用程式的框架,讓篇文章採用POLL MODEL方式來進行設計,由Activity定時地詢問Service改更新UI的內容,此一方式簡單,但Activity郤變得相當忙碌,能否當Service內容改變時再更新Activity的UI內容,此一方式我們稱為PUSH MODEL,其實作步驟如下:
1. 建立專案

2. 建立服務之介面檔案及撰寫程式


3. 建立回呼函式之介面檔案及撰寫程式


4. 建立服務類別及撰寫程式


5. 修改介面設定ID

6. 撰寫Activity程式

7. 在manifest檔案中添加服務元件

讀取經緯度的小範例

Using Google Maps in Android文章中提到如何在Android手機中設計Google Map的功能。
如果把GPS經緯度資訊放到該文章提到的coordinates變數中。

String coordinates[] = {"1.352566007", "103.78921587"};

那要如何讀取GPS的資訊?我們利用長高科技DMA6410XP及GPS設備,利用其UART的範例讀取GPS的訊號(如第三個圖所示)。




我們利用Hello來解析GPS的格式,其程式如下:

package com.example;

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;

public class Hello extends Activity {
String str = "$GPGGA,000339.026,8960.0000,N,00000.0000,E,0,0,,137.0,M,13.0,M,,*4E";
TextView tv;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
tv=(TextView) findViewById(R.id.text01);
tv.setText("經度: "+getLatitude(str)+"緯度: "+getLongitude(str));
}

private String getLatitude(String str2) {
// TODO Auto-generated method stub
boolean f=false;
int status = 0;
int ptr = 0;
String str1="$GPGGA,";
String result="";
if(str2.length()<50) return result;
for(int i=0; i<str2.length( );i++)
{
if(f){
switch(status){
case 0:
case 1:
case 2:
if(str2.charAt(i)==',') status++;
break;
case 3:
if(str2.charAt(i)==',') status++;
else
result+=str2.charAt(i);
break;
case 4:
return result;

}
}
else
{
if (ptr==7)
f=true;
else {if(str1.charAt(ptr)==str2.charAt(i)) ptr++;
else ptr=0;
}
}
}
return null;
}
private String getLongitude(String str2) {
// TODO Auto-generated method stub
boolean f=false;
int status = 0;
int ptr = 0;
String str1="$GPGGA,";
String result="";
if(str2.length()<50) return result;
for(int i=0; i<str2.length();i++)
{
if(f){
switch(status){
case 0:
if(str2.charAt(i)==',') status++;
break;
case 1:
if(str2.charAt(i)==',') status++;
else
result+=str2.charAt(i);
break;
case 2:
return result;

}
}
else
{
if (ptr==7)
f=true;
else {if(str1.charAt(ptr)==str2.charAt(i)) ptr++;
else ptr=0;
}
}
}
return null;
}

}


2010年9月25日 星期六

利用IPC及AIDL來打造車身電子通訊網路應用程式的框架(POLL MODEL)

1. 建立專案

2. 建立AIDL檔案


3. 輸入電子通訊網路的抽象介面模型(aidl)

4. 在Activity程式中利用Intent來連繫服務程式

5. 建立電子通訊網路服務類別程式(紅色部份程式為新增)

6. 建立Activity onCreate()函式

7. 在Activity程式中建立連線服務物件及相關程式

8. 利用Handler來處理定時事件(POLL MODEL)定時呼叫服務

8. 執行結果

物件導向設計的文章分享

Lesson: Object-Oriented Programming Concepts
該網站有介紹物件、類別、介面等重要的觀念,值得社員閱讀。

2010年9月23日 星期四

TI TMS32F2800x eCAN description

在這裡跟大家分享一下, TI 28系列的CAN架構與初始化方式在下圖中有它的架構圖, 它還是必須要透過CAN transceiver 來介接CAN bus 與MCU, 在這裡會簡單的描述我們如何來簡單了設定暫存器.


而它設定暫存器的方式如下列程式碼所示
ECanShadow.CANTIOC.all = ECanRegs.CANTIOC.all;
ECanShadow.CANTIOC.bit.TXFUNC = 1;
ECanShadow.CANTIOC.all = ECanShadow.CANTIOC.all;
當我們設定完暫存器後, 要確認我們所設定的暫存器是否正確, 我們以do... while迴圈來實現, 如下面程式碼所示
do
{
ECanShadow.CANTA.all = ECanRegs.CANTA.all;
} while( ECanShadow.CANTA.bit.TA11 == 0);

2010年9月19日 星期日

運用計時器來更新UI的另一種方法

上篇提到運用計時器來更新UI的方法,延續前一篇文章的所有步驟除了最後一個外,最後的程式碼如圖。

利用計時器來更新UI的小範例

在Android官方網站上有一篇文章介紹如何利用計時器功能來定時更新UI,其步驟如下:


  1. 建立新專案如右圖。




  2. 把TextView冠上ID。



  3. 增加TextView程式。




  4. 添加計時器的功能。