Advertisement
Guest User

Untitled

a guest
Feb 20th, 2020
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.86 KB | None | 0 0
  1. ////////////////////////////
  2. //
  3. // Skeleton5.ino
  4. //
  5. // 2019-01-15 Jens Andersson
  6. //
  7. ////////////////////////////
  8.  
  9. #include <etsf15lib.h>
  10.  
  11. //
  12. // Runtime
  13. //
  14.  
  15. // Predefined runtime variables
  16. int state = NONE;
  17. int seq_no;
  18. int selected_led;
  19. Shield sh; // note! no () since constructor takes no arguments
  20. Transmit tx;
  21. Receive rx;
  22.  
  23. //////////////////////////////////////////////////////////
  24. //
  25. // Add your global constant and variabel declaretions here
  26. int symbol;
  27. byte SFD_BUFFER;
  28. int rx_bit;
  29. long ct;
  30. int rec_address;
  31. long ct1;
  32. int nbr_seq;
  33. int attempts;
  34. //
  35.  
  36. //////////////////////////////////////////////////////////
  37.  
  38. //
  39. // Code
  40. //
  41. void setup() {
  42. sh.begin();
  43.  
  44. state = APP_PRODUCE;
  45. attempts = 0;
  46. nbr_seq = 0;
  47. sh.my_address = 0;
  48. Serial.println("[MAIN LOOP]");
  49. Serial.print(" My address = "); Serial.println(sh.my_address);
  50.  
  51. //////////////////////////////////////////////////////////
  52. //
  53. // Add your init code here
  54. //
  55.  
  56. //////////////////////////////////////////////////////////
  57. }
  58.  
  59.  
  60.  
  61. void loop() {
  62.  
  63.  
  64.  
  65. switch (state) {
  66.  
  67. case L1_SEND:
  68. Serial.println("[State] L1_SEND");
  69. l1_send(tx.frame, LEN_FRAME);
  70. state = L1_RECEIVE;
  71. // ---
  72. break;
  73.  
  74.  
  75. case L1_RECEIVE:
  76. Serial.println("[State] L1_RECEIVE");
  77. sh.allDebsOff();
  78. SFD_BUFFER = 0;
  79. rx_bit = 0;
  80. rx_bit = sh.adConv(analogRead(PIN_RX));
  81. ct = millis();
  82. while (rx_bit == 0 && millis() - ct < 20000) {
  83. rx_bit = sh.adConv(analogRead(PIN_RX));
  84. }
  85. if ( millis() - ct > 20000) {
  86. Serial.println("Timeout");
  87. state = L2_RETRANSMIT;
  88. }
  89. while ( ((SFD_BUFFER ^ SFD_BYTE) != 0) && (millis() - ct < 20000) ) {
  90. ct1 = millis();
  91. rx_bit = sh.adConv(analogRead(PIN_RX));
  92. SFD_BUFFER <<= 1;
  93. SFD_BUFFER |= (rx_bit & 1);
  94. Serial.print(rx_bit);
  95. delay(T_S - (millis() - ct1));
  96. }
  97. if ( millis() - ct >= 20000) {
  98. Serial.println("Timeout efter SFD");
  99. state = APP_PRODUCE;
  100. break;
  101. }
  102. for (int i = 0; i < 32; i++) {
  103. ct = millis();
  104. rx_bit = sh.adConv(analogRead(PIN_RX));
  105. rx.frame[i] = rx_bit;
  106. delay(T_S - (millis() - ct));
  107. Serial.println("DONE");
  108. }
  109. state = L2_FRAME_REC;
  110.  
  111.  
  112.  
  113.  
  114. // ---
  115. break;
  116.  
  117. case L2_DATA_SEND:
  118. Serial.println("[State] L2_DATA_SEND");
  119. // +++ add code here
  120. tx.frame_from = 0;
  121. tx.frame_to = rec_address; //ssage[MESSAGE_ADDRESS];
  122. tx.frame_type = FRAME_TYPE_DATA;
  123. if (nbr_seq >= 16) {
  124. nbr_seq = 0;
  125. }
  126. tx.frame_seqnum = nbr_seq;
  127. nbr_seq++;
  128. tx.frame_payload = tx.message[MESSAGE_PAYLOAD];
  129. tx.frame_crc = 0;
  130. tx.frame_generation();
  131. state = L1_SEND;
  132. break;
  133.  
  134. case L2_RETRANSMIT:
  135. Serial.println("[State] L2_RETRANSMIT");
  136. if (attempts <= MAX_TX_ATTEMPTS) {
  137. attempts++;
  138. state = L1_SEND;
  139. } else {
  140. Serial.println("Max attempts");
  141. attempts = 0;
  142. state = APP_PRODUCE;
  143. }
  144.  
  145. // ---
  146. break;
  147.  
  148. case L2_FRAME_REC:
  149. Serial.println("[State] L2_FRAME_REC");
  150. rx.frame_decompose();
  151. if (rx.frame_to == sh.my_address) {
  152. Serial.println("Till oss");
  153. if (rx.frame_type == FRAME_TYPE_ACK) {
  154. state = L2_ACK_REC;
  155. break;
  156. } else {
  157. state = APP_PRODUCE;
  158. break;
  159. }
  160. } else {
  161. state = L1_RECEIVE;
  162. Serial.println("Inte till oss");
  163. break;
  164. }
  165.  
  166.  
  167. // ---
  168. break;
  169.  
  170. case L2_ACK_SEND:
  171. Serial.println("[State] L2_ACK_SEND");
  172. // +++ add code here
  173.  
  174. // ---
  175. break;
  176.  
  177. case L2_ACK_REC:
  178. Serial.println("[State] L2_ACK_REC");
  179. if (rx.frame_seqnum == nbr_seq-1) {
  180. Serial.println("Korrekt seq");
  181. state = APP_PRODUCE;
  182. } else {
  183. Serial.println("Fel seqnum");
  184. state = L2_RETRANSMIT;
  185. }
  186. break;
  187.  
  188. case APP_PRODUCE:
  189. Serial.println("[State] APP_PRODUCE");
  190. selected_led = sh.select_led();
  191. Serial.println(selected_led);
  192. tx.message[MESSAGE_PAYLOAD] = selected_led;
  193. rec_address = sh.get_address();
  194. tx.message[MESSAGE_ADDRESS] = rec_address;
  195. state = L2_DATA_SEND;
  196. // ---
  197. break;
  198.  
  199. case APP_ACT:
  200. Serial.println("[State] APP_ACT");
  201. // +++ add code here
  202.  
  203. // ---
  204. break;
  205.  
  206. case HALT:
  207. Serial.println("[State] HALT");
  208. sh.halt();
  209. break;
  210.  
  211. default:
  212. Serial.println("UNDEFINED STATE");
  213. break;
  214.  
  215.  
  216. }
  217. }
  218.  
  219. void l1_send(byte l2frame[], int framelen) {
  220. for (int i = 0; i < LEN_PREAMBLE; i++) {
  221. digitalWrite(PIN_TX, PREAMBLE[i]);
  222. delay(T_S);
  223. }
  224. for (int i = 0; i < LEN_SFD; i++) {
  225. digitalWrite(PIN_TX, SFD[i]);
  226. delay(T_S);
  227. }
  228. for (int i = 0; i < framelen; i++) {
  229. digitalWrite(PIN_TX, l2frame[i]);
  230. delay(T_S);
  231. }
  232.  
  233. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement