Advertisement
Cookins

Untitled

Apr 7th, 2018
98
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.63 KB | None | 0 0
  1. #include <SPI.h>
  2. #include <RF22.h>
  3. #include "tone.h"
  4. #include <SimpleTimer.h>
  5. #define Frequency 434.5
  6. #define DOTLEN 100
  7. #define DASHLEN DOTLEN*3
  8. #define LETTERLEN DOTLEN*2
  9. #define WORDLEN DOTLEN*5
  10. //#define SDN PA0
  11. #define YELLOW_LED_PIN PB1
  12. //#define YELLOW_LED_PIN PC13
  13.  
  14. // Singleton instance of the radio
  15. RF22 rf22(PA4, PA2, &Hardware_spi);
  16. char rssiprev=0;
  17. char timeflag=0;
  18. SimpleTimer timer;
  19.  
  20. // This function is called in the attachSecondsInterrpt
  21. void blink ()
  22. {
  23. digitalWrite(YELLOW_LED_PIN, !digitalRead(YELLOW_LED_PIN));
  24. }
  25.  
  26. void RepeatTask()
  27. {
  28. //if you want an interrupt every minute...
  29. Serial.println("Beacon sending...");
  30. timeflag=1;
  31. }
  32.  
  33. void setup()
  34. {
  35. Serial.begin(9600);
  36. Serial.println("Start server");
  37. pinMode(PA0, OUTPUT);
  38. digitalWrite(PA0, LOW);
  39. pinMode(PA1, OUTPUT);
  40. digitalWrite(PA1, LOW);
  41. timer.setInterval(600000, RepeatTask);
  42. pinMode(YELLOW_LED_PIN, OUTPUT);
  43. while (!rf22.init())
  44. {
  45. Serial.println("RF22 init failed");
  46. digitalWrite(YELLOW_LED_PIN, !digitalRead(YELLOW_LED_PIN));
  47. digitalWrite(PA0, HIGH);
  48. delay(500);
  49. digitalWrite(PA0, LOW);
  50. }
  51. // Defaults after init are 434.0MHz, 0.05MHz AFC pull-in, modulation FSK_Rb2_4Fd36
  52.  
  53. //rf22.setFrequency(437.1, 0.05);
  54. rf22.setFrequency(Frequency, 0.05);
  55. rf22.setTxPower(RF22_TXPOW_20DBM);
  56. rf22.setModeRx();
  57. rf22.spiWrite(RF22_REG_71_MODULATION_CONTROL2, 0x42);
  58. rf22.spiWrite(RF22_REG_0B_GPIO_CONFIGURATION0, 0x12);
  59.  
  60. }
  61.  
  62.  
  63.  
  64. void dash()
  65. {
  66. delay(DOTLEN);
  67. digitalWrite(YELLOW_LED_PIN, HIGH);
  68. tone(PA1,1000,1000);
  69. delay(DASHLEN);
  70. noTone(PA1);
  71. digitalWrite(YELLOW_LED_PIN, LOW);
  72.  
  73. }
  74.  
  75. void dit()
  76. {
  77. delay(DOTLEN);
  78. digitalWrite(YELLOW_LED_PIN, HIGH);
  79. tone(PA1,1000,1000);
  80. delay(DOTLEN);
  81. noTone(PA1);
  82. digitalWrite(YELLOW_LED_PIN, LOW);
  83. }
  84.  
  85. void morse_char(char d)
  86. {
  87.  
  88. switch ( d )
  89. {
  90. // send character as morse
  91. case 0x41: dit(); dash(); break; // a
  92. case 0x42: dash(); dit(); dit(); dit(); break; // b
  93. case 0x43: dash(); dit(); dash(); dit(); break; // c
  94. case 0x44: dash(); dit(); dit(); break; // d
  95. case 0x45: dit(); break; // e
  96. case 0x46: dit(); dit(); dash(); dit(); break; // f
  97. case 0x47: dash(); dash(); dit(); break; // g
  98. case 0x48: dit(); dit(); dit(); dit(); break; // h
  99. case 0x49: dit(); dit(); break; // i
  100. case 0x4A: dit(); dash(); dash(); dash(); break; // j
  101. case 0x4B: dash(); dit(); dash(); break; // k
  102. case 0x4C: dit(); dash(); dit(); dit(); break; // l
  103. case 0x4D: dash(); dash(); break; // m
  104. case 0x4E: dash(); dit(); break; // n
  105. case 0x4F: dash(); dash(); dash(); break; // o
  106. case 0x50: dit(); dash(); dash(); dit(); break; // p
  107. case 0x51: dash(); dash(); dit(); dash(); break; // q
  108. case 0x52: dit(); dash(); dit(); break; // r
  109. case 0x53: dit(); dit(); dit(); break; // s
  110. case 0x54: dash(); break; // t
  111. case 0x55: dit(); dit(); dash(); break; // u
  112. case 0x56: dit(); dit(); dit(); dash(); break; // v
  113. case 0x57: dit(); dash(); dash(); break; // w
  114. case 0x58: dash(); dit(); dit(); dash(); break; // x
  115. case 0x59: dash(); dit(); dash(); dash(); break; // y
  116. case 0x5A: dash(); dash(); dit(); dit(); break; // z
  117.  
  118. case 0x30: dash(); dash(); dash(); dash(); dash(); break; // 0
  119. case 0x31: dit(); dash(); dash(); dash(); dash(); break; // 1
  120. case 0x32: dit(); dit(); dash(); dash(); dash(); break; // 2
  121. case 0x33: dit(); dit(); dit(); dash(); dash(); break; // 3
  122. case 0x34: dit(); dit(); dit(); dit(); dash(); break; // 4
  123. case 0x35: dit(); dit(); dit(); dit(); dit(); break; // 5
  124. case 0x36: dash(); dit(); dit(); dit(); dit(); break; // 6
  125. case 0x37: dash(); dash(); dit(); dit(); dit(); break; // 7
  126. case 0x38: dash(); dash(); dash(); dit(); dit(); break; // 8
  127. case 0x39: dash(); dash(); dash(); dash(); dit(); break; // 9
  128.  
  129. case 0x2C: dit(); dash(); dit(); dash(); dit(); dash(); break; // ,
  130. case 0x2D: dash(); dash(); dit(); dit(); dash(); dash(); break; // .
  131. case 0x2F: dash(); dit(); dit(); dash(); dit(); break; // /
  132. case 0x3F: dit(); dit(); dash(); dash(); dit(); dit(); break; // ?
  133. case 0x40: dit(); dash(); dash(); dit(); dash(); dit(); break; // @
  134. default: break;
  135. }
  136. if (d==0x20)
  137. {
  138. delay(WORDLEN);
  139. }
  140. else
  141. {
  142. delay(LETTERLEN);
  143. }
  144. }
  145.  
  146. void morse_str(char *str, char len)
  147. {
  148. char i=0;
  149. while(i<len)
  150. {
  151. morse_char(*(str+i));
  152. i++;
  153. }
  154. }
  155.  
  156. void loop()
  157. {
  158. timer.run();
  159.  
  160. if (timeflag==1)
  161. {
  162. timeflag=0;
  163. rf22.setModeTx();
  164. delay(WORDLEN);
  165. morse_str("Test beacon",11);
  166. delay(WORDLEN);
  167. rf22.setModeRx();
  168. //delay(WORDLEN*10);
  169. }
  170. else if((rf22.rssiRead()>rssiprev+20)||(rf22.rssiRead()<rssiprev-20))
  171. {
  172. //rssiprev=rf22.rssiRead();
  173. timeflag=0;
  174. delay(WORDLEN*3);
  175. rf22.setModeTx();
  176. delay(WORDLEN*2);
  177. rf22.setTxPower(RF22_TXPOW_1DBM);
  178. tone(PA1,700,1000);
  179. delay(500);
  180. noTone(PA1);
  181. delay(WORDLEN);
  182. rf22.setTxPower(RF22_TXPOW_11DBM);
  183. tone(PA1,800,1000);
  184. delay(500);
  185. noTone(PA1);
  186. delay(WORDLEN);
  187. rf22.setTxPower(RF22_TXPOW_20DBM);
  188. tone(PA1,900,1000);
  189. delay(500);
  190. noTone(PA1);
  191. delay(WORDLEN);
  192. morse_str("ok 73",5);
  193. delay(WORDLEN);
  194. rf22.setModeRx();
  195. }
  196. //Serial.print ("RSSI ");
  197. Serial.println (rf22.rssiRead());
  198. rssiprev=rf22.rssiRead();
  199. delay(DOTLEN);
  200. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement