i2c slave sending 4 bit sensor data to master

Dependencies:   mbed

Committer:
viswachaitanya
Date:
Sat Jul 05 06:38:13 2014 +0000
Revision:
0:acc1f8a1b321
i2c slave(4 bit sensor data storage)

Who changed what in which revision?

UserRevisionLine numberNew contents of line
viswachaitanya 0:acc1f8a1b321 1 #include "slave.h"
viswachaitanya 0:acc1f8a1b321 2 #include "HK.h"
viswachaitanya 0:acc1f8a1b321 3
viswachaitanya 0:acc1f8a1b321 4 extern SensorData Sensor;
viswachaitanya 0:acc1f8a1b321 5 I2CSlave slave(p28,p27); //configuring pins p27, p28 as I2Cslave
viswachaitanya 0:acc1f8a1b321 6 Serial screen (USBTX,USBRX);
viswachaitanya 0:acc1f8a1b321 7 void write_to_master(char send) //function to write data to master
viswachaitanya 0:acc1f8a1b321 8 {
viswachaitanya 0:acc1f8a1b321 9 int acknowledge;
viswachaitanya 0:acc1f8a1b321 10 int loopvariable4=1;
viswachaitanya 0:acc1f8a1b321 11 while(loopvariable4)
viswachaitanya 0:acc1f8a1b321 12 {
viswachaitanya 0:acc1f8a1b321 13 acknowledge = slave.write(send); //sending the byte to master
viswachaitanya 0:acc1f8a1b321 14 if(acknowledge==1)
viswachaitanya 0:acc1f8a1b321 15 {
viswachaitanya 0:acc1f8a1b321 16 screen.printf(" acknowledge %d sent %x \n",acknowledge,send);
viswachaitanya 0:acc1f8a1b321 17 loopvariable4=0;
viswachaitanya 0:acc1f8a1b321 18 }
viswachaitanya 0:acc1f8a1b321 19 }
viswachaitanya 0:acc1f8a1b321 20 }
viswachaitanya 0:acc1f8a1b321 21
viswachaitanya 0:acc1f8a1b321 22
viswachaitanya 0:acc1f8a1b321 23
viswachaitanya 0:acc1f8a1b321 24
viswachaitanya 0:acc1f8a1b321 25 void FUNC_I2C_SLAVE_MAIN(int slave_address,int iterations)
viswachaitanya 0:acc1f8a1b321 26 {
viswachaitanya 0:acc1f8a1b321 27 wait(0.5);
viswachaitanya 0:acc1f8a1b321 28 screen.printf("\nSlave entered\n");
viswachaitanya 0:acc1f8a1b321 29 slave.address(slave_address); //assigning slave address
viswachaitanya 0:acc1f8a1b321 30 int Switch_Variable;
viswachaitanya 0:acc1f8a1b321 31 int ReadAddressed=1;
viswachaitanya 0:acc1f8a1b321 32 int WriteGeneral=3;
viswachaitanya 0:acc1f8a1b321 33 int loopvariable1=1;
viswachaitanya 0:acc1f8a1b321 34 int loopvariable2=0;
viswachaitanya 0:acc1f8a1b321 35 int loopvariable3=1;
viswachaitanya 0:acc1f8a1b321 36 //initialising dummy sensor data
viswachaitanya 0:acc1f8a1b321 37
viswachaitanya 0:acc1f8a1b321 38 while(loopvariable1)
viswachaitanya 0:acc1f8a1b321 39 {
viswachaitanya 0:acc1f8a1b321 40 //to read data from master
viswachaitanya 0:acc1f8a1b321 41 if(slave.receive()==WriteGeneral) //checking if slave is addressed to write
viswachaitanya 0:acc1f8a1b321 42 {
viswachaitanya 0:acc1f8a1b321 43 Switch_Variable=slave.read(); //receiving data
viswachaitanya 0:acc1f8a1b321 44 screen.printf("switch variable=%d\n",Switch_Variable);
viswachaitanya 0:acc1f8a1b321 45 slave.stop(); //reset slave to default receiving state
viswachaitanya 0:acc1f8a1b321 46 loopvariable1=0;
viswachaitanya 0:acc1f8a1b321 47 //to interpret and write data to master
viswachaitanya 0:acc1f8a1b321 48 switch(Switch_Variable)
viswachaitanya 0:acc1f8a1b321 49 {
viswachaitanya 0:acc1f8a1b321 50
viswachaitanya 0:acc1f8a1b321 51 case 1: while(loopvariable3)
viswachaitanya 0:acc1f8a1b321 52 {
viswachaitanya 0:acc1f8a1b321 53 if(slave.receive()==ReadAddressed) //check if slave is addressed to read
viswachaitanya 0:acc1f8a1b321 54 {
viswachaitanya 0:acc1f8a1b321 55 while(loopvariable2<iterations)
viswachaitanya 0:acc1f8a1b321 56 {
viswachaitanya 0:acc1f8a1b321 57 if(loopvariable2%3==0)
viswachaitanya 0:acc1f8a1b321 58 {
viswachaitanya 0:acc1f8a1b321 59 screen.printf("\nvoltage%d\n",loopvariable2/3);
viswachaitanya 0:acc1f8a1b321 60 write_to_master(Sensor.Voltage[loopvariable2/3]);
viswachaitanya 0:acc1f8a1b321 61 }
viswachaitanya 0:acc1f8a1b321 62 else if(loopvariable2%3==1)
viswachaitanya 0:acc1f8a1b321 63 {
viswachaitanya 0:acc1f8a1b321 64 screen.printf("\ncurrent%d\n",loopvariable2/3);
viswachaitanya 0:acc1f8a1b321 65 write_to_master(Sensor.Current[loopvariable2/3]);
viswachaitanya 0:acc1f8a1b321 66 }
viswachaitanya 0:acc1f8a1b321 67 else if(loopvariable2%3==2)
viswachaitanya 0:acc1f8a1b321 68 {
viswachaitanya 0:acc1f8a1b321 69 screen.printf("\ntemp%d\n",loopvariable2/3);
viswachaitanya 0:acc1f8a1b321 70 write_to_master(Sensor.Temp[loopvariable2/3]);
viswachaitanya 0:acc1f8a1b321 71 }
viswachaitanya 0:acc1f8a1b321 72 loopvariable2++;
viswachaitanya 0:acc1f8a1b321 73 }//while(loopvariable2<30)
viswachaitanya 0:acc1f8a1b321 74 slave.stop();
viswachaitanya 0:acc1f8a1b321 75 loopvariable3=0;
viswachaitanya 0:acc1f8a1b321 76 }//if(read addressed)
viswachaitanya 0:acc1f8a1b321 77
viswachaitanya 0:acc1f8a1b321 78 }//while(loopvariable3)
viswachaitanya 0:acc1f8a1b321 79
viswachaitanya 0:acc1f8a1b321 80 break;
viswachaitanya 0:acc1f8a1b321 81 case 2 : screen.printf(" telecommand 2\n");
viswachaitanya 0:acc1f8a1b321 82 break;
viswachaitanya 0:acc1f8a1b321 83
viswachaitanya 0:acc1f8a1b321 84 }//switch case ends
viswachaitanya 0:acc1f8a1b321 85 }
viswachaitanya 0:acc1f8a1b321 86 }
viswachaitanya 0:acc1f8a1b321 87 screen.printf("done");
viswachaitanya 0:acc1f8a1b321 88 }