RDA5807M FM RDS radio program using 4DSystems 32028 Oled touch screen display. Search and direct frequency selection, RDS text, 10 preset memories

Dependencies:   4Dsystems_uOLED-32028-P1T RDA5807M FreescaleIAP mbed-src

/media/uploads/star297/fm_radio.jpg

main.cpp

Committer:
star297
Date:
2015-03-31
Revision:
0:879245ce9cdb
Child:
1:365082270f1a

File content as of revision 0:879245ce9cdb:

#include "mbed.h"
#include "RDA5807M.h"
#include "OLED32028P1T.h"

RDA5807M radio(p9, p10, 0x22);        // sda - scl

OLED32028P1T oled(p28, p27, p29);   // Oled Display tx, rx, rs
I2C i2c(p9, p10);

DigitalOut myled(LED1);

void readdata() // Extra read and print data function for checking, not actually used for anything. 
{       
        oled.locate(0,6);
        int i;
        char rcv[12];
        i2c.read(0x20, rcv,12);   // read 12 bytes for reg 0x0A .. reg 0x0F 
        for(i=0; i<6; i++){
             oled.printf("  register:  %X =  %0X   \n", i + 0x0A, (rcv[i *2] << 8) | rcv [(i*2) +1] );
            }
}

int main() {
    
    oled.init();
    oled.clear();
    oled.drawText(0,0,(FONT12X16)," -- RDA5807m FM Radio --",oled.toRGB(0,255,0));
    oled.setTextBackgroundType (TEXT_OPAQUE);
    oled.setFontSize(FONT12X16);oled.locate(2,2);
    oled.setFontColor(oled.toRGB(255,255,255));
        
    i2c.frequency(400000);

    radio.Reset();      // reset and power up radio chip
    
    radio.RDS();        // switch on RDS 
    
    radio.Volume(2);    // set volume
    
    while(1) {          // Continuous tune test.
        myled = !myled;
        
        radio.SeekUp(); // start seek tuning and stop when signal found (loops at end of range, 108MHz)         
        
        wait(1);        // Allow station find.
        
        radio.Read();   // Read Registers for frequency, signal level and RDS data, etc  
        
        oled.locate(2,2);
        oled.printf("Frequency: %3.2f MHz  \n",radio.freq/1000);        
        oled.printf("  Signal Level: %d   \n",radio.signal);
        if (radio.stereo == 1){oled.printf("  Stereo");}
            else {oled.printf("  Mono  ");}
        
        readdata();     // Read registers (for testing)
        wait(3);
    }
}