Wireless data sending

Dependencies:   C12832 mbed

Fork of xberx by Anoop M

Files at this revision

API Documentation at this revision

Comitter:
CharlesDej
Date:
Tue Jun 03 08:59:19 2014 +0000
Parent:
0:3d9570678c6d
Commit message:
Wireless data receiving

Changed in this revision

C12832.lib Show annotated file Show diff for this revision Revisions of this file
TextLCD.lib Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show annotated file Show diff for this revision Revisions of this file
diff -r 3d9570678c6d -r 27646760b7ac C12832.lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/C12832.lib	Tue Jun 03 08:59:19 2014 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/teams/components/code/C12832/#1c3011afe95d
diff -r 3d9570678c6d -r 27646760b7ac TextLCD.lib
--- a/TextLCD.lib	Mon Feb 28 19:57:50 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-http://mbed.org/users/simon/code/TextLCD/#44f34c09bd37
diff -r 3d9570678c6d -r 27646760b7ac main.cpp
--- a/main.cpp	Mon Feb 28 19:57:50 2011 +0000
+++ b/main.cpp	Tue Jun 03 08:59:19 2014 +0000
@@ -1,34 +1,130 @@
- #include "mbed.h"
- #include "TextLCD.h"
-  
- Serial xbee1(p9, p10);
- DigitalOut rst1(p8);
- 
- DigitalOut myled(LED1);
- TextLCD lcd(p15, p16, p17, p18, p19, p20);
- 
- int main() {
+/* LIBRARIES */
+#include "mbed.h" 
+#include "C12832.h"
+#include "string.h"
+/*--------------------*/
+
+/*OUTPUT AND INPUT CONFIGURATION*/
+Serial xbee1(p9, p10); //pin declaration for the xbee module on the board 
+Serial cinterion(p13,p14);  //pin declaration for the cinterion module on the board
+DigitalOut myled(LED1); //pin declaration for the blinking LED on the board
+DigitalOut myled2 (LED2);
+DigitalOut myled3 (LED3);
+DigitalOut myled4 (LED4);
+C12832 lcd(p5, p7, p6, p8, p11); //pin declaration for the LCD screen on the board
+/*--------------------------*/
+
+/*FUNCTION PROTOTYPE*/
+float decryption (float sens2, char sens);
+/*----------------------*/
+
+/*VARIABLES DEFINITION*/
+char X; //definition of a character
+char temp,volt,current,lumi;     //definition of four variables matching the 4 differents type of data that the board receive
+float temp2, current2,volt2, lumi2; // which are temperature, voltage, current, and luminosity
+char NumTel[] = "07404054906"; //Mobile number to which the values will be sent
+char inchar,inchar1,inchar2,inchar3,inchar4,inchar5; // variables used for the SMS 
+/*-----------------------------------------*/
+
+
+/*------------*/
+/*MAIN PROGRAM*/
+/*------------*/
+
+
+void FlushGSM(void) { char char1 = 0; while (cinterion.readable()) { char1 = cinterion.getc(); } return; }  //function that clean out the reception buffer of the SIM card
+
 
-     rst1 = 0;   //Set reset pin to 0
-     myled = 0;
-     wait_ms(1);
-     rst1 = 1;   //Set reset pin to 1
-     wait_ms(1);
-     int X; 
+//----CALLBACK FUNCTIONS----//
+//This one will interrupt the program when the cinterion will be receiving a SMS// 
+void callback2() 
+ {  
+  inchar = cinterion.getc(); // I am copying several value to be sure that this is the right command
+  inchar1 = cinterion.getc();
+  inchar2 = cinterion.getc();
+  inchar3 = cinterion.getc();
+  inchar4 = cinterion.getc();
+  inchar5 = cinterion.getc();
+  if ((inchar == 0x0D)&&(inchar1 == 0x0A)&&(inchar2 == '+')&&(inchar3 == 'C')&&(inchar4 == 'M')&& (inchar5 == 'T')) // if the incoming command is "+CMTI", a new SMS has been received
+      {
+        myled4=1;
+        cinterion.printf("AT+CMGD=1"); //AT command to delete the last SMS, to never be out of space
+        cinterion.putc(0x0D);          //"enter"
+        wait(1);
+        FlushGSM();                    //clear the reception buffer
+        wait(0.5);
+        cinterion.printf("AT+CMGF=1");   //Text mode activated for the SMS
+        cinterion.putc(0x0D);           //"enter"
+        wait(1);
+        myled2=1;
+        cinterion.printf("AT+CMGS=%s", NumTel);  //AT command to send a SMS to the mobile number set 
+        cinterion.putc(0x0D);                    //"enter"
+        wait(1) ;
+        cinterion.printf("Temperature: %.2f, Current: %.2f,Voltage: %.2f, Luminosity: %.2f" , temp2, current2, volt2, lumi2); //the results are send by SMS
+        cinterion.putc(0x1A);              //ASCII code for Ctrl+Z
+        wait(5);                           //there are a lot of delays, to be sure that the command are sent
+        myled2=0;
+        FlushGSM();                       //clear the reception buffer
+        myled4=0;
+      
+      }
+ }
+
+
 
-     while (1) {
-        if(xbee1.readable()){
-             wait(1);
-              myled = 1;
-             
-            xbee1.scanf("%d", &X);
-           // X = xbee1.getc();
-             wait(1);
-             myled = 0;                
-             lcd.printf("data received %f \n\r ", (X)/10.0);
-             
-           }
-         }
+//This one will interrupt the program when the xbee will be receiving data// 
+ void callback()    
+    {   
+        X =  xbee1.getc(); //the values received are put into the X variable
+        if (X == 0xEE) //if X equals the start bit
+            {   myled = 1; 
+                temp = xbee1.getc();   //the next value that the xbee receive is the temperature, then the current, the voltage and finally the luminosity
+                current = xbee1.getc();
+                volt = xbee1.getc();
+                lumi = xbee1.getc();
+               
+                temp2 = decryption(temp2, temp);  //decryption of the values received
+                current2 = decryption(current2, current);
+                volt2 = decryption (volt2, volt) ;
+                lumi2 = decryption(lumi2, lumi);
+            }
+            
+        if (X == 0xFF) //if X equals the final bit
+            { 
+            myled = 0; //LED is off when the string stops
+            lcd.cls();
+            lcd.locate(0,0);
+            lcd.printf("Temperature: %.2f, Current: %.2f,Voltage: %.2f, Luminosity: %.2f" , temp2, current2, volt2, lumi2); //the board monitor the results on the LCD Screen
+            xbee1.printf("Temperature : %f , Current : %f , Voltage : %f , Luminosity : %f " , temp2, current2, volt2, lumi2); //the board sends the results to the PC thanks to the xbee
+            }
+    } 
+    
+ 
+    
+ float decryption(float sens2, char sens) // decryption function
+       {
+         sens >>=2; //shift bit to the right
+         sens2 = (float)sens/50 ;  //division
+         return sens2;
+       }  
+       
+  
+    
+ //----MAIN FUNCTION----//   
+ int main() 
+    {
+        cinterion.printf("AT+CNMI=1,1,0,0,1"); //configure the cinterion board to be warned when a new SMS is received
+        cinterion.putc(0x0D);                  // ASCII code for the "enter" key
+        FlushGSM();                            // clear the reception buffer
+       
+    while (1) //Neverending loop
+          { 
+          xbee1.attach(&callback); //call of the xbee callback function 
+          cinterion.attach(&callback2);   //call of the cinterion callback function            
+          wait(1);
+          }
      }
 
 
+
+
diff -r 3d9570678c6d -r 27646760b7ac mbed.bld
--- a/mbed.bld	Mon Feb 28 19:57:50 2011 +0000
+++ b/mbed.bld	Tue Jun 03 08:59:19 2014 +0000
@@ -1,1 +1,1 @@
-http://mbed.org/users/mbed_official/code/mbed/builds/63bcd7ba4912
+http://mbed.org/users/mbed_official/code/mbed/builds/0b3ab51c8877
\ No newline at end of file