スイッチをトリガにiOSアプリで処理を行う
konashiはフィジカルコンピューティング用途のデバイスなので,
konashiスイッチ押下をiOSアプリ側で検知する
まず,
[Konashi addObserver:self
selector:@selector(pioInputUpdated)
name:KONASHI_EVENT_UPDATE_PIO_INPUT];
KONASHI_
スイッチの状態が変わると,
KONASHI_
- (void)pioInputUpdated {
if ([Konashi digitalRead:S1] == HIGH) {
NSString *title = @"スイッチが押されました";
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:title
message:nil
delegate:nil
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
[alert show];
}
}
上記では,
konashiのスイッチ+LEDでアプリのメニュー選択操作を行う
konashiにはPIOに4つのLEDが搭載されているので,
konashiのスイッチを押すたびに4つのLEDが順番に切り替わり,
まず,
@interface ViewController ()
{
int currentLED;
NSTimeInterval startTime;
}
@end
LEDを点灯させるメソッドを次のように実装します。
- (void)flashLED:(int)led {
[Konashi pinMode:led
mode:OUTPUT];
[Konashi digitalWrite:led
value:HIGH];
}
上記メソッドでは,
すべてのLEDを消灯させるメソッドを次のように実装します。
- (void)turnOffAll {
for (int i=LED2; i<=LED5; i++) {
[Konashi pinMode:i
mode:OUTPUT];
[Konashi digitalWrite:i
value:LOW];
}
}
viewDidLoadでイベント監視の開始を次のように行い,
[Konashi addObserver:self
selector:@selector(ready)
name:KONASHI_EVENT_READY];
[Konashi addObserver:self
selector:@selector(pioInputUpdated)
name:KONASHI_EVENT_UPDATE_PIO_INPUT];
各イベントハンドラを次のように実装します。
- (void)ready {
// 接続完了したらまずLED2をオン
currentLED = LED2;
[self flashLED:currentLED];
}
- (void)pioInputUpdated {
[Konashi pinMode:S1
mode:INPUT];
// スイッチが押された
if ([Konashi digitalRead:S1] == HIGH) {
startTime = [[NSDate date] timeIntervalSince1970];
}
// スイッチが離された
else {
NSTimeInterval current = [[NSDate date] timeIntervalSince1970];
NSTimeInterval interval = current - startTime;
// 長押し
if (interval > 1.0) {
NSString *title = [NSString stringWithFormat:@"メニュー %d が選択されました", currentLED];
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:title
message:nil
delegate:nil
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
[alert show];
}
// クリック
else {
// 全てのLEDをオフ
[self turnOffAll];
// 次のLEDへ
currentLED++;
// LED5の次はLED2
if (currentLED > LED5) {
currentLED = LED2;
}
// 次のLEDをオン
[self flashLED:currentLED];
}
}
}
上記の,
- 短く押された場合はメニューの切り替え
(点灯するLEDを切り替える) - 長押しされた場合はメニューの決定
(選択されたメニューをアラート表示する)
という処理を行っています。
以上の実装で,