2010年8月31日 星期二

UART WIFI 模塊產品

http://item.taobao.com/auction/item_detail-0db2-1618d47a746b3ed3919965b7ea341abe.htm

http://item.taobao.com/item.htm?id=3562579080

2010年8月30日 星期一

Open Toolchain 編程


Open Toolchain 3.0 雖然安裝好,但在編程時卻發現很多東西都沒有,亦有很多東西不同了。例如:UILabel 則變了 UITextLabel、CGColor 就變成了 float[] = {1, 1, 1, 1}...等;而且網上很難找到 Sample code。以下是今次的 Source:
 float textColor[] = {1, 0, 1, 1};
CGRect rect = CGRectMake(10, 100, 300, 50);
UITextLabel *textLabel = [[UITextLabel alloc] initWithFrame:rect];
[textLabel setColor:CGColorCreate(CGColorSpaceCreateDeviceRGB(), textColor)];
[textLabel setText:@"Sample using Open Toolchain!"];
[mainView addSubview:textLabel];
[textLabel release];

2010年8月29日 星期日

成功安裝 Open Toolchain 3.0


突然心血來潮,很想重試安裝 Open Toolchain for 3.0。在 Google 找到了網址 http://www.alexwhittemore.com/?p=281。之前也跟過來安裝但不成功,今次也再試結果也不成功。不過我發現到了問題是出於 Mac SDK。我到 Apple 嘗試下載 Mac SDK 10.4,卻引導我到了 XCode 3 的下載頁。這時一道閃光劃過。令我記起在安裝 XCode 時,Mac SDK 10.4 的預設值是關掉。要是重新安裝時把它打勾,便可能成功。結果如我所料,能順利安裝好了。但天色已晚,過了我上床時間快兩小時,所以還沒有嘗試編程及在真來上測試。留待日後繼續!

2010年8月28日 星期六

Amigo Hexapod 實作


為了能繼續機體的開發計劃,這個星期我每天都抽一點時間製作部件。一個星期的成果就是製成了六件部件。我把之前從女兒奶粉罐剪下來的底部,放上六件部件;可是似乎空間不夠,部件之間很容易發生碰撞。需要改一改設計了!否則連鋰電都放不下!

2010年8月27日 星期五

部件實作(二)


我家一直有儲鋁罐的習慣,待儲到一定數量後,便會拿去「黃鋁罐」處理。在查看過家中回收袋之後,發現有三罐用完的奶粉罐,於是乎我把它們剪下來作為機械人主體的鋁片之用。

2010年8月26日 星期四

iPhone 4 Case 付運

今日收到 Apple 的電郵通知,其中一個從 Case Program 訂購的 iPhone 4 套已經付運,不過到達時間為 9 月 6 日。

2010年8月24日 星期二

2010年8月23日 星期一

部件實作


昨天把第三設計的部件製作出來。首先是把紙樣貼到鋁條上,利用鋁剪把鋁條剪下。在上面鑽孔,分四個步驟把細孔鑽成大孔。利用「老虎鉗」把部件折曲 90 度,再把 Servo 安裝上。整個過程大約十五分鐘。製作出來的效果不錯,但稍為不夠穩固。

2010年8月22日 星期日

Amigo Hexapod Leg Design 03


這是再進一步簡化的設計,採用單臂方式來支撐機體。看來很不穩固,但網上有不少這類設計。

2010年8月21日 星期六

重拾工具


今日到四姨仔家探望她的初生寶貝時,順道看見馬路對面有一家五金舖,在心血來潮下走過去詢問有沒有「線鋸」出售。老闆拿出一把跟其他五金俑一樣的線鋸,粗粗的鋸片、固定的支架。這並不是我想要的那種,而且家裡也有一把。正想離開之時,隨口問了老闆一下,看看有沒有其他款式;他回答說:「還有一款,是套裝來的」後便隨手拿下來給我看。竟然跟我斷掉的是同一款式!是我找了很久也找不著的那款。看過價錢 HK$58 認為可以的價錢,便付款離開。

2010年8月20日 星期五

Amigo Hexapod Leg Design 02


今天嘗試了另一個較為簡潔接合方式,能利用長方形木條把兩個 Servo 連接起來。

2010年8月19日 星期四

Push Notifications


一直都很想試 Push Notifications,今天有點時間,先試試 Local 的做法,原來十分簡單。在 didFinishLaunchingWithOptions 加入以下代碼就能實現在十秒後發出推送通知:
 //  Local push notification test
UILocalNotification *localNotification = [launchOptions objectForKey:UIApplicationLaunchOptionsLocalNotificationKey];
if (localNotification != nil) {

NSString *itemName = [localNotification.userInfo objectForKey:@"KEY_PUSH_NOTIFICATION"];
application.applicationIconBadgeNumber = localNotification.applicationIconBadgeNumber-1;
NSLog(@"has localNotification %@", itemName);
} else {

[[UIApplication sharedApplication] cancelAllLocalNotifications];

localNotification = [[UILocalNotification alloc] init];
if (localNotification == nil) {return YES;}

NSDate *now = [NSDate date];
NSDate *scheduled = [now dateByAddingTimeInterval:10];
NSDictionary *infoDict = [NSDictionary dictionaryWithObjectsAndKeys:@"Local Push", @"KEY_PUSH_NOTIFICATION", @"Local Push received while running", @"KEY_MESSAGE", nil];

localNotification.fireDate = scheduled;
localNotification.timeZone = [NSTimeZone defaultTimeZone];
localNotification.alertBody = @"今天是鄭秀文的生日!";
localNotification.alertAction = @"View Details";
localNotification.soundName = UILocalNotificationDefaultSoundName;
localNotification.applicationIconBadgeNumber = 0;
localNotification.userInfo = infoDict;
[[UIApplication sharedApplication] scheduleLocalNotification:localNotification];
[localNotification release];
}

