Board: stm32f103rb GSM: SIM900 RF22: si4432 based 433 Mhz

Dependencies:   GPRS RF22 mbed

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?

UserRevisionLine numberNew 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