How to read data from sensor by using I2C

hello all,
i’m beginner at atmega so i want to know how to use I2C in order to get data from sensor and post it to the uart.

please ! here is my main program:
`
int main(void)

{

unsigned char ret;
DDRG |=(1<<PG2); // use pins 2 on port G for output

// (active low LED’s )
DDRD |=(1<<PD0);
DDRD |=(1<<PD1);
PORTD |=(1<<PD0);
PORTD |=(1<<PD1);

i2c_init(); // init I2C interface

USART_Init(MYUBRR);
char c,k=‘U’ ;
int dec;
while(1)
{
for(c=‘a’;c<=‘z’;c++) USART_Transmit©;
// PORTG |=(1<<PG2);
/* write 0x75 to eeprom address 0x05 (Byte Write) */

ret = i2c_start(ShT21+I2C_WRITE); // set device address and write mode

if ( ret ) {

/* failed to issue start condition, possibly no device found */

i2c_stop();
PORTG &=~(1<<PG2); // desactivate all 8 LED to show error */
}
else {
PORTG |=(1<<PG2); // output byte on the LED’s
_delay_ms(1000);

/* issuing start condition ok, device accessible */

i2c_write(0xE6); // write address = E6 temperature
i2c_write(0xE3); // ret=0 -> Ok, ret=1 -> no ACK

i2c_stop(); // set stop conditon = release bus

/* write ok, read value back from eeprom address 0x05, wait until
the device is no longer busy from the previous write operation */

i2c_start_wait(ShT21+I2C_WRITE); // set device address and write mode

i2c_write(0xE6); // write address = E6

i2c_rep_start(ShT21+I2C_READ); // set device address and read mode

ret = i2c_readNak(); // read one byte
PORTG &=~(1<<PG2);
// _delay_ms(1000);
i2c_stop();

USART_Transmit(printf("%d",ret));
// dec=convToDec(ret);
// USART_Transmit(printf("%d",dec));

}
//twi_match_write_slave();

} }`

Post duplication: http://forums.electricimp.com/discussion/1108/i2c-read-data-from-sensor-sht21#Item_4

You’re posting to the wrong forum. This forum is not about ATmega, but about electric imp. These are two totally different platforms using different programming languages. For help on ATmega problems, I suggest you visit http://www.avrfreaks.net/