まずは現状のコードの問題点を修正しましょう。
まず、このセンサーのアドレスは「8bit」ではなく「7bit+R/Wビット」なので、
センサーのアドレス0x29にRead(1)/Write(0)を加えて、
Writeは0x52、Readは0x53です。
0x29と0x2Aでは2ビット異なってしまい、おかしいと考えられるでしょう。
次に、
コード:
i2c_start(); //START CONDITION
i2c_write(sensor_Write_address); //SLAVE ADDRESS (0x29)
i2c_write(0x00|0x80); //COMMAND BIT (0x80)
i2c_write(0x13); //DATA BIT (STATUS REGISTER 0x13)
i2c_stop(); //STOP CONDITION
という部分のコメントが不適切です。
0x00はSTATUSではなくENABLEであり、0x13はSTATUSレジスタに書き込む値です。
(この下に並んでいる他のレジスタに書き込む部分のコメントでは、正しい名前が書かれているようです)
0x13はAIEN、AEN、PONをオンにする値であり、間違ってはいないでしょう。
ただ、下の部分に「ENABLE WLONG (0x00)」とありますが、
自分の解釈ではWLONGを有効にするには0x02にするべきだと思います。
さらに、Read_Colour_Sensor関数が途中で途切れているようです。
C言語で関数の中にネストして関数を定義するのはGCC拡張なので、
次の関数(SetupLCD関数)の定義を開始する前に
Read_Colour_Sensor関数の本体のブロックを閉じるべきでしょう。
-----------------------------------------------------------------------
次に、RGBの数値を読み取る部分を作りましょう。
連続で読み込むモードを利用して、例えばこのような感じになると思います。
(コンパイル・テストはしていないので、間違っているかも知れません)
コード:
void Read_RGB(unsigned int* r, unsigned int* g, unsigned int* b){
unsigned int tmp;
i2c_start(); //MASTER TO SLAVE
i2c_write(sensor_Write_address); //SLAVE ADDRESS (0x29)
i2c_write(0x16|0x20|0x80); //RDATAL REGISTER (0x16),AUTO INCREMENT
i2c_start(); //START CONDITION
i2c_write(sensor_Read_address); //READ
tmp = i2c_read(); //RDATAL REGISTER
*r = (tmp<<8)|i2c_read(); //RDATAH REGISTER
tmp = i2c_read(); //GDATAL REGISTER
*g = (tmp<<8)|i2c_read(); //GDATAH REGISTER
tmp = i2c_read(); //BDATAL REGISTER
*b = (tmp<<8)|i2c_read(); //BDATAH REGISTER
i2c_stop(); //STOP CONDITION
}
-----------------------------------------------------------------------
そうしたら、読み取った数値を数字としてprintする部分を作りましょう。
fprintf関数で%uなどの書式を使うことで、printできると予想できます。
LCDのカーソルを移動するコマンドなども必要かもしれません。
「RGBセンサーから値を読み取る→読み取った値をprintする→適当な時間待つ」
をループで回すようにするといいでしょう。