130 lines
2.5 KiB
C++
130 lines
2.5 KiB
C++
#pragma once
|
|
//
|
|
// FILE: KT0803.h
|
|
// AUTHOR: Rob Tillaart
|
|
// VERSION: 0.3.1
|
|
// PURPOSE: Arduino Library for KT0803 and KT0803K FM transmitter
|
|
// URL: https://github.com/RobTillaart/KT0803
|
|
|
|
|
|
#include "Arduino.h"
|
|
#include "Wire.h"
|
|
|
|
|
|
#define KT0803_LIB_VERSION (F("0.3.1"))
|
|
|
|
|
|
class KT0803
|
|
{
|
|
public:
|
|
KT0803(TwoWire * wire = &Wire);
|
|
|
|
bool begin(float freq = 90.0, bool mute = true);
|
|
bool isConnected();
|
|
|
|
|
|
// FM FREQUENCY (70-108)
|
|
// KT0803 truncates to 0.1 MHz
|
|
// KT0803K (L&M) truncates to 0.05 MHz
|
|
bool setFrequency(float MHz);
|
|
float getFrequency();
|
|
|
|
|
|
// FM CHANNEL (1400-2160)
|
|
// KT0803 only supports even channels
|
|
// KT0803K (L&M) supports all channels
|
|
bool setChannel(uint16_t channel);
|
|
uint16_t getChannel();
|
|
|
|
|
|
// GAIN
|
|
bool setPGA(uint8_t pga); // 0-3 = 0..-12dB 4-7 = 0..12dB
|
|
// 111: 12dB
|
|
// 110: 8dB
|
|
// 101: 4dB
|
|
// 100: 0dB
|
|
// 000: 0dB
|
|
// 001: -4dB
|
|
// 010: -8dB
|
|
// 011: -12dB
|
|
uint8_t getPGA();
|
|
|
|
bool setRFGain(uint8_t rfgain); // 0-15
|
|
uint8_t getRFgain();
|
|
|
|
|
|
// REGION SELECTION
|
|
// first four are wrappers
|
|
void setEurope() { setPHTCNST(true); };
|
|
void setAustralia() { setPHTCNST(true); };
|
|
void setUSA() { setPHTCNST(false); };
|
|
void setJapan() { setPHTCNST(false); };
|
|
bool setPHTCNST(bool on);
|
|
bool getPHTCNST();
|
|
|
|
|
|
// PILOT TONE ADJUST (PLTADJ)
|
|
bool setPilotToneAdjust(uint8_t mode); // HIGH = 1 LOW = 0
|
|
uint8_t getPilotToneAdjust();
|
|
|
|
|
|
// MUTE software
|
|
bool setMute(bool mute); // true == muted
|
|
bool getMute(); // isMuted().
|
|
|
|
|
|
// direct access to registers - debug / develop
|
|
// to access not implemented functions.
|
|
bool writeData(uint8_t reg, uint8_t data);
|
|
int readData(uint8_t reg);
|
|
|
|
protected:
|
|
|
|
uint8_t _address = 0x3E; // fixed address for KT0803.
|
|
TwoWire * _wire = NULL;
|
|
};
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// DERIVED CLASSES
|
|
//
|
|
class KT0803K : public KT0803
|
|
{
|
|
public:
|
|
KT0803K(TwoWire * wire = &Wire);
|
|
|
|
// CHANNEL
|
|
bool setChannel(uint16_t channel);
|
|
uint16_t getChannel();
|
|
|
|
// KT0803K SPECIFIC
|
|
bool setMono();
|
|
bool setStereo();
|
|
bool isStereo();
|
|
|
|
bool setBass(uint8_t bass); // 0..3 = 0, 5, 11, 17 dB
|
|
uint8_t getBass();
|
|
|
|
bool powerOK();
|
|
bool silenceDetected();
|
|
};
|
|
|
|
|
|
class KT0803M : public KT0803K
|
|
{
|
|
public:
|
|
KT0803M(TwoWire * wire = &Wire);
|
|
};
|
|
|
|
|
|
class KT0803L : public KT0803K
|
|
{
|
|
public:
|
|
KT0803L(TwoWire * wire = &Wire);
|
|
};
|
|
|
|
|
|
// -- END OF FILE --
|
|
|