Изначально разработка планировалась на Arduino, но знающий человек отговорил от этой затеи ввиду больших финансовых затрат (нужна была партия около 1000 штук). И мы нашли оптимальное решение- собрать устройство самим. Так как я не силен в электронике, то просто опишу какие компоненты использовались:
- датчик положения MMA7260QT
- контроллер ATmega16U4-AU
- bluetooth BlueGiga
В итоге получился вот такой прототип:

Вид снизу:

Устройство отлично передавало свое положение, но встал самый главный вопрос: как эти данные передать на iPad?
Решение пришло весьма неожиданно- есть такой профиль в SSP — «just works», когда обмен кодами происходит,
но без индикации и участия пользователя. И мы решили использовать его, эмулируя обычную bluetooth- клавиатуру. Прикрутили этот профиль к прототипу, и вот что получилось (извиняюсь за качество видео, но суть думаю будет понятна):
Устройство передает 10 раз в секунду определенную букву в зависимости от местоположения, и при каждой смене положения передает цифру от 0 до 9 которая соответствует заряду аккумулятора.
Ну а на iPad уже перехватить данные с клавиатуры не составило труда. Я создал скрытый UITextField, и просто в нем перехватывал «нажатые» клавиши. Вот краткий код, как это все работает:
@interface ViewController : UIViewController <UITextFieldDelegate> { IBOutlet UITextField *textField; } @property (nonatomic, strong) IBOutlet UILabel *currTestLabel; @property (nonatomic, strong) IBOutlet UILabel *packPositionLabel; @property (nonatomic, strong) IBOutlet UILabel *batteryPercentageLabel; @end
@implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; [textField becomeFirstResponder]; } - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { if ([string isEqualToString:@"Z"] || [string isEqualToString:@"z"] || [string isEqualToString:@"Я"] || [string isEqualToString:@"я"]) { _packPositionLabel.text = @"Плашмя"; } if ([string isEqualToString:@"9"]) { _batteryPercentageLabel.text = @"100%"; } return NO; } @end
Надеюсь данная статья кому то облегчит жизнь. Если кому нибудь нужна будет схема, прошивка устройства или подробности как это в итоге работает- с удовольствием поделюсь!

