Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <SPI.h>
- #include <RF22.h>
- #include "tone.h"
- #include <SimpleTimer.h>
- #define Frequency 434.5
- #define DOTLEN 100
- #define DASHLEN DOTLEN*3
- #define LETTERLEN DOTLEN*2
- #define WORDLEN DOTLEN*5
- //#define SDN PA0
- #define YELLOW_LED_PIN PB1
- //#define YELLOW_LED_PIN PC13
- // Singleton instance of the radio
- RF22 rf22(PA4, PA2, &Hardware_spi);
- char rssiprev=0;
- char timeflag=0;
- SimpleTimer timer;
- // This function is called in the attachSecondsInterrpt
- void blink ()
- {
- digitalWrite(YELLOW_LED_PIN, !digitalRead(YELLOW_LED_PIN));
- }
- void RepeatTask()
- {
- //if you want an interrupt every minute...
- Serial.println("Beacon sending...");
- timeflag=1;
- }
- void setup()
- {
- Serial.begin(9600);
- Serial.println("Start server");
- pinMode(PA0, OUTPUT);
- digitalWrite(PA0, LOW);
- pinMode(PA1, OUTPUT);
- digitalWrite(PA1, LOW);
- timer.setInterval(600000, RepeatTask);
- pinMode(YELLOW_LED_PIN, OUTPUT);
- while (!rf22.init())
- {
- Serial.println("RF22 init failed");
- digitalWrite(YELLOW_LED_PIN, !digitalRead(YELLOW_LED_PIN));
- digitalWrite(PA0, HIGH);
- delay(500);
- digitalWrite(PA0, LOW);
- }
- // Defaults after init are 434.0MHz, 0.05MHz AFC pull-in, modulation FSK_Rb2_4Fd36
- //rf22.setFrequency(437.1, 0.05);
- rf22.setFrequency(Frequency, 0.05);
- rf22.setTxPower(RF22_TXPOW_20DBM);
- rf22.setModeRx();
- rf22.spiWrite(RF22_REG_71_MODULATION_CONTROL2, 0x42);
- rf22.spiWrite(RF22_REG_0B_GPIO_CONFIGURATION0, 0x12);
- }
- void dash()
- {
- delay(DOTLEN);
- digitalWrite(YELLOW_LED_PIN, HIGH);
- tone(PA1,1000,1000);
- delay(DASHLEN);
- noTone(PA1);
- digitalWrite(YELLOW_LED_PIN, LOW);
- }
- void dit()
- {
- delay(DOTLEN);
- digitalWrite(YELLOW_LED_PIN, HIGH);
- tone(PA1,1000,1000);
- delay(DOTLEN);
- noTone(PA1);
- digitalWrite(YELLOW_LED_PIN, LOW);
- }
- void morse_char(char d)
- {
- switch ( d )
- {
- // send character as morse
- case 0x41: dit(); dash(); break; // a
- case 0x42: dash(); dit(); dit(); dit(); break; // b
- case 0x43: dash(); dit(); dash(); dit(); break; // c
- case 0x44: dash(); dit(); dit(); break; // d
- case 0x45: dit(); break; // e
- case 0x46: dit(); dit(); dash(); dit(); break; // f
- case 0x47: dash(); dash(); dit(); break; // g
- case 0x48: dit(); dit(); dit(); dit(); break; // h
- case 0x49: dit(); dit(); break; // i
- case 0x4A: dit(); dash(); dash(); dash(); break; // j
- case 0x4B: dash(); dit(); dash(); break; // k
- case 0x4C: dit(); dash(); dit(); dit(); break; // l
- case 0x4D: dash(); dash(); break; // m
- case 0x4E: dash(); dit(); break; // n
- case 0x4F: dash(); dash(); dash(); break; // o
- case 0x50: dit(); dash(); dash(); dit(); break; // p
- case 0x51: dash(); dash(); dit(); dash(); break; // q
- case 0x52: dit(); dash(); dit(); break; // r
- case 0x53: dit(); dit(); dit(); break; // s
- case 0x54: dash(); break; // t
- case 0x55: dit(); dit(); dash(); break; // u
- case 0x56: dit(); dit(); dit(); dash(); break; // v
- case 0x57: dit(); dash(); dash(); break; // w
- case 0x58: dash(); dit(); dit(); dash(); break; // x
- case 0x59: dash(); dit(); dash(); dash(); break; // y
- case 0x5A: dash(); dash(); dit(); dit(); break; // z
- case 0x30: dash(); dash(); dash(); dash(); dash(); break; // 0
- case 0x31: dit(); dash(); dash(); dash(); dash(); break; // 1
- case 0x32: dit(); dit(); dash(); dash(); dash(); break; // 2
- case 0x33: dit(); dit(); dit(); dash(); dash(); break; // 3
- case 0x34: dit(); dit(); dit(); dit(); dash(); break; // 4
- case 0x35: dit(); dit(); dit(); dit(); dit(); break; // 5
- case 0x36: dash(); dit(); dit(); dit(); dit(); break; // 6
- case 0x37: dash(); dash(); dit(); dit(); dit(); break; // 7
- case 0x38: dash(); dash(); dash(); dit(); dit(); break; // 8
- case 0x39: dash(); dash(); dash(); dash(); dit(); break; // 9
- case 0x2C: dit(); dash(); dit(); dash(); dit(); dash(); break; // ,
- case 0x2D: dash(); dash(); dit(); dit(); dash(); dash(); break; // .
- case 0x2F: dash(); dit(); dit(); dash(); dit(); break; // /
- case 0x3F: dit(); dit(); dash(); dash(); dit(); dit(); break; // ?
- case 0x40: dit(); dash(); dash(); dit(); dash(); dit(); break; // @
- default: break;
- }
- if (d==0x20)
- {
- delay(WORDLEN);
- }
- else
- {
- delay(LETTERLEN);
- }
- }
- void morse_str(char *str, char len)
- {
- char i=0;
- while(i<len)
- {
- morse_char(*(str+i));
- i++;
- }
- }
- void loop()
- {
- timer.run();
- if (timeflag==1)
- {
- timeflag=0;
- rf22.setModeTx();
- delay(WORDLEN);
- morse_str("Test beacon",11);
- delay(WORDLEN);
- rf22.setModeRx();
- //delay(WORDLEN*10);
- }
- else if((rf22.rssiRead()>rssiprev+20)||(rf22.rssiRead()<rssiprev-20))
- {
- //rssiprev=rf22.rssiRead();
- timeflag=0;
- delay(WORDLEN*3);
- rf22.setModeTx();
- delay(WORDLEN*2);
- rf22.setTxPower(RF22_TXPOW_1DBM);
- tone(PA1,700,1000);
- delay(500);
- noTone(PA1);
- delay(WORDLEN);
- rf22.setTxPower(RF22_TXPOW_11DBM);
- tone(PA1,800,1000);
- delay(500);
- noTone(PA1);
- delay(WORDLEN);
- rf22.setTxPower(RF22_TXPOW_20DBM);
- tone(PA1,900,1000);
- delay(500);
- noTone(PA1);
- delay(WORDLEN);
- morse_str("ok 73",5);
- delay(WORDLEN);
- rf22.setModeRx();
- }
- //Serial.print ("RSSI ");
- Serial.println (rf22.rssiRead());
- rssiprev=rf22.rssiRead();
- delay(DOTLEN);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement