/Arduino Badge Driver/FirstViewController.m

https://bitbucket.org/kjrose/arduino-badge-driver-iphone · Objective C · 399 lines · 348 code · 41 blank · 10 comment · 84 complexity · 64a3dd458bfd8522e3dd1ca1ccfc25c6 MD5 · raw file

  1. //
  2. // FirstViewController.m
  3. // Arduino Badge Driver
  4. //
  5. // Created by Kelly John Rose on 2012-09-28.
  6. // Copyright (c) 2012 Kelly John Rose. All rights reserved.
  7. //
  8. #import "FirstViewController.h"
  9. @interface FirstViewController ()
  10. @end
  11. @implementation FirstViewController
  12. @synthesize lightOnAudio = _lightOnAudio;
  13. @synthesize lightOffAudio = _lightOffAudio;
  14. @synthesize backToStartAudio = _backToStartAudio;
  15. @synthesize audioStack = _audioStack;
  16. @synthesize textModeBox = _textModeBox;
  17. - (void)viewDidLoad
  18. {
  19. [super viewDidLoad];
  20. // Do any additional setup after loading the view, typically from a nib.
  21. if(!self.lightOnAudio) {
  22. NSURL* musicFile = [NSURL fileURLWithPath:[[NSBundle mainBundle]
  23. pathForResource:@"lightOn"
  24. ofType:@"wav"]];
  25. _lightOnAudio = [[AVAudioPlayer alloc] initWithContentsOfURL:musicFile error:nil];
  26. _lightOnAudio.delegate = self;
  27. }
  28. if(!self.lightOffAudio) {
  29. NSURL* musicFile = [NSURL fileURLWithPath:[[NSBundle mainBundle]
  30. pathForResource:@"lightOff"
  31. ofType:@"wav"]];
  32. _lightOffAudio = [[AVAudioPlayer alloc] initWithContentsOfURL:musicFile error:nil];
  33. _lightOffAudio.delegate = self;
  34. }
  35. if(!self.backToStartAudio) {
  36. NSURL* musicFile = [NSURL fileURLWithPath:[[NSBundle mainBundle]
  37. pathForResource:@"leftPulse"
  38. ofType:@"wav"]];
  39. _backToStartAudio = [[AVAudioPlayer alloc] initWithContentsOfURL:musicFile error:nil];
  40. _backToStartAudio.delegate = self;
  41. }
  42. _audioStack = [[NSMutableArray alloc] initWithCapacity:20];
  43. _textModeBox.delegate = self;
  44. }
  45. - (void)didReceiveMemoryWarning
  46. {
  47. [super didReceiveMemoryWarning];
  48. // Dispose of any resources that can be recreated.
  49. }
  50. - (void) playLightOn {
  51. [self.lightOnAudio play];
  52. }
  53. - (void) playLightOff {
  54. [self.lightOffAudio play];
  55. }
  56. - (void) startSignal {
  57. [self.backToStartAudio play];
  58. }
  59. - (void) playStartCommand {
  60. for(int i=0;i<5;i++) {
  61. [self.audioStack addObject:self.backToStartAudio];
  62. }
  63. [self.backToStartAudio play];
  64. }
  65. - (IBAction)lightOnButton:(id)sender {
  66. [self playLightOn];
  67. }
  68. - (IBAction)lightOffButton:(id)sender {
  69. [self playLightOff];
  70. }
  71. - (void)goToStart {
  72. [self playStartCommand];
  73. [self.audioStack addObject:self.lightOnAudio];
  74. [self.audioStack addObject:self.lightOnAudio];
  75. [self.audioStack addObject:self.lightOnAudio];
  76. [self.audioStack addObject:self.lightOnAudio];
  77. }
  78. - (IBAction)backToStart:(id)sender {
  79. [self goToStart];
  80. }
  81. - (IBAction)fillScreen:(id)sender {
  82. [self goToStart];
  83. for(int i=0;i<120;i++){
  84. [self.audioStack addObject:self.lightOnAudio];
  85. }
  86. }
  87. - (IBAction)wipeScreen:(id)sender {
  88. [self goToStart];
  89. for(int i=0;i<120;i++){
  90. [self.audioStack addObject:self.lightOffAudio];
  91. }
  92. }
  93. - (IBAction)sayHi:(id)sender {
  94. [self goToStart];
  95. for(int i=0;i<8;i++) {
  96. [self.audioStack addObject:self.lightOnAudio];
  97. }
  98. [self.audioStack addObject:self.lightOffAudio];
  99. [self.audioStack addObject:self.lightOffAudio];
  100. [self.audioStack addObject:self.lightOffAudio];
  101. [self.audioStack addObject:self.lightOnAudio];
  102. [self.audioStack addObject:self.lightOffAudio];
  103. [self.audioStack addObject:self.lightOffAudio];
  104. [self.audioStack addObject:self.lightOffAudio];
  105. [self.audioStack addObject:self.lightOffAudio];
  106. [self.audioStack addObject:self.lightOffAudio];
  107. [self.audioStack addObject:self.lightOffAudio];
  108. [self.audioStack addObject:self.lightOffAudio];
  109. [self.audioStack addObject:self.lightOnAudio];
  110. [self.audioStack addObject:self.lightOffAudio];
  111. [self.audioStack addObject:self.lightOffAudio];
  112. [self.audioStack addObject:self.lightOffAudio];
  113. [self.audioStack addObject:self.lightOffAudio];
  114. for(int i=0;i<8;i++) {
  115. [self.audioStack addObject:self.lightOnAudio];
  116. }
  117. for(int i=0;i<8;i++){
  118. [self.audioStack addObject:self.lightOffAudio];
  119. }
  120. for(int i=0;i<8;i++) {
  121. [self.audioStack addObject:self.lightOnAudio];
  122. }
  123. for(int i=0;i<8;i++){
  124. [self.audioStack addObject:self.lightOffAudio];
  125. }
  126. [self.audioStack addObject:self.lightOffAudio];
  127. [self.audioStack addObject:self.lightOnAudio];
  128. [self.audioStack addObject:self.lightOnAudio];
  129. [self.audioStack addObject:self.lightOnAudio];
  130. [self.audioStack addObject:self.lightOnAudio];
  131. [self.audioStack addObject:self.lightOnAudio];
  132. [self.audioStack addObject:self.lightOnAudio];
  133. [self.audioStack addObject:self.lightOffAudio];
  134. [self.audioStack addObject:self.lightOnAudio];
  135. [self.audioStack addObject:self.lightOffAudio];
  136. [self.audioStack addObject:self.lightOffAudio];
  137. [self.audioStack addObject:self.lightOffAudio];
  138. [self.audioStack addObject:self.lightOffAudio];
  139. [self.audioStack addObject:self.lightOffAudio];
  140. [self.audioStack addObject:self.lightOffAudio];
  141. [self.audioStack addObject:self.lightOnAudio];
  142. [self.audioStack addObject:self.lightOnAudio];
  143. [self.audioStack addObject:self.lightOffAudio];
  144. [self.audioStack addObject:self.lightOnAudio];
  145. [self.audioStack addObject:self.lightOffAudio];
  146. [self.audioStack addObject:self.lightOnAudio];
  147. [self.audioStack addObject:self.lightOffAudio];
  148. [self.audioStack addObject:self.lightOffAudio];
  149. [self.audioStack addObject:self.lightOnAudio];
  150. [self.audioStack addObject:self.lightOnAudio];
  151. [self.audioStack addObject:self.lightOffAudio];
  152. [self.audioStack addObject:self.lightOffAudio];
  153. [self.audioStack addObject:self.lightOffAudio];
  154. [self.audioStack addObject:self.lightOffAudio];
  155. [self.audioStack addObject:self.lightOnAudio];
  156. [self.audioStack addObject:self.lightOffAudio];
  157. [self.audioStack addObject:self.lightOnAudio];
  158. [self.audioStack addObject:self.lightOnAudio];
  159. [self.audioStack addObject:self.lightOffAudio];
  160. [self.audioStack addObject:self.lightOffAudio];
  161. [self.audioStack addObject:self.lightOffAudio];
  162. [self.audioStack addObject:self.lightOffAudio];
  163. [self.audioStack addObject:self.lightOnAudio];
  164. [self.audioStack addObject:self.lightOffAudio];
  165. [self.audioStack addObject:self.lightOnAudio];
  166. [self.audioStack addObject:self.lightOnAudio];
  167. [self.audioStack addObject:self.lightOffAudio];
  168. [self.audioStack addObject:self.lightOnAudio];
  169. [self.audioStack addObject:self.lightOffAudio];
  170. [self.audioStack addObject:self.lightOnAudio];
  171. [self.audioStack addObject:self.lightOffAudio];
  172. [self.audioStack addObject:self.lightOffAudio];
  173. [self.audioStack addObject:self.lightOnAudio];
  174. [self.audioStack addObject:self.lightOnAudio];
  175. [self.audioStack addObject:self.lightOffAudio];
  176. [self.audioStack addObject:self.lightOffAudio];
  177. [self.audioStack addObject:self.lightOffAudio];
  178. [self.audioStack addObject:self.lightOffAudio];
  179. [self.audioStack addObject:self.lightOffAudio];
  180. [self.audioStack addObject:self.lightOffAudio];
  181. [self.audioStack addObject:self.lightOnAudio];
  182. [self.audioStack addObject:self.lightOffAudio];
  183. [self.audioStack addObject:self.lightOnAudio];
  184. [self.audioStack addObject:self.lightOnAudio];
  185. [self.audioStack addObject:self.lightOnAudio];
  186. [self.audioStack addObject:self.lightOnAudio];
  187. [self.audioStack addObject:self.lightOnAudio];
  188. [self.audioStack addObject:self.lightOnAudio];
  189. [self.audioStack addObject:self.lightOffAudio];
  190. }
  191. - (void)drawScreen:(NSMutableArray *)screen {
  192. [self goToStart];
  193. while([screen count] > 0) {
  194. NSArray* col = (NSArray *)[screen objectAtIndex:0];
  195. for(int i=0; i<8; i++) {
  196. NSNumber * point = [col objectAtIndex:i];
  197. if([point compare:[NSNumber numberWithInteger:0]])
  198. [self.audioStack addObject:self.lightOnAudio];
  199. else
  200. [self.audioStack addObject:self.lightOffAudio];
  201. }
  202. [screen removeObjectAtIndex:0];
  203. }
  204. }
  205. - (IBAction)suzanne:(id)sender {
  206. NSMutableArray* suzanne = [NSMutableArray arrayWithObjects:
  207. [NSArray arrayWithObjects:[NSNumber numberWithInteger:0],[NSNumber numberWithInteger:0],[NSNumber numberWithInteger:0],[NSNumber numberWithInteger:0],[NSNumber numberWithInteger:0],[NSNumber numberWithInteger:0],[NSNumber numberWithInteger:0],[NSNumber numberWithInteger:0],nil],
  208. [NSArray arrayWithObjects:[NSNumber numberWithInteger:0],[NSNumber numberWithInteger:0],[NSNumber numberWithInteger:0],[NSNumber numberWithInteger:0],[NSNumber numberWithInteger:0],[NSNumber numberWithInteger:0],[NSNumber numberWithInteger:0],[NSNumber numberWithInteger:0],nil],
  209. [NSArray arrayWithObjects:[NSNumber numberWithInteger:0],[NSNumber numberWithInteger:0],[NSNumber numberWithInteger:0],[NSNumber numberWithInteger:0],[NSNumber numberWithInteger:0],[NSNumber numberWithInteger:0],[NSNumber numberWithInteger:0],[NSNumber numberWithInteger:0],nil],
  210. [NSArray arrayWithObjects:[NSNumber numberWithInteger:0],[NSNumber numberWithInteger:0],[NSNumber numberWithInteger:0],[NSNumber numberWithInteger:0],[NSNumber numberWithInteger:1],[NSNumber numberWithInteger:0],[NSNumber numberWithInteger:0],[NSNumber numberWithInteger:0],nil],
  211. [NSArray arrayWithObjects:[NSNumber numberWithInteger:0],[NSNumber numberWithInteger:0],[NSNumber numberWithInteger:0],[NSNumber numberWithInteger:1],[NSNumber numberWithInteger:0],[NSNumber numberWithInteger:1],[NSNumber numberWithInteger:0],[NSNumber numberWithInteger:0],nil],
  212. [NSArray arrayWithObjects:[NSNumber numberWithInteger:0],[NSNumber numberWithInteger:0],[NSNumber numberWithInteger:1],[NSNumber numberWithInteger:0],[NSNumber numberWithInteger:0],[NSNumber numberWithInteger:0],[NSNumber numberWithInteger:1],[NSNumber numberWithInteger:0],nil],
  213. [NSArray arrayWithObjects:[NSNumber numberWithInteger:0],[NSNumber numberWithInteger:1],[NSNumber numberWithInteger:0],[NSNumber numberWithInteger:0],[NSNumber numberWithInteger:0],[NSNumber numberWithInteger:0],[NSNumber numberWithInteger:0],[NSNumber numberWithInteger:1],nil],
  214. [NSArray arrayWithObjects:[NSNumber numberWithInteger:0],[NSNumber numberWithInteger:0],[NSNumber numberWithInteger:0],[NSNumber numberWithInteger:0],[NSNumber numberWithInteger:0],[NSNumber numberWithInteger:0],[NSNumber numberWithInteger:0],[NSNumber numberWithInteger:0],nil],
  215. [NSArray arrayWithObjects:[NSNumber numberWithInteger:0],[NSNumber numberWithInteger:1],[NSNumber numberWithInteger:0],[NSNumber numberWithInteger:0],[NSNumber numberWithInteger:0],[NSNumber numberWithInteger:0],[NSNumber numberWithInteger:0],[NSNumber numberWithInteger:1],nil],
  216. [NSArray arrayWithObjects:[NSNumber numberWithInteger:0],[NSNumber numberWithInteger:1],[NSNumber numberWithInteger:0],[NSNumber numberWithInteger:0],[NSNumber numberWithInteger:1],[NSNumber numberWithInteger:0],[NSNumber numberWithInteger:0],[NSNumber numberWithInteger:1],nil],
  217. [NSArray arrayWithObjects:[NSNumber numberWithInteger:0],[NSNumber numberWithInteger:1],[NSNumber numberWithInteger:0],[NSNumber numberWithInteger:0],[NSNumber numberWithInteger:1],[NSNumber numberWithInteger:0],[NSNumber numberWithInteger:0],[NSNumber numberWithInteger:1],nil],
  218. [NSArray arrayWithObjects:[NSNumber numberWithInteger:0],[NSNumber numberWithInteger:0],[NSNumber numberWithInteger:1],[NSNumber numberWithInteger:1],[NSNumber numberWithInteger:0],[NSNumber numberWithInteger:1],[NSNumber numberWithInteger:1],[NSNumber numberWithInteger:0],nil],
  219. [NSArray arrayWithObjects:[NSNumber numberWithInteger:0],[NSNumber numberWithInteger:0],[NSNumber numberWithInteger:0],[NSNumber numberWithInteger:0],[NSNumber numberWithInteger:0],[NSNumber numberWithInteger:0],[NSNumber numberWithInteger:0],[NSNumber numberWithInteger:0],nil],
  220. [NSArray arrayWithObjects:[NSNumber numberWithInteger:0],[NSNumber numberWithInteger:0],[NSNumber numberWithInteger:0],[NSNumber numberWithInteger:0],[NSNumber numberWithInteger:0],[NSNumber numberWithInteger:0],[NSNumber numberWithInteger:0],[NSNumber numberWithInteger:0],nil],
  221. [NSArray arrayWithObjects:[NSNumber numberWithInteger:0],[NSNumber numberWithInteger:0],[NSNumber numberWithInteger:0],[NSNumber numberWithInteger:0],[NSNumber numberWithInteger:0],[NSNumber numberWithInteger:0],[NSNumber numberWithInteger:0],[NSNumber numberWithInteger:0],nil],nil];
  222. [self drawScreen:suzanne];
  223. }
  224. - (IBAction)resetToDefault:(id)sender {
  225. [self.audioStack removeAllObjects];
  226. [self playStartCommand];
  227. [self playStartCommand];
  228. }
  229. - (void)sendNumber:(int)number {
  230. int newNum = 0;
  231. for(int i=0;i<6;i++) {
  232. newNum = newNum << 1;
  233. newNum += number % 2;
  234. number /= 2;
  235. }
  236. for(int i=0;i<6;i++) {
  237. if(newNum % 2 == 1) {
  238. [self.audioStack addObject:self.lightOnAudio];
  239. } else {
  240. [self.audioStack addObject:self.lightOffAudio];
  241. }
  242. newNum = newNum / 2;
  243. }
  244. }
  245. - (IBAction)sendTextMessage:(id)sender {
  246. self.textModeProgress = 0;
  247. [self playStartCommand];
  248. [self.audioStack addObject:self.lightOnAudio];
  249. [self.audioStack addObject:self.lightOffAudio];
  250. [self.audioStack addObject:self.lightOffAudio];
  251. [self.audioStack addObject:self.lightOffAudio];
  252. NSString * textToDisplay = [NSString stringWithString:self.textModeBox.text.uppercaseString];
  253. for(int i=0; i < textToDisplay.length; i++) {
  254. if([[textToDisplay substringWithRange:NSMakeRange(i,1)] isEqualToString:@"A"]) {
  255. [self sendNumber:1];
  256. } else if([[textToDisplay substringWithRange:NSMakeRange(i,1)] isEqualToString:@"B"]) {
  257. [self sendNumber:2];
  258. } else if([[textToDisplay substringWithRange:NSMakeRange(i,1)] isEqualToString:@"C"]) {
  259. [self sendNumber:3];
  260. } else if([[textToDisplay substringWithRange:NSMakeRange(i,1)] isEqualToString:@"D"]) {
  261. [self sendNumber:4];
  262. } else if([[textToDisplay substringWithRange:NSMakeRange(i,1)] isEqualToString:@"E"]) {
  263. [self sendNumber:5];
  264. } else if([[textToDisplay substringWithRange:NSMakeRange(i,1)] isEqualToString:@"F"]) {
  265. [self sendNumber:6];
  266. } else if([[textToDisplay substringWithRange:NSMakeRange(i,1)] isEqualToString:@"G"]) {
  267. [self sendNumber:7];
  268. } else if([[textToDisplay substringWithRange:NSMakeRange(i,1)] isEqualToString:@"H"]) {
  269. [self sendNumber:8];
  270. } else if([[textToDisplay substringWithRange:NSMakeRange(i,1)] isEqualToString:@"I"]) {
  271. [self sendNumber:9];
  272. } else if([[textToDisplay substringWithRange:NSMakeRange(i,1)] isEqualToString:@"J"]) {
  273. [self sendNumber:10];
  274. } else if([[textToDisplay substringWithRange:NSMakeRange(i,1)] isEqualToString:@"K"]) {
  275. [self sendNumber:11];
  276. } else if([[textToDisplay substringWithRange:NSMakeRange(i,1)] isEqualToString:@"L"]) {
  277. [self sendNumber:12];
  278. } else if([[textToDisplay substringWithRange:NSMakeRange(i,1)] isEqualToString:@"M"]) {
  279. [self sendNumber:13];
  280. } else if([[textToDisplay substringWithRange:NSMakeRange(i,1)] isEqualToString:@"N"]) {
  281. [self sendNumber:14];
  282. } else if([[textToDisplay substringWithRange:NSMakeRange(i,1)] isEqualToString:@"O"]) {
  283. [self sendNumber:15];
  284. } else if([[textToDisplay substringWithRange:NSMakeRange(i,1)] isEqualToString:@"P"]) {
  285. [self sendNumber:16];
  286. } else if([[textToDisplay substringWithRange:NSMakeRange(i,1)] isEqualToString:@"Q"]) {
  287. [self sendNumber:17];
  288. } else if([[textToDisplay substringWithRange:NSMakeRange(i,1)] isEqualToString:@"R"]) {
  289. [self sendNumber:18];
  290. } else if([[textToDisplay substringWithRange:NSMakeRange(i,1)] isEqualToString:@"S"]) {
  291. [self sendNumber:19];
  292. } else if([[textToDisplay substringWithRange:NSMakeRange(i,1)] isEqualToString:@"T"]) {
  293. [self sendNumber:20];
  294. } else if([[textToDisplay substringWithRange:NSMakeRange(i,1)] isEqualToString:@"U"]) {
  295. [self sendNumber:21];
  296. } else if([[textToDisplay substringWithRange:NSMakeRange(i,1)] isEqualToString:@"V"]) {
  297. [self sendNumber:22];
  298. } else if([[textToDisplay substringWithRange:NSMakeRange(i,1)] isEqualToString:@"W"]) {
  299. [self sendNumber:23];
  300. } else if([[textToDisplay substringWithRange:NSMakeRange(i,1)] isEqualToString:@"X"]) {
  301. [self sendNumber:24];
  302. } else if([[textToDisplay substringWithRange:NSMakeRange(i,1)] isEqualToString:@"Y"]) {
  303. [self sendNumber:25];
  304. } else if([[textToDisplay substringWithRange:NSMakeRange(i,1)] isEqualToString:@"Z"]) {
  305. [self sendNumber:26];
  306. } else if([[textToDisplay substringWithRange:NSMakeRange(i,1)] isEqualToString:@"!"]) {
  307. [self sendNumber:27];
  308. } else if([[textToDisplay substringWithRange:NSMakeRange(i,1)] isEqualToString:@"?"]) {
  309. [self sendNumber:28];
  310. } else if([[textToDisplay substringWithRange:NSMakeRange(i,1)] isEqualToString:@"."]) {
  311. [self sendNumber:29];
  312. } else if([[textToDisplay substringWithRange:NSMakeRange(i,1)] isEqualToString:@","]) {
  313. [self sendNumber:30];
  314. } else if([[textToDisplay substringWithRange:NSMakeRange(i,1)] isEqualToString:@"#"]) {
  315. [self sendNumber:31];
  316. } else if([[textToDisplay substringWithRange:NSMakeRange(i,1)] isEqualToString:@"@"]) {
  317. [self sendNumber:32];
  318. } else {
  319. [self sendNumber:0];
  320. }
  321. }
  322. // Fin
  323. [self sendNumber:63];
  324. [self startSignal];
  325. }
  326. - (void) audioPlayerDidFinishPlaying:(AVAudioPlayer *)aPlayer successfully:(BOOL)flag
  327. {
  328. if([self.audioStack count] > 0) {
  329. AVAudioPlayer *nextAudio = [self.audioStack objectAtIndex:0];
  330. [nextAudio play];
  331. [self.audioStack removeObjectAtIndex:0];
  332. }
  333. }
  334. - (BOOL) textFieldShouldReturn:(UITextField *)textField
  335. {
  336. [textField resignFirstResponder];
  337. return true;
  338. }
  339. - (void)textFieldDidBeginEditing:(UITextField *)textField
  340. {
  341. [self animateTextField: textField up: YES];
  342. }
  343. - (void)textFieldDidEndEditing:(UITextField *)textField
  344. {
  345. [self animateTextField: textField up: NO];
  346. }
  347. - (void) animateTextField: (UITextField*) textField up: (BOOL) up
  348. {
  349. const int movementDistance = 80; // tweak as needed
  350. const float movementDuration = 0.3f; // tweak as needed
  351. int movement = (up ? -movementDistance : movementDistance);
  352. [UIView beginAnimations: @"anim" context: nil];
  353. [UIView setAnimationBeginsFromCurrentState: YES];
  354. [UIView setAnimationDuration: movementDuration];
  355. self.view.frame = CGRectOffset(self.view.frame, 0, movement);
  356. [UIView commitAnimations];
  357. }
  358. @end