i2c master header file

Dependencies:   mbed

master.cpp

Committer:
viswachaitanya
Date:
2014-06-30
Revision:
0:7811fb22b3de

File content as of revision 0:7811fb22b3de:

#include "master.h"

float receive_byte()                            //function to read and print the data received         
{
     union join
       {
         char byte[4];                          //array containing individual bytes
         float number;                          //floating point number to be appended
       }append;
    float value;
    append.byte[0]=master.read(1);              //reading individual bytes and storing it in array  
    pc.printf("\n(1) %x\n",append.byte[0]);
    append.byte[1]=master.read(1);
    pc.printf("(2) %x\n",append.byte[1]);
    append.byte[2]=master.read(1);
    pc.printf("(3) %x\n",append.byte[2]);
    append.byte[3]=master.read(1);
    pc.printf("(4) %x\n",append.byte[3]);
    value = append.number;
    return(value);                             //returning the 4 byte floating point number  
}

void FUNC_I2C_MASTER_MAIN()
{
    int acknowledge;
    int loopvariable1=1,loopvariable2=0;
    while(loopvariable1)
    {
    //writing the command to slave        
        master.frequency(100000);               //set clock frequency
        master.start();                         //initiating the data transfer
        master.write(addr|0x00);                //addressing the slave to write
        acknowledge=master.write(get_hk_data);                  //sending the command to slave 
        if(acknowledge==1)
           {
               pc.printf("acknowledge=%d\n",acknowledge);
               loopvariable1=0;                                    //if acknowledged, breaking loop in next iteration
    //reading 4 byte data from slave          
               while(loopvariable2<30)
                 {
                    master.frequency(100000);               //set clock frequency 
                    master.start();                         //initiate data transfer 
                    acknowledge = master.write(addr | 0x01);       //addressing the slave to read
                    if(acknowledge==1)
                       {   
                          //pc.printf("enter\n");
                          if(loopvariable2%3==0)
                            {
                              Sensor.voltage[loopvariable2/3] =  receive_byte();                            //receiving data if acknowledged
                              pc.printf(" voltage%d = %f\n",loopvariable2/3,Sensor.voltage[loopvariable2/3]);
                            }
                          else if(loopvariable2%3==1)
                            {  
                              Sensor.current[loopvariable2/3] =  receive_byte();                            //receiving data if acknowledged
                              pc.printf(" current%d = %f\n",loopvariable2/3, Sensor.current[loopvariable2/3]);
                            }
                          else if(loopvariable2%3==2)
                            {
                              Sensor.temp[loopvariable2/3] =  receive_byte();                            //receiving data if acknowledged
                              pc.printf(" temperature%d = %f\n",loopvariable2/3,Sensor.temp[loopvariable2/3]);
                            }
                          
                          loopvariable2++;
                        }//if(acknowledge==1)
                 } //while(loopvariable2<30)
              master.stop();
           }//if(acknowledge==1)    
     }//while(loopvariable1)
   pc.printf("done");
}//main