Advertisement
Atdiy

Untitled

Mar 12th, 2012
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.26 KB | None | 0 0
  1. CON
  2. _clkmode = xtal1 + pll16x
  3. _xinfreq = 5_000_000
  4.  
  5. ' Set pins and Baud rate for XBee comms
  6. XB_Rx = 0 ' XBee DOUT
  7. XB_Tx = 1 ' XBee DIN
  8. XB_Baud = 9600 ' XBee Baud Rate
  9.  
  10. CR = 13
  11. VAR
  12. Long PRStack[32]
  13. Long QRSStack [32]
  14. Long Rhythm
  15. OBJ
  16. XB : "XBee_Object_2"
  17. WAV : "PlayWav_8bit.spin"
  18.  
  19. Pub Start | DataIn
  20. XB.start(XB_Rx, XB_Tx, 0, XB_Baud) ' Initialize comms for XBee
  21. cognew(PR, @PRStack)
  22. cognew(QRS, @QRSStack)
  23. repeat
  24. DataIn := XB.Rx ' Accept incoming byte
  25. If DataIn == "!" ' If start delimiter
  26. DataIn := XB.RxDecTime(500) ' Accept value for Rhythm
  27. if DataIn <> -1 ' If no timeout, hand data to Heart
  28. Rhythm := DataIn
  29. Pub PR | Index, x
  30. dira[8..11]~~
  31. repeat
  32. case Rhythm
  33. 1: 'SR
  34. outa[9] := 1
  35. waitcnt((80 * (clkfreq / 1000)) + cnt)
  36. outa[9] := 0
  37. waitcnt((100 * (clkfreq / 1000)) + cnt)
  38. outa[10] := 1
  39. waitcnt((67 * (clkfreq / 1000)) + cnt)
  40. WAV.PlayHeartbeat
  41. waitcnt((33 * (clkfreq / 1000)) + cnt)
  42. outa[10] := 0
  43. waitcnt((240 * (clkfreq / 1000)) + cnt) 'S to T
  44. WAV.PlayHeartbeat
  45. waitcnt((480 * (clkfreq / 1000)) + cnt) 'T to P
  46. 2: 'SB
  47. outa[9] := 1
  48. waitcnt((80 * (clkfreq / 1000)) + cnt)
  49. outa[9] := 0
  50. waitcnt((100 * (clkfreq / 1000)) + cnt)
  51. outa[10] := 1
  52. waitcnt((67 * (clkfreq / 1000)) + cnt)
  53. WAV.PlayHeartbeat
  54. waitcnt((33 * (clkfreq / 1000)) + cnt)
  55. outa[10] := 0
  56. waitcnt((306 * (clkfreq / 1000)) + cnt)
  57. WAV.PlayHeartbeat
  58. waitcnt((614 * (clkfreq / 1000)) + cnt)
  59. 3: 'ST
  60. outa[9] := 1
  61. waitcnt((80 * (clkfreq / 1000)) + cnt)
  62. outa[9] := 0
  63. waitcnt((100 * (clkfreq / 1000)) + cnt)
  64. outa[10] := 1
  65. waitcnt((67 * (clkfreq / 1000)) + cnt)
  66. WAV.PlayHeartbeat
  67. waitcnt((33 * (clkfreq / 1000)) + cnt)
  68. outa[10] := 0
  69. waitcnt((90 * (clkfreq / 1000)) + cnt)
  70. WAV.PlayHeartbeat
  71. waitcnt((180 * (clkfreq / 1000)) + cnt)
  72. 4: 'Afib
  73. Index := ?x
  74. Index := ||Index
  75. Index := Index // 100
  76. Index := Index + 1
  77. outa[9] := 1
  78. waitcnt(((Index + 50) * (clkfreq / 1000)) + cnt) 'Pwave
  79. outa[9] := 0
  80. waitcnt(((Index + 50) * (clkfreq / 1000)) + cnt) 'PR interval
  81. 5: 'Aflutter
  82. outa[9] := 1
  83. waitcnt((80 * (clkfreq / 1000)) + cnt) 'P wave
  84. outa[9] := 0
  85. waitcnt((100 * (clkfreq / 1000)) + cnt) 'PR Interval
  86. outa[9] := 1
  87. waitcnt((80 * (clkfreq / 1000)) + cnt) 'P wave
  88. outa[9] := 0
  89. waitcnt((100 * (clkfreq / 1000)) + cnt) 'PR Interval
  90. outa[9] := 1
  91. waitcnt((80 * (clkfreq / 1000)) + cnt) 'P wave
  92. outa[9] := 0
  93. waitcnt((100 * (clkfreq / 1000)) + cnt) 'PR Interval
  94. outa[10] := 1
  95. waitcnt((100 * (clkfreq / 1000)) + cnt) 'QRS
  96. outa[10] := 0
  97. waitcnt((15 * (clkfreq / 1000)) + cnt) 'RR Interval
  98. WAV.PlayHeartbeat
  99. waitcnt((65 * (clkfreq / 1000)) + cnt) 'RR Interval
  100. 6: 'SVT
  101. outa[9] := 1
  102. waitcnt((80 * (clkfreq / 1000)) + cnt)
  103. outa[9] := 0
  104. waitcnt((100 * (clkfreq / 1000)) + cnt)
  105. outa[10] := 1
  106. waitcnt((67 * (clkfreq / 1000)) + cnt)
  107. WAV.PlayHeartbeat
  108. waitcnt((33 * (clkfreq / 1000)) + cnt)
  109. outa[10] := 0
  110. waitcnt((10 * (clkfreq / 1000)) + cnt)
  111. WAV.PlayHeartbeat
  112. waitcnt((30 * (clkfreq / 1000)) + cnt)
  113. 7: 'Vfib
  114. Index := ?x
  115. Index := ||Index
  116. Index := Index // 100
  117. Index := Index + 1
  118. outa[9] := 1
  119. waitcnt(((Index + 50) * (clkfreq / 1000)) + cnt) 'Pwave
  120. outa[9] := 0
  121. waitcnt(((Index + 50) * (clkfreq / 1000)) + cnt) 'PR interval
  122. 8: 'Vtach
  123. outa[10] := 1
  124. waitcnt((250 * (clkfreq / 1000)) + cnt)
  125. outa[10] := 0
  126. waitcnt((100 * (clkfreq / 1000)) + cnt)
  127. 9: '1AVB
  128. outa[9] := 1
  129. waitcnt((80 * (clkfreq / 1000)) + cnt)
  130. outa[9] := 0
  131. waitcnt((150 * (clkfreq / 1000)) + cnt) 'PR segment
  132. outa[10] := 1
  133. waitcnt((67 * (clkfreq / 1000)) + cnt)
  134. WAV.PlayHeartbeat
  135. waitcnt((33 * (clkfreq / 1000)) + cnt)
  136. outa[10] := 0
  137. waitcnt((240 * (clkfreq / 1000)) + cnt)
  138. WAV.PlayHeartbeat
  139. waitcnt((480 * (clkfreq / 1000)) + cnt)
  140. 10: '2AVB Type 1
  141. outa[9] := 1
  142. waitcnt((80 * (clkfreq / 1000)) + cnt)
  143. outa[9] := 0
  144. waitcnt((100 * (clkfreq / 1000)) + cnt)
  145. outa[10] := 1
  146. waitcnt((67 * (clkfreq / 1000)) + cnt)
  147. WAV.PlayHeartbeat
  148. waitcnt((33 * (clkfreq / 1000)) + cnt)
  149. outa[10] := 0
  150. waitcnt((240 * (clkfreq / 1000)) + cnt)
  151. WAV.PlayHeartbeat
  152. waitcnt((480 * (clkfreq / 1000)) + cnt)
  153.  
  154. outa[9] := 1
  155. waitcnt((80 * (clkfreq / 1000)) + cnt)
  156. outa[9] := 0
  157. waitcnt((150 * (clkfreq / 1000)) + cnt) 'PR interval increases
  158. outa[10] := 1
  159. waitcnt((67 * (clkfreq / 1000)) + cnt)
  160. WAV.PlayHeartbeat
  161. waitcnt((33 * (clkfreq / 1000)) + cnt)
  162. outa[10] := 0
  163. waitcnt((240 * (clkfreq / 1000)) + cnt)
  164. WAV.PlayHeartbeat
  165. waitcnt((480 * (clkfreq / 1000)) + cnt) 'note between the beats shorten
  166.  
  167. outa[9] := 1
  168. waitcnt((80 * (clkfreq / 1000)) + cnt)
  169. outa[9] := 0
  170. waitcnt((200 * (clkfreq / 1000)) + cnt)
  171. outa[10] := 1
  172. waitcnt((67 * (clkfreq / 1000)) + cnt)
  173. WAV.PlayHeartbeat
  174. waitcnt((33 * (clkfreq / 1000)) + cnt)
  175. outa[10] := 0
  176. waitcnt((240 * (clkfreq / 1000)) + cnt)
  177. WAV.PlayHeartbeat
  178. waitcnt((480 * (clkfreq / 1000)) + cnt)
  179.  
  180. outa[9] := 1
  181. waitcnt((80 * (clkfreq / 1000)) + cnt)
  182. outa[9] := 0
  183. WAV.PlayHeartbeat
  184. waitcnt((920 * (clkfreq / 1000)) + cnt)
  185. 11:
  186. outa[9] := 1
  187. waitcnt((80 * (clkfreq / 1000)) + cnt)
  188. outa[9] := 0
  189. waitcnt((100 * (clkfreq / 1000)) + cnt)
  190. outa[10] := 1
  191. waitcnt((67 * (clkfreq / 1000)) + cnt)
  192. WAV.PlayHeartbeat
  193. waitcnt((33 * (clkfreq / 1000)) + cnt)
  194. outa[10] := 0
  195. waitcnt((240 * (clkfreq / 1000)) + cnt)
  196. WAV.PlayHeartbeat
  197. waitcnt((480 * (clkfreq / 1000)) + cnt)
  198.  
  199. outa[9] := 1
  200. waitcnt((80 * (clkfreq / 1000)) + cnt)
  201. outa[9] := 0
  202. waitcnt((100 * (clkfreq / 1000)) + cnt)
  203. outa[10] := 1
  204. waitcnt((67 * (clkfreq / 1000)) + cnt)
  205. WAV.PlayHeartbeat
  206. waitcnt((33 * (clkfreq / 1000)) + cnt)
  207. outa[10] := 0
  208. waitcnt((240 * (clkfreq / 1000)) + cnt)
  209. WAV.PlayHeartbeat
  210. waitcnt((480 * (clkfreq / 1000)) + cnt)
  211.  
  212. outa[9] := 1
  213. waitcnt((80 * (clkfreq / 1000)) + cnt)
  214. outa[9] := 0
  215. waitcnt((100 * (clkfreq / 1000)) + cnt)
  216. outa[10] := 1
  217. waitcnt((67 * (clkfreq / 1000)) + cnt)
  218. WAV.PlayHeartbeat
  219. waitcnt((33 * (clkfreq / 1000)) + cnt)
  220. outa[10] := 0
  221. waitcnt((240 * (clkfreq / 1000)) + cnt)
  222. WAV.PlayHeartbeat
  223. waitcnt((480 * (clkfreq / 1000)) + cnt)
  224.  
  225. outa[9] := 1
  226. waitcnt((80 * (clkfreq / 1000)) + cnt)
  227. outa[9] := 0
  228. WAV.PlayHeartbeat
  229. waitcnt((920 * (clkfreq / 1000)) + cnt) 'dropped QRS
  230. 12:
  231. outa[9] := 1
  232. waitcnt((80 * (clkfreq / 1000)) + cnt) 'Pwave
  233. WAV.PlayHeartbeat
  234. outa[9] := 0
  235. waitcnt((920 * (clkfreq / 1000)) + cnt) 'PR interval
  236. 13:
  237. outa[9] := 1
  238. waitcnt((80 * (clkfreq / 1000)) + cnt)
  239. outa[9] := 0
  240. waitcnt((100 * (clkfreq / 1000)) + cnt)
  241. outa[10] := 1
  242. waitcnt((100 * (clkfreq / 1000)) + cnt)
  243. WAV.PlayHeartbeat
  244. waitcnt((50 * (clkfreq / 1000)) + cnt)
  245. outa[10] := 0
  246. waitcnt((223 * (clkfreq / 1000)) + cnt)
  247. WAV.PlayHeartbeat
  248. waitcnt((447 * (clkfreq / 1000)) + cnt)
  249. 14:
  250. outa[10] := 1
  251. waitcnt((100 * (clkfreq / 1000)) + cnt)
  252. outa[10] := 0
  253. waitcnt((366 * (clkfreq / 1000)) + cnt)
  254. WAV.PlayHeartbeat
  255. waitcnt((734 * (clkfreq / 1000)) + cnt)
  256.  
  257. Pub QRS | Index, x
  258. dira[8..11]~~
  259. Repeat
  260. case Rhythm
  261. 4:
  262. Index := ?x
  263. Index := ||Index
  264. Index := Index // 360
  265. Index := Index + 2
  266. outa[10] := 1
  267. WAV.PlayHeartbeat
  268. waitcnt((100 * (clkfreq / 1000)) + cnt) 'QRS
  269. outa[10] := 0
  270. waitcnt(((Index * 3) * (clkfreq / 1000)) + cnt) 'RR Interval - PQRS
  271. 7:
  272. Index := ?x
  273. Index := ||Index
  274. Index := Index // 100
  275. Index := Index + 1
  276. outa[10] := 1
  277. waitcnt((50 * (clkfreq / 1000)) + cnt) 'QRS
  278. outa[10] := 0
  279. waitcnt((Index * (clkfreq / 1000)) + cnt) 'RR Interval - PQRS
  280. 12:
  281. outa[10] := 1
  282. waitcnt((150 * (clkfreq / 1000)) + cnt) 'QRS
  283. outa[10] := 0
  284. WAV.PlayHeartbeat
  285. waitcnt((1470 * (clkfreq / 1000)) + cnt) 'Slower RR Interval - QRS
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement