#include unsigned char freqH = 0, freqL = 0, c, i; unsigned int frequencyB, freq, freqB; // double frequency = 0; void setup() { Wire.begin(); freq = 892; // 89.2 MHz freqB = freq - 870; freqH = freqB>>2; freqL = (freqB&3)<<6; // Shift channel selection for matching register 0x03 Serial.begin(9600); Wire.beginTransmission(0x11); // Device address 0x11 (random access) Wire.write(0x02); // Register address 0x02 Wire.write(0xC0); Wire.write(0x03); // write 0xC002 into Reg.3 (soft reset, enable) Wire.endTransmission(); // stop condition delay(500); // wait 500ms Wire.beginTransmission(0x11); Wire.write(0x02); Wire.write(0xC0); Wire.write(0x0D); // write 0xC00D (RDS on etc.) into 0x02 Wire.endTransmission(); delay(500); Wire.beginTransmission(0x11); Wire.write(0x03); Wire.write(freqH); // write frequency into bits 15:6, set tune bit Wire.write(freqL + 0x10); Wire.endTransmission(); } // LOOP is optional for accessing RDS raw data, leave emoty if not required void loop() { Wire.beginTransmission(0x11); // Device 0x11 for random access Wire.write(0x0C); // Adress 0x0C Wire.endTransmission(0); // restart condition Wire.requestFrom(0x11, 8, 1); // Retransmit device address with READ, followed by 8 bytes c = Wire.read(); if (c <= 0x0F) Serial.print("0"); // print PI high byte Serial.print(c, HEX); c = Wire.read(); if (c <= 0x0F) Serial.print("0"); // print PI low byte Serial.print(c, HEX); Serial.print(" "); c = Wire.read(); if (c <= 0x0F) Serial.print("0"); // print block B (PTY, TP and GT) high byte Serial.print(c, HEX); c = Wire.read(); if (c <= 0x0F) Serial.print("0"); // and low byte Serial.print(c, HEX); Serial.print(" "); Serial.write(Wire.read()); // print content of block C and D (4 bytes) Serial.write(Wire.read()); Serial.write(Wire.read()); Serial.write(Wire.read()); Serial.print("\r\n"); Wire.endTransmission(); // stop condition }