PU2CLR RDA5807 Arduino Library 1.0.1 Arduino Library for RDA5807 Devices - By Ricardo Lima Caratti

Functions
Basic Functions

## Functions
void | RDA5807::setI2CBusAddrs (int directAccess, int fullAccess)
| Sets alternatives I2C bus address. More...
void | RDA5807::setGpio (uint8_t gpioPin, uint8_t gpioSetup=0, int mcuPin=-1)
| Set the Device GPIO pins. More...
void | RDA5807::getStatusRegisters ()
| Gets all current device status and RDS information registers (From 0x0A to 0x0F) More...
void * | RDA5807::getStatus (uint8_t reg)
| Gets the register content of a given status register (from 0x0A to 0x0F) More...
void | RDA5807::setRegister (uint8_t reg, uint16_t value)
| Sets a given value to a specific device register. More...
void | RDA5807::waitAndFinishTune ()
| Waits for Seek or Tune finish. More...
void | RDA5807::softReset ()
| Resets the device. More...
void | RDA5807::powerUp ()
| Powers the receiver on. More...
void | RDA5807::powerDown ()
| Power the receiver off. More...
void | RDA5807::setup (uint8_t clock_type=CLOCK_32K, uint8_t oscillator_type=OSCILLATOR_TYPE_CRYSTAL)
| Starts the device. More...
void | RDA5807::setChannel (uint16_t channel)
| Sets the channel. More...
void | RDA5807::setFrequency (uint16_t frequency)
| Sets the frequency. More...
void | RDA5807::setFrequencyUp ()
| Increments the current frequency. More...
void | RDA5807::setFrequencyDown ()
| Decrements the current frequency. More...
uint16_t | RDA5807::getFrequency ()
| Gets the current frequency. More...
uint16_t | RDA5807::getRealChannel ()
| Gets the current channel stored in 0x0A status register. More...
uint16_t | RDA5807::getRealFrequency ()
| Gets the current frequency bases on the current channel. More...
void | RDA5807::seek (uint8_t seek_mode, uint8_t direction)
| Seek function. More...
void | RDA5807::seek (uint8_t seek_mode, uint8_t direction, void(*showFunc)())
| Seek function. More...
void | RDA5807::setSeekThreshold (uint8_t value)
| Sets RSSI Seek Threshold. More...
void | RDA5807::setBand (uint8_t band=1)
| Sets the FM band. See table below. More...
void | RDA5807::setSpace (uint8_t space=0)
| Sets the FM channel space. More...
int | RDA5807::getRssi ()
| Gets the current Rssi. More...
void | RDA5807::setSoftmute (bool value)
| Sets Soft Mute Enable or disable. More...
void | RDA5807::setMute (bool value)
| Sets Audio mute or unmute. More...
void | RDA5807::setMono (bool value)
| Sets audio Mono or stereo. More...
void | RDA5807::setBass (bool value)
| Sets Bass Boost. More...
bool | RDA5807::isStereo ()
| Gets the current Stereo status. More...
void | RDA5807::setVolume (uint8_t value)
| Sets the audio volume level. More...
uint8_t | RDA5807::getVolume ()
| Gets the current audio volume level. More...
void | RDA5807::setVolumeUp ()
| Increments the audio volume. More...
void | RDA5807::setVolumeDown ()
| Decrements the audio volume. More...
uint8_t | RDA5807::getDeviceId ()
| Gets the Device identification. More...
void | RDA5807::setFmDeemphasis (uint8_t de)
| Sets De-emphasis. More...

## Detailed Description

# Basic

## Function Documentation

## ◆ setI2CBusAddrs()

void RDA5807::setI2CBusAddrs | ( | int | directAccess,
|  | int | fullAccess
| ) |  |
| inline

Sets alternatives I2C bus address.

You do not need use this function on RDA5807M

Parameters

  directAccess |
  fullAccess |

