norman2

alpine

Feb 3rd, 2014
129
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.43 KB | None | 0 0
  1. //please excuse the lack of comments
  2. // this works with a simgle button and has the correct timings
  3. // adding the send of signals to stereo.. simulating by sending to serial
  4. #define CHECK_MS 5
  5. #define DOUBLE_MS 400
  6. #define HOLD_MS 1200
  7.  
  8. #define NO_B 839 //nothing pressed
  9. #define MODE_B 662 // MODE
  10. #define NXTU_B 509 // NEXT UP
  11. #define NXTD_B 380 // NEXT DOWN
  12. #define MUTE_B 273 // MUTE
  13. #define VOLU_B 180 // VOLUME UP
  14. #define VOLD_B 105 // VOLUME DOWN
  15.  
  16. #define alpPin 7
  17.  
  18. boolean volUp[48] = {1,1,0,1,0,1,1,1, 1,1,0,1,1,0,1,1, 1,0,1,0,1,0,1,1, 1,1,0,1,1,0,1,1, 1,1,0,1,0,1,1,0, 1,1,0,1,0,1,0,1};
  19. boolean volDn[48] = {1,1,0,1,0,1,1,1, 1,1,0,1,1,0,1,1, 1,0,1,0,1,0,1,1, 0,1,1,0,1,1,0,1, 1,1,1,1,0,1,1,0, 1,1,0,1,0,1,0,1};
  20. boolean mute[48] = {1,1,0,1,0,1,1,1, 1,1,0,1,1,0,1,1, 1,0,1,0,1,0,1,1, 1,0,1,0,1,1,0,1, 1,1,1,0,1,1,1,0, 1,1,0,1,0,1,0,1};
  21. boolean pstUp[48] = {1,1,0,1,0,1,1,1, 1,1,0,1,1,0,1,1, 1,0,1,0,1,0,1,1, 1,0,1,0,1,0,1,1, 1,1,1,0,1,1,1,1, 0,1,0,1,0,1,0,1};
  22. boolean pstDn[48] = {1,1,0,1,0,1,1,1, 1,1,0,1,1,0,1,1, 1,0,1,0,1,0,1,1, 0,1,0,1,0,1,0,1, 1,1,1,1,1,1,1,1, 0,1,0,1,0,1,0,1};
  23. boolean source[48] = {1,1,0,1,0,1,1,1, 1,1,0,1,1,0,1,1, 1,0,1,0,1,0,1,1, 1,0,1,1,0,1,1,1, 1,1,0,1,1,0,1,1, 0,1,0,1,0,1,0,1};
  24. boolean trkUp[48] = {1,1,0,1,0,1,1,1, 1,1,0,1,1,0,1,1, 1,0,1,0,1,0,1,1, 1,0,1,1,1,0,1,1, 1,1,0,1,1,0,1,0, 1,1,0,1,0,1,0,1};
  25. boolean trkDn[48] = {1,1,0,1,0,1,1,1, 1,1,0,1,1,0,1,1, 1,0,1,0,1,0,1,1, 0,1,0,1,1,1,0,1, 1,1,1,1,1,0,1,0, 1,1,0,1,0,1,0,1};
  26. boolean power[48] = {1,1,0,1,0,1,1,1, 1,1,0,1,1,0,1,1, 1,0,1,0,1,0,1,1, 0,1,1,1,0,1,1,1, 1,1,1,0,1,0,1,1, 0,1,0,1,0,1,0,1};
  27. boolean entPlay[48] = {1,1,0,1,0,1,1,1, 1,1,0,1,1,0,1,1, 1,0,1,0,1,0,1,1, 0,1,0,1,0,1,1,1, 1,1,1,1,1,1,0,1, 0,1,0,1,0,1,0,1};
  28. boolean bandProg[48] = {1,1,0,1,0,1,1,1, 1,1,0,1,1,0,1,1, 1,0,1,0,1,0,1,1, 0,1,1,0,1,0,1,1, 1,1,1,1,0,1,1,1, 0,1,0,1,0,1,0,1};
  29.  
  30. boolean spFlag = 0;
  31. boolean dpFlag = 0;
  32. boolean hpFlag = 0;
  33.  
  34. int button = 0;
  35. int spbutton = 0;
  36. /*
  37. 0-none
  38. 1-mode
  39. 2-track +
  40. 3-track -
  41. 4-mute
  42. 5-vol+
  43. 6-vol-
  44. */
  45.  
  46. void setup() {
  47. Serial.begin(9600);
  48. pinMode(7, OUTPUT);
  49.  
  50. }
  51.  
  52. void loop() {
  53. static unsigned long oldTime = 0;
  54. int switchStatus = 0;
  55. if (millis() >= oldTime + CHECK_MS) {
  56. oldTime = millis();
  57. switchStatus = CheckSwitch();
  58.  
  59. if (switchStatus == 0) {
  60. //no button press
  61.  
  62. } else if (switchStatus == 1) {
  63. // single press
  64. switch (spbutton) {
  65. case 0: // no butto, why are wh here
  66. break;
  67. case 1: // mode
  68. modeSend();
  69. break;
  70. case 2: // next up
  71. trkUpSend();
  72. break;
  73. case 3: // next down
  74. trkDnSend();
  75. break;
  76. case 4: // mute
  77. muteSend();
  78. break;
  79. case 5: // vol up
  80. volUpSend();
  81. break;
  82. case 6: // vol down
  83. volDnSend();
  84. break;
  85. }
  86. } else if (switchStatus == 2) {
  87. //double press
  88. switch (spbutton) {
  89. case 0: // no butto, why are wh here
  90. break;
  91. case 1: // mode
  92. sourceSend();
  93. break;
  94. case 2: // next up
  95. trkUpSend();
  96. break;
  97. case 3: // next down
  98. trkDnSend();
  99. break;
  100. case 4: // mute
  101. muteSend();
  102. break;
  103. case 5: // vol up
  104. volUpSend();
  105. break;
  106. case 6: // vol down
  107. volDnSend();
  108. break;
  109. }
  110. } else if (switchStatus == 3) {
  111. //hold
  112. switch (spbutton) {
  113. case 0: // no butto, why are wh here
  114. break;
  115. case 1: // mode
  116. modeSend();
  117. break;
  118. case 2: // next up
  119. trkUpSend();
  120. break;
  121. case 3: // next down
  122. trkDnSend();
  123. break;
  124. case 4: // mute
  125. muteSend();
  126. break;
  127. case 5: // vol up
  128. volUpSend();
  129. break;
  130. case 6: // vol down
  131. volDnSend();
  132. break;
  133. }
  134. }
  135.  
  136. }
  137. }
  138.  
  139. // Service routine called by a timer interrupt
  140. int CheckSwitch() {
  141. static uint16_t State = 0; // Current debounce status
  142. static int curTime = 0;
  143.  
  144. State=(State<<1) | !RawKeyPressed() | 0xe000;
  145. if (!spFlag) {
  146. if (hpFlag) {
  147. if (State == 0xe000) {
  148. return 3;
  149. } else {
  150. hpFlag = 0;
  151. }
  152. }
  153. if (State==0xf000) {
  154. spFlag = 1;
  155. hpFlag = 1;
  156. dpFlag = 1;
  157. curTime = 0;
  158. spbutton = button;
  159. return 0;
  160. }
  161. }
  162. if (hpFlag && State != 0xe000) {
  163. hpFlag = 0;
  164. }
  165. if (spFlag && hpFlag && curTime > HOLD_MS/CHECK_MS) {
  166. spFlag = 0;
  167. dpFlag = 0;
  168. return 3;
  169. } else if (spFlag && dpFlag && State == 0xf000 && curTime < DOUBLE_MS) {
  170. spFlag = 0;
  171. hpFlag = 0;
  172. dpFlag = 0;
  173. return 2;
  174. } else if (spFlag && !hpFlag && curTime > DOUBLE_MS) {
  175. spFlag = 0;
  176. hpFlag = 0;
  177. dpFlag = 0;
  178. return 1;
  179. } else {
  180. curTime = curTime + CHECK_MS;
  181. return 0;
  182. }
  183. }
  184.  
  185. boolean RawKeyPressed() {
  186. int anaPin = 0;
  187. anaPin = analogRead(0);
  188. if (anaPin > NO_B - 20) {
  189. button = 0;
  190. return 0;
  191. } else if (anaPin > MODE_B - 20 && anaPin < MODE_B + 20 ) {
  192. button = 1;
  193. return 1;
  194. } else if (anaPin > NXTU_B - 20 && anaPin < NXTU_B + 20 ) {
  195. button = 2;
  196. return 1;
  197. } else if (anaPin > NXTD_B - 20 && anaPin < NXTD_B + 20 ) {
  198. button = 3;
  199. return 1;
  200. } else if (anaPin > MUTE_B - 20 && anaPin < MUTE_B + 20 ) {
  201. button = 4;
  202. return 1;
  203. } else if (anaPin > VOLU_B - 20 && anaPin < VOLU_B + 20 ) {
  204. button = 5;
  205. return 1;
  206. } else if (anaPin < VOLD_B + 20 ) {
  207. button = 6;
  208. return 1;
  209. } else {
  210. button = 0;
  211. return 0;
  212. }
  213. }
  214.  
  215. //-----------SOURCE------------------
  216. void sourceSend() {
  217. //first send 8ms high
  218. digitalWrite(alpPin, HIGH);
  219. delay(8);
  220. // send 4.5ms low
  221. digitalWrite(alpPin, LOW);
  222. delayMicroseconds(4500);
  223.  
  224. for (int i = 0; i <= 47; i++) {
  225. //send bit for 0.5ms
  226. if (source[i] == 1 ) {
  227. digitalWrite(alpPin, HIGH);
  228. } else {
  229. digitalWrite(alpPin, LOW);
  230. }
  231. delayMicroseconds(500);
  232. // wait 0.5ms
  233. digitalWrite(alpPin, LOW);
  234. delayMicroseconds(500);
  235. }
  236. // send 41ms low
  237. digitalWrite(alpPin, LOW);
  238. delay(41);
  239. }
  240.  
  241.  
  242. //---------MODE-----------------------------------------------
  243. void modeSend() {
  244. //first send 8ms high
  245. digitalWrite(alpPin, HIGH);
  246. delay(8);
  247. // send 4.5ms low
  248. digitalWrite(alpPin, LOW);
  249. delayMicroseconds(4500);
  250.  
  251. for (int i = 0; i <= 47; i++) {
  252. //send bit for 0.5ms
  253. if (entPlay[i] == 1 ) {
  254. digitalWrite(alpPin, HIGH);
  255. } else {
  256. digitalWrite(alpPin, LOW);
  257. }
  258. delayMicroseconds(500);
  259. // wait 0.5ms
  260. digitalWrite(alpPin, LOW);
  261. delayMicroseconds(500);
  262. }
  263. // send 41ms low
  264. digitalWrite(alpPin, LOW);
  265. delay(41);
  266. }
  267.  
  268.  
  269. //---------NEXT UP-----------------------------------------------
  270. void trkUpSend() {
  271. //first send 8ms high
  272. digitalWrite(alpPin, HIGH);
  273. delay(8);
  274. // send 4.5ms low
  275. digitalWrite(alpPin, LOW);
  276. delayMicroseconds(4500);
  277.  
  278. for (int i = 0; i <= 47; i++) {
  279. //send bit for 0.5ms
  280. if (trkUp[i] == 1 ) {
  281. digitalWrite(alpPin, HIGH);
  282. } else {
  283. digitalWrite(alpPin, LOW);
  284. }
  285. delayMicroseconds(500);
  286. // wait 0.5ms
  287. digitalWrite(alpPin, LOW);
  288. delayMicroseconds(500);
  289. }
  290. // send 41ms low
  291. digitalWrite(alpPin, LOW);
  292. delay(41);
  293. }
  294.  
  295. //---------NEXT DOWN----------------------------------------------
  296. void trkDnSend() {
  297. //first send 8ms high
  298. digitalWrite(alpPin, HIGH);
  299. delay(8);
  300. // send 4.5ms low
  301. digitalWrite(alpPin, LOW);
  302. delayMicroseconds(4500);
  303.  
  304. for (int i = 0; i <= 47; i++) {
  305. //send bit for 0.5ms
  306. if (trkDn[i] == 1 ) {
  307. digitalWrite(alpPin, HIGH);
  308. } else {
  309. digitalWrite(alpPin, LOW);
  310. }
  311. delayMicroseconds(500);
  312. // wait 0.5ms
  313. digitalWrite(alpPin, LOW);
  314. delayMicroseconds(500);
  315. }
  316. // send 41ms low
  317. digitalWrite(alpPin, LOW);
  318. delay(41);
  319. }
  320.  
  321.  
  322. //---------MUTE---------------------------------------------------
  323. void muteSend() {
  324. //first send 8ms high
  325. digitalWrite(alpPin, HIGH);
  326. delay(8);
  327. // send 4.5ms low
  328. digitalWrite(alpPin, LOW);
  329. delayMicroseconds(4500);
  330.  
  331. for (int i = 0; i <= 47; i++) {
  332. //send bit for 0.5ms
  333. if (mute[i] == 1 ) {
  334. digitalWrite(alpPin, HIGH);
  335. } else {
  336. digitalWrite(alpPin, LOW);
  337. }
  338. delayMicroseconds(500);
  339. // wait 0.5ms
  340. digitalWrite(alpPin, LOW);
  341. delayMicroseconds(500);
  342. }
  343. // send 41ms low
  344. digitalWrite(alpPin, LOW);
  345. delay(41);
  346. }
  347.  
  348. //---------VOL UP-----------------------------------------------
  349. void volUpSend() {
  350. //first send 8ms high
  351. digitalWrite(alpPin, HIGH);
  352. delay(8);
  353. // send 4.5ms low
  354. digitalWrite(alpPin, LOW);
  355. delayMicroseconds(4500);
  356.  
  357. for (int i = 0; i <= 47; i++) {
  358. //send bit for 0.5ms
  359. if (volUp[i] == 1 ) {
  360. digitalWrite(alpPin, HIGH);
  361. } else {
  362. digitalWrite(alpPin, LOW);
  363. }
  364. delayMicroseconds(500);
  365. // wait 0.5ms
  366. digitalWrite(alpPin, LOW);
  367. delayMicroseconds(500);
  368. }
  369. // send 41ms low
  370. digitalWrite(alpPin, LOW);
  371. delay(41);
  372. }
  373.  
  374.  
  375. //---------VOL DOWN-----------------------------------------------
  376. void volDnSend() {
  377. //first send 8ms high
  378. digitalWrite(alpPin, HIGH);
  379. delay(8);
  380. // send 4.5ms low
  381. digitalWrite(alpPin, LOW);
  382. delayMicroseconds(4500);
  383.  
  384. for (int i = 0; i <= 47; i++) {
  385. //send bit for 0.5ms
  386. if (volDn[i] == 1 ) {
  387. digitalWrite(alpPin, HIGH);
  388. } else {
  389. digitalWrite(alpPin, LOW);
  390. }
  391. delayMicroseconds(500);
  392. // wait 0.5ms
  393. digitalWrite(alpPin, LOW);
  394. delayMicroseconds(500);
  395. }
  396. // send 41ms low
  397. digitalWrite(alpPin, LOW);
  398. delay(41);
  399. }
Advertisement
Add Comment
Please, Sign In to add comment