#include <Wire.h>
#include <Adafruit_Si4713.h>
#include <Adafruit_SSD1306.h>
#include <Adafruit_GFX.h>
#include <EEPROM.h>
//Adafruit_SSD1306 display(128, 64, &Wire,1);
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
//#define OLED_RESET -1 // Reset pin # (or -1 if sharing Arduino reset pin)
#define SCREEN_ADDRESS 0x3d ///< See datasheet for Address; 0x3D for 128x64, 0x3C for 128x32
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, SEEK_SET);
#define RESETPIN 12
#define stereo_RDSoff 3
#define stereo 7
#define mono 0
//void update( int idx, uint8_t val ) { EERef( idx ).update( val ); }
const int up= 2; // the number of the pushbutton pin
const int set=3;
const int dow=4; // the number of the pushbutton pin
const int KEYPin =5;
const int ledPin =11;
uint16_t frec;
uint16_t Audio;
int po,fset=0;
char ind=17;
char cl=219;
int mod;
//Adafruit_Si4713 radio = Adafruit_Si4713(RESETPIN);
void Oled() {
display.clearDisplay();
display.setTextSize(2); // Normal 1:1 pixel scale
display.setTextColor(SSD1306_WHITE); // Draw white text
display.setCursor(10,0); // Start at top-left corner
display.println(F("RDS FM TX"));
// display.setTextColor(SSD1306_BLACK, SSD1306_WHITE); // Draw 'inverse' text
// display.println(3.141592);
display.setTextSize(1); // Draw 2X-scale text
display.setTextColor(SSD1306_WHITE);
display.setCursor(10,16);
display.print(F("FREC: ")); display.print(frec/100); display.print(F("."));display.print(frec%100);
display.setTextSize(2); // Draw 2X-scale text
display.setTextColor(SSD1306_WHITE);
display.setCursor(10,35);
display.print(F("MODO: "));
if(mod==4){
display.setTextSize(2); // Draw 2X-scale text
display.setTextColor(SSD1306_WHITE,BLACK);
display.setCursor(50,35);
display.print(F("MONO "));
}
else{
display.setTextSize(2); // Draw 2X-scale text
display.setTextColor(SSD1306_WHITE,BLACK);
display.setCursor(50,35);
display.print(F("STEREO"));
}
display.display();
delay(200);
}
void MODO(int h){
// radio.setProperty(SI4713_PROP_TX_COMPONENT_ENABLE,h);
}
void Audio_DV(uint16_t h){
// radio.setProperty(SI4713_PROP_TX_AUDIO_DEVIATION,h);
}
void setup() {
// SSD1306_SWITCHCAPVCC = generate display voltage from 3.3V internally
//if(!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) {
if(!display.begin(1)) {
Serial.println(F("SSD1306 allocation failed"));
for(;;); // Don't proceed, loop forever
}
display.display();
delay(50); // Pause for 2 seconds
// Clear the buffer
display.clearDisplay();
// Draw a single pixel in white
display.drawPixel(10, 10, SSD1306_WHITE);
//EEPROM.put(60,10070);// int16
//EEPROM.write(0, 23);//int
//frec = EEPROM.read(0);//int
//EEPROM.get(60,frec);//int16
pinMode(up,INPUT_PULLUP);
pinMode(set,INPUT_PULLUP);
pinMode(dow,INPUT_PULLUP);
pinMode(ledPin, OUTPUT);
pinMode(KEYPin, OUTPUT);
EEPROM.get( 80,frec);
mod=EEPROM.read(0);
display.clearDisplay();
display.setTextSize(2); // Normal 1:1 pixel scale
display.setTextColor(SSD1306_WHITE); // Draw white text
display.setCursor(48,0); // Start at top-left corner
display.println(F("RFW"));
display.setTextSize(1); // Normal 1:1 pixel scale
display.setTextColor(SSD1306_WHITE); // Draw white text
display.setCursor(26,20); // Start at top-left corner
display.println(F("TRANSMISORES"));
display.display();
delay(3000);
if (frec>10800){
frec=10670;
Audio=6550;
po=115;
mod=4; // mod=7; --> ST mod=4; --> MONO
}
Oled();
/* radio.reset();
delay(100);
radio.begin();
delay(500);
radio.setTXpower(100); // dBuV, 88-115 max
radio.tuneFM(frec); // 100.7 mhz
radio.setRDSstation("JM RADIO");
radio.setRDSbuffer( "Que Buena Radio!");
digitalWrite(KEYPin,LOW);
*/
// stereo_RDSoff
// stereo
// mono
MODO(mod);
// Audio_DV(Audio);
}
void loop(){
if (digitalRead(set)==LOW){
fset=2;
delay(30);
fmsetup();
}
}
void fmsetup(){
while(fset==2) {
display.setTextSize(1); // Draw 2X-scale text
display.setTextColor(SSD1306_WHITE);
display.setCursor(95,16); // Start at top-left corner
display.print(ind);
display.display();
if (digitalRead(up)==LOW){
frec=frec+10;
// radio.tuneFM(frec); // 100.7 mhz
Oled();
}
if (digitalRead(dow)==LOW){
frec=frec-10;
//radio.tuneFM(frec); // 100.7 mhz
Oled();
}
if (digitalRead(set)==LOW){
EEPROM.put(80,frec);
delay(300);
display.setTextSize(1); // Draw 2X-scale text
display.setTextColor(SSD1306_WHITE,BLACK);
display.setCursor(95,16); // Start at top-left corner
display.print(F("Ok"));
display.display();
fset=4;
}
while(fset==4){
display.setTextSize(1); // Draw 2X-scale text
display.setTextColor(SSD1306_WHITE);
display.setCursor(95,25); // Start at top-left corner
display.print(ind);
display.display();
if (digitalRead(up)==LOW){
mod=7;
MODO(mod);
Oled();
}
if (digitalRead(dow)==LOW){
mod=4;
MODO(mod);
Oled();
}
if (digitalRead(set)==LOW){
EEPROM.write(0,mod);
display.clearDisplay();
Oled();
fset=6;
}
}
while(fset==6){
if (digitalRead(set)==LOW){
delay(300);
fset=2;
}
}
}
}