References RDA5807::deviceAddressDirectAccess, and RDA5807::deviceAddressFullAccess.

## ◆ setGpio()

void RDA5807::setGpio | ( | uint8_t | gpioPin,
|  | uint8_t | gpioSetup = `0`,
|  | int | mcuPin = `-1`
| ) |  |

Set the Device GPIO pins.

This method is useful to add control to the system via GPIO RDA devive pins.

For example: You can use these pins to control RDS and SEEK via interrupt.

GPIOs are General Purpose I/O pin.

GPIO setup

When gpioPin is 1; gpioSetup can be: 00 = High impedance; 01 = Reserved; 10 = Low; 11 = High

When gpioPin is 2; gpioSetup can be: 00 = High impedance; 01 = Interrupt (INT) 10 = Low; 11 = High

When gpioPin is 2; gpioSetup can be: 00 = High impedance; 01 = Mono/Stereo indicator (ST) = Low; 11 = High

Parameters

  gpioPin | gpio number (1, 2 or 3)
  gpioSetup | See description above
  mcuPip | MCU (Arduino) pin connected to the gpio

## ◆ getStatusRegisters()

void RDA5807::getStatusRegisters | ( |  | ) |

Gets all current device status and RDS information registers (From 0x0A to 0x0F)

See also
  RDA5807M - SINGLE-CHIP BROADCAST FMRADIO TUNER; pages 5, 9, 12 and 13.
  rda_reg0a, rda_reg0b, rda_reg0c, rda_reg0d, rda_reg0e, rda_reg0f
  shadowStatusRegisters;

Referenced by RDA5807::getRdsFlagAB(), RDA5807::getRdsGroupType(), RDA5807::getRdsProgramType(), RDA5807::getRdsText(), RDA5807::getRdsText0A(), RDA5807::getRdsText2A(), RDA5807::getRdsText2B(), RDA5807::getRdsTime(), and RDA5807::getRdsVersionCode().

## ◆ getStatus()

void * RDA5807::getStatus | ( | uint8_t | reg | ) |

Gets the register content of a given status register (from 0x0A to 0x0F)

Useful when you need just a specific status register content.

This methos update the first element of the shadowStatusRegisters linked to the register

Returns
  rdax_reg0a the reference to current value of the 0x0A register.

## ◆ setRegister()

void RDA5807::setRegister | ( | uint8_t | reg,
|  | uint16_t | value
| ) |  |

Sets a given value to a specific device register.

See also
  RDA5807M - SINGLE-CHIP BROADCAST FMRADIO TUNER; pages 5, 9, 10 and 11.
  rda_reg02, rda_reg03, rda_reg04, rda_reg05, rda_reg06, rda_reg07

Parameters

  reg | register number (valid values is between 0x02 and 0x07)
  value | the unsigned 16 bits word value (see rda_rec0x data types)

## ◆ waitAndFinishTune()

void RDA5807::waitAndFinishTune | ( |  | ) |

Waits for Seek or Tune finish.

Referenced by RDA5807::seek(), and RDA5807::setChannel().

## ◆ softReset()

void RDA5807::softReset | ( |  | ) |

Resets the device.

The RDA5807M is RESET itself When VIO is Power up.

Also, it support soft reset by triggering the 0x02 register (rda_reg02) bit 1 from 0 to 1.

## ◆ powerUp()

void RDA5807::powerUp | ( |  | ) |

Powers the receiver on.

Referenced by RDA5807::setup().

## ◆ powerDown()

void RDA5807::powerDown | ( |  | ) |

Power the receiver off.

## ◆ setup()

void RDA5807::setup | ( | uint8_t | clock_type = `CLOCK_32K`,
|  | uint8_t | oscillator_type = `OSCILLATOR_TYPE_CRYSTAL`
| ) |  |

Starts the device.

Parameters

  clock_type | Clock used.
  oscillator_type | optional. Sets the Oscillator type used (Default Crystal or Ref. Clock).