2010年8月18日 星期三

Futaba S3003 x22


最近買了很多物品,有 iPad 64GB WiFi, iPhone 4 x2, Apple iPad Case, Apple Magic TrackPad, 1TB Harddisk, Harddisk Dock...,加起上來的消費數字也有一定程度,而且很快就要還款。因此,在開發 Amigo Hexapod 時便需要節儉為上。我把以前的 Amigo 解拆下來後,得到 22 個 Futaba S3003 及 10 個 TowerPro MG995,足夠開發 Amigo Hexapod 有餘了。

2010年8月17日 星期二

Amigo Hexapod Leg Design


這是足部的軸心接合方法。至於 Servo 之間的接合方法,則要研究一下如何能簡單易製作為上。

2010年8月16日 星期一

Amigo Hexapod Design 01


最近網友 Keith 發起六足機體求生遊戲,他以快速的行動實現了機體的設計,並購買了相關的部件,相信很快便能見到真機的面世。

雖然距離年底的比賽還有三個月的時間,不過我也想分配一點時間進行製作。今次在技術上比起二足容易許多(容易但不是簡單),之前也處理過 BlueTooth 方面的控制,要理用電腦來操控機體,已經不是難度。問題是鏡頭方面選購及運用,將會花上不少時間。網友 Keith 選擇了 MiNi Wireless Surveillance Camera,售價為 HK$260,AV 輸出。而我在網上找到另一款式的 2.4G Wireless Camera 則要 HK$480 左右,USB 接收。現在正考慮購買後者。原因是我打算接收鏡頭畫面作為分析之用,要是 AV 輸出的話,我的手提電腦便需要外接電視盒;要是 USB 接收的話,便能直接使用。

2010年8月13日 星期五

Passing argument to selector

最近研究 Sally's Spa 時,發現它的 XML 中很常用到 這種格式。我想它的設計是凡出現 param 時,系統便會自動把由 type 所指定的 variable 設定為 value 內的數值。亦即是說,變量名稱及其數值都是一個字串,在 runtime 需要時把字串轉化為變量,以及把字串轉化為數值。後者十分簡單,只要 [NSString intValue] 便可以,問題是前者怎樣做?而且要把它程序化,確實有點難度。

在網上似乎也找不到關於「NSString to variable」及「Passing argument to selector」之類的資料;唯有自行研究。原來要實現這個設計不是太難,先看看以下代碼:
- (void)setVariable:(NSString *)variable value:(NSString *)value  {
// Prepare variables
NSString *firstCapChar = [[variable substringToIndex:1] capitalizedString];
NSString *variableBody = [variable substringFromIndex:1];
NSString *functionName = [NSString stringWithFormat:@"set%@%@:", firstCapChar, variableBody];

// Perform selector if exists
SEL mySelector = NSSelectorFromString(functionName);
if ([self respondsToSelector:mySelector]) {
[self performSelector:mySelector withObject:value];
}
}
假設 counter 是一個 Integer 類的 Class variable。要使用以上代碼,只需要解立一個功能:
- (void)setCounter:(NSString *)value  {
counter = [value intValue];
}
然後使用 [self setVariable:@"counter" value:@"117"]; 便能把 counter 設定為 117 了。為何是 117?是我的生日囉!夠方便吧!

2010年8月7日 星期六

Apple Magic Trackpad


最近很愛到豐澤,看看有沒有新的 Apple 產品上架。今天順路走過,便順路走進店內看看。發現有兩台 Apple Magic Trackpad,我猶豫了一會,拿出我的 HSBC Advance VISA,簽了一個名,便把它拿走了...。

2010年8月6日 星期五

self. 的技巧

我除了研習八字之外,也會參考風水方面的提示,雖然在風水上還沒有出現一件推算準確的事。亦由於有這方面的需要,一直都想製作一個 iPhone 版「羅庚」;由於 iPhone 沒有羅盤,所以一直到我擁有 iPad 及 iPhone 4 後才能實現。在 Apple 拿了一個例子參考。要取得羅盤數據十分簡單,但要做到我心目中的「羅庚」則需要下一點功夫。

在看 Apple 的例子時,學到一個技巧:
@property (nonatomic, retain) CLLocationManager *locationManager;

// setup the location manager
self.locationManager = [[[CLLocationManager alloc] init] autorelease];
為甚麼一個 Class Variable 需要定義 Property?這個是因為方便將所有用 locationManager 的地方,能一下子由 Retain 轉為 Assign,相反亦然。這個我一直也有用。但看到 autorelease 的語法,頓時認為這個方法很好。我一直都是建立本地變量,alloc 及設定後才指派到類的變量。今次這個方法實在簡潔好用!