![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
fault management added
Fork of BAE_FRDM by
Diff: slave.cpp
- Revision:
- 0:8b0d43fe6c05
- Child:
- 1:b4bb78a9b92e
diff -r 000000000000 -r 8b0d43fe6c05 slave.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/slave.cpp Wed Sep 10 06:41:21 2014 +0000 @@ -0,0 +1,93 @@ +#include "slave.h" +#include "HK.h" + +extern struct SensorData Sensor; +I2CSlave slave(A4,A5); //configuring pins p27, p28 as I2Cslave +Serial screen (USBTX,USBRX); +void write_to_master(char send) //function to write data to master + { + int acknowledge; + int loopvariable4=1; + while(loopvariable4) + { + acknowledge = slave.write(send); //sending the byte to master + if(acknowledge==1) + { + screen.printf(" acknowledge %d sent %u \n",acknowledge,send); + loopvariable4=0; + } + } + } + + + + +void FUNC_I2C_SLAVE_MAIN(int iterations) +{ + + screen.printf("\nSlave entered\n"); + slave.address(slave_address); //assigning slave address + slave.stop(); + char Switch_Variable; + + + int loopvariable1=1; + int loopvariable2=0; + int loopvariable3=1; +//initialising dummy sensor data + + while(loopvariable1) + { +//to read data from master + if(slave.receive()==WriteGeneral) //checking if slave is addressed to write + { + Switch_Variable=slave.read(); //receiving data + screen.printf("switch variable=%d\n",Switch_Variable); + slave.stop(); //reset slave to default receiving state + loopvariable1=0; +//to interpret and write data to master + switch(Switch_Variable) + { + + + case 1: printf("\nEntered switch\n"); + while(loopvariable3) + { + if(slave.receive()==ReadAddressed) //check if slave is addressed to read + { + while(loopvariable2<iterations) + { + if(loopvariable2%3==0) + { + screen.printf("\nvoltage%d\n",loopvariable2/3); + write_to_master(Sensor.Voltage[loopvariable2/3]); + } + else if(loopvariable2%3==1) + { + screen.printf("\ncurrent%d\n",loopvariable2/3); + write_to_master(Sensor.Current[loopvariable2/3]); + } + else if(loopvariable2%3==2) + { + screen.printf("\ntemp%d\n",loopvariable2/3); + write_to_master(Sensor.Temperature[loopvariable2/3]); + } + loopvariable2++; + }//while(loopvariable2<30) + printf("\nExited i2c while loop\n"); + slave.stop(); + loopvariable3=0; + }//if(read addressed) + + }//while(loopvariable3) + + break; + case 2 : screen.printf(" telecommand 2\n"); + break; + + }//switch case ends + } +} + screen.printf("\nexited slave function\n"); +} + \ No newline at end of file