References RDA5807::powerUp().

## ◆ setChannel()

void RDA5807::setChannel | ( | uint16_t | channel | ) |

Sets the channel.

This method tunes the rteceiver in a given channel.

The channel can be calculated by using the follow formula

channel = (desired frequency - start band frequency) / space channel in use / 10.0);

See also
  setFrequency, setBand, setSpace
  RDA5807M - SINGLE-CHIP BROADCAST FM RADIO TUNER - Rev.1.1–Aug.2015; pages 9 and 12.

Parameters

  channel |

References RDA5807::waitAndFinishTune().

## ◆ setFrequency()

void RDA5807::setFrequency | ( | uint16_t | frequency | ) |

Sets the frequency.

Parameters

  frequency |

## ◆ setFrequencyUp()

void RDA5807::setFrequencyUp | ( |  | ) |

Increments the current frequency.

The increment uses the band space as step. See array: uint16_t fmSpace[4] = {100/10, 200/10, 50/10, 25/10};

## ◆ setFrequencyDown()

void RDA5807::setFrequencyDown | ( |  | ) |

Decrements the current frequency.

The drecrement uses the band space as step. See array: uint16_t fmSpace[4] = {20, 10, 5, 1};

## ◆ getFrequency()

uint16_t RDA5807::getFrequency | ( |  | ) |

Gets the current frequency.

Returns
  uint16_t

## ◆ getRealChannel()

uint16_t RDA5807::getRealChannel | ( |  | ) |

Gets the current channel stored in 0x0A status register.

See also
  setChannel, setFrequency, setBand, setSpace
  RDA5807M - SINGLE-CHIP BROADCAST FM RADIO TUNER - Rev.1.1–Aug.2015; pages 9 and 12.

Returns
  uint16_t current channel value

## ◆ getRealFrequency()

uint16_t RDA5807::getRealFrequency | ( |  | ) |

Gets the current frequency bases on the current channel.

The current channel is stored in the 0x0A register. This value is updated after a tune or seek operation.

The current frequency can be calculated by the formula below

Band | Formula
--- | ---
0 | Frequency = Channel Spacing (kHz) x READCHAN[9:0]+ 87.0 MHz
1 or 2 | Frequency = Channel Spacing (kHz) x READCHAN[9:0]+ 76.0 MHz
3 | Frequency = Channel Spacing (kHz) x READCHAN[9:0]+ 65.0 MHz

See also
  setChannel, setFrequency, setBand, setSpace
  RDA5807M - SINGLE-CHIP BROADCAST FM RADIO TUNER - Rev.1.1–Aug.2015; pages 9 and 12.

Returns
  uint16_t

## ◆ seek() [1/2]

void RDA5807::seek | ( | uint8_t | seek_mode,
|  | uint8_t | direction
| ) |  |

Seek function.

Parameters

  seek_mode | if 0, wrap at the upper or lower band limit and continue seeking; 1 = stop seeking at the upper or lower band limit
  direction | if 0, seek down; if 1, seek up.

## ◆ seek() [2/2]

void RDA5807::seek | ( | uint8_t | seek_mode,
|  | uint8_t | direction,
|  | void(*)() | showFunc
| ) |  |

Seek function.

Seeks a station up or down.

Seek up or down a station and call a function defined by the user to show the frequency during the seek process.

Seek begins at the current channel, and goes in the direction specified with the SEEKUP bit. Seek operation stops when a channel is qualified as valid according to the seek parameters, the entire band has been searched (SKMODE = 0), or the upper or lower band limit has been reached (SKMODE = 1).

The STC bit is set high when the seek operation completes and/or the SF/BL bit is set high if the seek operation was unable to find a channel qualified as valid according to the seek parameters. The STC and SF/BL bits must be set low by setting the SEEK bit low before the next seek or tune may begin.

The SEEK bit is set low and the STC bit is set high when the seek operation completes.

