Umair Ishfaq
/
Geofence_receiver
Board: stm32f103rb GSM: SIM900 RF22: si4432 based 433 Mhz
main.cpp@0:47ed488cbd62, 2015-12-31 (annotated)
- Committer:
- 13beeuishfaq
- Date:
- Thu Dec 31 16:20:06 2015 +0000
- Revision:
- 0:47ed488cbd62
Board: stm32f103rb; GSM: SIM900; RF22: si4432 based 433 Mhz
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
13beeuishfaq | 0:47ed488cbd62 | 1 | #include "mbed.h" |
13beeuishfaq | 0:47ed488cbd62 | 2 | #include <RF22.h> |
13beeuishfaq | 0:47ed488cbd62 | 3 | #include <RF22ReliableDatagram.h> |
13beeuishfaq | 0:47ed488cbd62 | 4 | #include "gprs.h" |
13beeuishfaq | 0:47ed488cbd62 | 5 | |
13beeuishfaq | 0:47ed488cbd62 | 6 | #define SEND_SMS_TEST 0 |
13beeuishfaq | 0:47ed488cbd62 | 7 | #define CALL_UP_TEST 0 |
13beeuishfaq | 0:47ed488cbd62 | 8 | #define ANSWER_TEST 0 |
13beeuishfaq | 0:47ed488cbd62 | 9 | #define READ_SMS_TEST 0 |
13beeuishfaq | 0:47ed488cbd62 | 10 | |
13beeuishfaq | 0:47ed488cbd62 | 11 | #define BAUD_RATE 19200 // Baud rate of GPRS Shield |
13beeuishfaq | 0:47ed488cbd62 | 12 | #define PHONE_NUMBER "+923344255202" |
13beeuishfaq | 0:47ed488cbd62 | 13 | |
13beeuishfaq | 0:47ed488cbd62 | 14 | GPRS gprsTest(PA_9, PA_10, BAUD_RATE, PHONE_NUMBER); |
13beeuishfaq | 0:47ed488cbd62 | 15 | Serial pc(USBTX, USBRX); |
13beeuishfaq | 0:47ed488cbd62 | 16 | |
13beeuishfaq | 0:47ed488cbd62 | 17 | void messageHandle(void) |
13beeuishfaq | 0:47ed488cbd62 | 18 | { |
13beeuishfaq | 0:47ed488cbd62 | 19 | __disable_irq(); |
13beeuishfaq | 0:47ed488cbd62 | 20 | int messageType = gprsTest.loopHandle(); |
13beeuishfaq | 0:47ed488cbd62 | 21 | if(MESSAGE_RING == messageType) { |
13beeuishfaq | 0:47ed488cbd62 | 22 | gprsTest.answer(); |
13beeuishfaq | 0:47ed488cbd62 | 23 | } else if(MESSAGE_SMS == messageType) { |
13beeuishfaq | 0:47ed488cbd62 | 24 | char smsMessage[SMS_MAX_LENGTH]; |
13beeuishfaq | 0:47ed488cbd62 | 25 | gprsTest.getSMS(smsMessage); |
13beeuishfaq | 0:47ed488cbd62 | 26 | } |
13beeuishfaq | 0:47ed488cbd62 | 27 | __enable_irq(); |
13beeuishfaq | 0:47ed488cbd62 | 28 | } |
13beeuishfaq | 0:47ed488cbd62 | 29 | |
13beeuishfaq | 0:47ed488cbd62 | 30 | //RF22ReliableDatagram (uint8_t thisAddress, PinName slaveSelectPin, PinName mosi, PinName miso, PinName sclk, PinName interrupt) |
13beeuishfaq | 0:47ed488cbd62 | 31 | RF22ReliableDatagram rf22(0,PB_6,PA_7,PA_6,PA_5,PB_5); |
13beeuishfaq | 0:47ed488cbd62 | 32 | |
13beeuishfaq | 0:47ed488cbd62 | 33 | float frequency = 433; // frequency |
13beeuishfaq | 0:47ed488cbd62 | 34 | float longitude=0; |
13beeuishfaq | 0:47ed488cbd62 | 35 | float latitude=0; |
13beeuishfaq | 0:47ed488cbd62 | 36 | int flag=0; |
13beeuishfaq | 0:47ed488cbd62 | 37 | float baselat=0; |
13beeuishfaq | 0:47ed488cbd62 | 38 | float baselong=0; |
13beeuishfaq | 0:47ed488cbd62 | 39 | float distance=0; |
13beeuishfaq | 0:47ed488cbd62 | 40 | float diflat=0; |
13beeuishfaq | 0:47ed488cbd62 | 41 | float diflong=0; |
13beeuishfaq | 0:47ed488cbd62 | 42 | float dislat=0; |
13beeuishfaq | 0:47ed488cbd62 | 43 | float dislong=0; |
13beeuishfaq | 0:47ed488cbd62 | 44 | const uint8_t sender_adress = 1; // address of sender |
13beeuishfaq | 0:47ed488cbd62 | 45 | const uint8_t receiver_adress =2; // address of receiver |
13beeuishfaq | 0:47ed488cbd62 | 46 | |
13beeuishfaq | 0:47ed488cbd62 | 47 | uint8_t data[256]=" "; |
13beeuishfaq | 0:47ed488cbd62 | 48 | void receive_loop() { |
13beeuishfaq | 0:47ed488cbd62 | 49 | uint8_t buf[RF22_MAX_MESSAGE_LEN]; |
13beeuishfaq | 0:47ed488cbd62 | 50 | uint8_t len = sizeof(buf); |
13beeuishfaq | 0:47ed488cbd62 | 51 | |
13beeuishfaq | 0:47ed488cbd62 | 52 | //boolean recvfromAck(uint8_t* buf, uint8_t* len, uint8_t* from = NULL, uint8_t* to = NULL, uint8_t* id = NULL, uint8_t* flags = NULL); |
13beeuishfaq | 0:47ed488cbd62 | 53 | if (rf22.recvfromAck(buf, &len)) |
13beeuishfaq | 0:47ed488cbd62 | 54 | { |
13beeuishfaq | 0:47ed488cbd62 | 55 | sscanf((char *)buf,"%f,%f",&latitude,&longitude); |
13beeuishfaq | 0:47ed488cbd62 | 56 | pc.printf("\nLatitude: %f, Longitude: %f\n",latitude,longitude); |
13beeuishfaq | 0:47ed488cbd62 | 57 | if(flag==0) |
13beeuishfaq | 0:47ed488cbd62 | 58 | { |
13beeuishfaq | 0:47ed488cbd62 | 59 | baselat=latitude; |
13beeuishfaq | 0:47ed488cbd62 | 60 | baselong=longitude; |
13beeuishfaq | 0:47ed488cbd62 | 61 | flag=1; |
13beeuishfaq | 0:47ed488cbd62 | 62 | } |
13beeuishfaq | 0:47ed488cbd62 | 63 | diflat=latitude-baselat; |
13beeuishfaq | 0:47ed488cbd62 | 64 | diflong=longitude-baselong; |
13beeuishfaq | 0:47ed488cbd62 | 65 | dislat= 111366*diflat; |
13beeuishfaq | 0:47ed488cbd62 | 66 | dislong= 111366*diflong; |
13beeuishfaq | 0:47ed488cbd62 | 67 | distance= sqrt( (dislat*dislat) + (dislong*dislong) ); |
13beeuishfaq | 0:47ed488cbd62 | 68 | pc.printf("baselat: %f, baselong: %f\n",baselat,baselong); |
13beeuishfaq | 0:47ed488cbd62 | 69 | pc.printf("latitude: %f, longitude: %f \r\n",latitude,longitude); |
13beeuishfaq | 0:47ed488cbd62 | 70 | pc.printf("difference in latitude: %f \n difference in longitude: %f\n",diflat,diflong); |
13beeuishfaq | 0:47ed488cbd62 | 71 | pc.printf("distance in latitude: %f \n Distance in longitude: %f\n Total Distance: %f\n",dislat,dislong,distance); |
13beeuishfaq | 0:47ed488cbd62 | 72 | } |
13beeuishfaq | 0:47ed488cbd62 | 73 | } |
13beeuishfaq | 0:47ed488cbd62 | 74 | |
13beeuishfaq | 0:47ed488cbd62 | 75 | |
13beeuishfaq | 0:47ed488cbd62 | 76 | int main() { |
13beeuishfaq | 0:47ed488cbd62 | 77 | |
13beeuishfaq | 0:47ed488cbd62 | 78 | pc.baud(9600); |
13beeuishfaq | 0:47ed488cbd62 | 79 | pc.printf("\n\rConnected to mbed\n\r"); |
13beeuishfaq | 0:47ed488cbd62 | 80 | |
13beeuishfaq | 0:47ed488cbd62 | 81 | pc.printf ("RF22-Test-Reliable-Send V1.0\n\r"); |
13beeuishfaq | 0:47ed488cbd62 | 82 | |
13beeuishfaq | 0:47ed488cbd62 | 83 | // initialize the device |
13beeuishfaq | 0:47ed488cbd62 | 84 | if (!rf22.init()) |
13beeuishfaq | 0:47ed488cbd62 | 85 | pc.printf("RF22 init failed\n\r"); |
13beeuishfaq | 0:47ed488cbd62 | 86 | |
13beeuishfaq | 0:47ed488cbd62 | 87 | // set to 19.2 KB |
13beeuishfaq | 0:47ed488cbd62 | 88 | if (!rf22.setModemConfig(RF22::GFSK_Rb19_2Fd9_6)) |
13beeuishfaq | 0:47ed488cbd62 | 89 | pc.printf("setModemConfig failed"); |
13beeuishfaq | 0:47ed488cbd62 | 90 | |
13beeuishfaq | 0:47ed488cbd62 | 91 | if (!rf22.setFrequency(frequency)) |
13beeuishfaq | 0:47ed488cbd62 | 92 | pc.printf("setFrequency failed"); |
13beeuishfaq | 0:47ed488cbd62 | 93 | |
13beeuishfaq | 0:47ed488cbd62 | 94 | // Code for receiving |
13beeuishfaq | 0:47ed488cbd62 | 95 | pc.printf("I am receiving with address %i ...\n\r",receiver_adress); |
13beeuishfaq | 0:47ed488cbd62 | 96 | rf22.setThisAddress(receiver_adress); |
13beeuishfaq | 0:47ed488cbd62 | 97 | |
13beeuishfaq | 0:47ed488cbd62 | 98 | while(latitude==0) |
13beeuishfaq | 0:47ed488cbd62 | 99 | {receive_loop();} |
13beeuishfaq | 0:47ed488cbd62 | 100 | int unk=0; |
13beeuishfaq | 0:47ed488cbd62 | 101 | while(0 != gprsTest.init()) { |
13beeuishfaq | 0:47ed488cbd62 | 102 | wait(2); |
13beeuishfaq | 0:47ed488cbd62 | 103 | } |
13beeuishfaq | 0:47ed488cbd62 | 104 | pc.printf("\n.....about to send msg\n"); |
13beeuishfaq | 0:47ed488cbd62 | 105 | sprintf((char*)data,"STM32 GPS Coordinates:\nbaselat: %f\n baselong: %f\nlatitude: %f\n longitude: %f \r\ndifference in latitude: %f \n difference in longitude: %f\ndistance in latitude: %f \n Distance in longitude: %f\n Total Distance: %f\n",baselat,baselong,latitude,longitude,diflat,diflong,dislat,dislong,distance); |
13beeuishfaq | 0:47ed488cbd62 | 106 | unk=gprsTest.sendSMS(PHONE_NUMBER,(char*)data); //define phone number and text |
13beeuishfaq | 0:47ed488cbd62 | 107 | if(unk!=0) |
13beeuishfaq | 0:47ed488cbd62 | 108 | { |
13beeuishfaq | 0:47ed488cbd62 | 109 | pc.printf("\nSending failed\n"); |
13beeuishfaq | 0:47ed488cbd62 | 110 | } |
13beeuishfaq | 0:47ed488cbd62 | 111 | gprsTest.callUp(PHONE_NUMBER); |
13beeuishfaq | 0:47ed488cbd62 | 112 | gprsTest.gprsSerial.attach(&messageHandle); |
13beeuishfaq | 0:47ed488cbd62 | 113 | pc.printf("Sent"); |
13beeuishfaq | 0:47ed488cbd62 | 114 | while(1){wait(1);} |
13beeuishfaq | 0:47ed488cbd62 | 115 | } |
13beeuishfaq | 0:47ed488cbd62 | 116 |