freeslave1.0

Dependencies:   mbed

Revision:
0:10d14005f03a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/slave.cpp	Wed Dec 03 10:37:04 2014 +0000
@@ -0,0 +1,92 @@
+#include "slave.h"
+I2CSlave slave(p28,p27);                       //configuring pins p27, p28 as I2Cslave
+Serial pc (USBTX,USBRX);
+//SensorData Sensor;
+struct SensorData                              //HK_data_structure
+{
+    char voltage[10];
+    char current[10];
+    char temp[10];
+}Sensor;
+
+int FUNC_I2C_SLAVE_MAIN(int iterations)
+{
+    
+    wait(0.5);
+    slave.address(0x20);                        //assigning slave address
+    char Switch_Variable;
+    int ReadAddressed=1;
+    int WriteGeneral=3;
+    bool loopvariable1=true;
+    uint8_t loopvariable2=0;
+    bool loopvariable3=true;
+//---------------initialising dummy sensor data-----------------------------------------------------------                         
+    Sensor.voltage[0]='a';Sensor.current[0]='1';Sensor.temp[0]='k';
+    Sensor.voltage[1]='b';Sensor.current[1]='2';Sensor.temp[1]='l';
+    Sensor.voltage[2]='c';Sensor.current[2]='3';Sensor.temp[2]='m';
+    Sensor.voltage[3]='d';Sensor.current[3]='4';Sensor.temp[3]='n';
+    Sensor.voltage[4]='e';Sensor.current[4]='5';Sensor.temp[4]='o';
+    Sensor.voltage[5]='f';Sensor.current[5]='1';Sensor.temp[5]='p';
+    Sensor.voltage[6]='g';Sensor.current[6]='2';Sensor.temp[6]='q';
+    Sensor.voltage[7]='h';Sensor.current[7]='3';Sensor.temp[7]='r';
+    while(loopvariable1)
+    { 
+//------------------------to read data from master---------------------------------------------------------       
+    if(slave.receive()==WriteGeneral)                 //checking if slave is addressed to write
+    {
+      Switch_Variable=slave.read();                   //receiving data
+      printf("switch variable=%d\n",Switch_Variable);
+      slave.stop();                                   //reset slave to default receiving state
+      loopvariable1=false;
+//----------------------to interpret and write data to master----------------------------------------------       
+      switch(Switch_Variable)
+      {
+      
+       case '1':  while(loopvariable3)
+                 {
+                     if(slave.receive()==ReadAddressed)             //check if slave is addressed to read 
+                   {
+                      loopvariable3=false;
+                      while(loopvariable2<8)                              //running loop for sending 30 sensors data
+                       {
+                          printf("\nvoltage%d\n",loopvariable2);
+                          write_to_master(Sensor.voltage[loopvariable2]);   //calling function to send float data     
+                             
+                          printf("\ncurrent%d\n",loopvariable2);
+                          write_to_master(Sensor.current[loopvariable2]);  //calling function to send float data 
+                             
+                          printf("\ntemp%d\n",loopvariable2);
+                          write_to_master(Sensor.temp[loopvariable2]);    //calling function to send float data
+                                   
+                      loopvariable2++;      
+                      }
+                      
+                    }
+                                       
+                  }  
+                  break;
+       case '2' : printf(" telecommand 2\n");
+                  break;         
+                 
+        }
+   }   
+}
+   slave.stop();
+   printf("done");
+}
+
+//------------------function to write data to master---------------------------------------------------
+void write_to_master(char send)                           
+{
+     bool acknowledge;
+     bool loopvariable4=true; 
+     while(loopvariable4)
+      {
+        acknowledge = (bool) slave.write(send);    //sending the byte to master
+        if(acknowledge)                  //breaking loop if data is acknowledged
+         {
+            printf(" acknowledge %d sent %x \n",acknowledge,send);
+            loopvariable4 = false;
+         }
+      } 
+}
\ No newline at end of file