It is important to say you have to implement a show frequency function. This function have to get the frequency via getFrequency function.

Example:

SI470X rx;
void showFrequency() {
uint16_t freq = rx.getFrequency();
Serial.print(freq);
Serial.println("MHz ");
}
void loop() {
.
.
rx.seek(SI470X_SEEK_WRAP, SI470X_SEEK_UP, showFrequency); // Seek Up
.
.
}

Parameters

  seek_mode | Seek Mode; 0 = Wrap at the upper or lower band limit and continue seeking (default); 1 = Stop seeking at the upper or lower band limit.
  direction | Seek Direction; 0 = Seek down (default); 1 = Seek up.
  showFunc | function that you have to implement to show the frequency during the seeking process. Set NULL if you do not want to show the progress.

References RDA5807::waitAndFinishTune().

## ◆ setSeekThreshold()

void RDA5807::setSeekThreshold | ( | uint8_t | value | ) |

Sets RSSI Seek Threshold.

Parameters

  value |

## ◆ setBand()

void RDA5807::setBand | ( | uint8_t | band = `1` | ) |

Sets the FM band. See table below.

FM band table

Value | Description
--- | ---
00 | 87–108 MHz (US/Europe)
01 | 76–91 MHz (Japan)
10 | 76–108 MHz (world wide)
11 | 65 –76 MHz (East Europe) or 50-65MHz (see bit 9 of gegister 0x06)

Parameters

  band | FM band index. See table above.

## ◆ setSpace()

void RDA5807::setSpace | ( | uint8_t | space = `0` | ) |

Sets the FM channel space.

Channel space table

Value | Description
--- | ---
00 | 100KHz
01 | 200KHz
10 | 50KHz
11 | 25KHz

Parameters

  space | FM channel space. See table above.

## ◆ getRssi()

int RDA5807::getRssi | ( |  | ) |

Gets the current Rssi.

RSSI; 000000 = min; 111111 = max; RSSI scale is logarithmic.

Returns
  int

## ◆ setSoftmute()

void RDA5807::setSoftmute | ( | bool | value | ) |

Sets Soft Mute Enable or disable.

Parameters

  value | true = enable; false=disable

## ◆ setMute()

void RDA5807::setMute | ( | bool | value | ) |

Sets Audio mute or unmute.

Parameters

  value | TRUE = mute; FALSE = unmute

## ◆ setMono()

void RDA5807::setMono | ( | bool | value | ) |

Sets audio Mono or stereo.

Parameters

  value | TRUE = Mono; FALSE force stereo

## ◆ setBass()

void RDA5807::setBass | ( | bool | value | ) |

Sets Bass Boost.

Parameters

  value | FALSE = Disable; TRUE = Enable

## ◆ isStereo()

bool RDA5807::isStereo | ( |  | ) |

Gets the current Stereo status.

Returns
  TRUE if stereo;

## ◆ setVolume()

void RDA5807::setVolume | ( | uint8_t | value | ) |

Sets the audio volume level.

Parameters

  value |

## ◆ getVolume()

uint8_t RDA5807::getVolume | ( |  | ) |

Gets the current audio volume level.

Returns
  uint8_t 0 to 15

## ◆ setVolumeUp()

void RDA5807::setVolumeUp | ( |  | ) |

Increments the audio volume.

## ◆ setVolumeDown()

void RDA5807::setVolumeDown | ( |  | ) |

Decrements the audio volume.

## ◆ getDeviceId()

uint8_t RDA5807::getDeviceId | ( |  | ) |

Gets the Device identification.

Todo:

Returns
  number

## ◆ setFmDeemphasis()

void RDA5807::setFmDeemphasis | ( | uint8_t | de | ) |

Sets De-emphasis.

75 μs. Used in USA (default); 50 μs. Used in Europe, Australia, Japan.

Parameters

  de | 0 = 75 μs; 1 = 50 μs