Arduino Radio 20x4

Transmisor con PLL Si4713 y Arduino, el código  compartido diseñado por JM Transmisores, usando las librerías disponibles en Arduino ID  la del módulo Si4713 y la pantalla Alfanumérico 20x4, compatible con todas las versiones Arduino como Arduino UNO y Arduino nano. 







Vídeo Test en Arduino nano



///////////////////////////////////////////////////////////////////////////////////
//                                                                           //
//                      APORTE DE JM TRASNMISORES                            //
// https://proyectosjmtransmissores.blogspot.com/2024/03/arduino-radio-20x4.html //
//                                                                           //
///////////////////////////////////////////////////////////////////////////////////

#include <Wire.h>
#include <Adafruit_Si4713.h>
#include <LiquidCrystal.h>
#include <EEPROM.h>
const int rs = 33, en = 31, d4 = 29, d5 = 27, d6 = 25, d7 = 23;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
#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= 4;  // the number of the pushbutton pin
const int set=3;
const int dow=2;  // 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=127;
char cl=219;
int  mod;
Adafruit_Si4713 radio = Adafruit_Si4713(RESETPIN);

void plcd() {
   lcd.setCursor(0, 0);
   lcd.print("  JM TRANSMISORES");


   lcd.setCursor(0, 1);
   lcd.print("FREQ: ");
   lcd.print( frec/100); lcd.print("."); lcd.print(frec%100);
   
   lcd.setCursor(20, 0);
   lcd.print("MODO: ");    

  if(mod==4){
   lcd.setCursor(26, 0);
   lcd.print("MONO   ");    
  }
  else{
   lcd.setCursor(26, 0);
   lcd.print("ESTEREO");  
  }    
  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() {

  lcd.begin(20, 4);
  lcd.print("si4713");
 
  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);      

  delay(2000);

  if (frec>10800){
  frec=10070;
  Audio=6550;
  po=115;
  mod=7;    
  }
 
  plcd();
  radio.reset();
  delay(100);  
  radio.begin();
  delay(500);

  radio.setTXpower(115);  // 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(300);
    fmsetup();          
  }    
}

void fmsetup(){
  while(fset==2) {  
   lcd.setCursor(14,1);
   lcd.print(ind);            
           
    if (digitalRead(up)==LOW){
      frec=frec+10;
      radio.tuneFM(frec); // 100.7 mhz
      plcd();              
    }
 
    if (digitalRead(dow)==LOW){
      frec=frec-10;
      radio.tuneFM(frec); // 100.7 mhz
      plcd();        
     }    
    if (digitalRead(set)==LOW){    
      EEPROM.put(80,frec);  
      delay(300);

      fset=4;                        
     }      
  while(fset==4){
       lcd.setCursor(14,1);
   lcd.print(" ");
   lcd.setCursor(34,0);
   lcd.print(ind);  
 
   
    if (digitalRead(up)==LOW){
      mod=7;
      MODO(mod);
      plcd();              
    }
 
    if (digitalRead(dow)==LOW){
      mod=4;
      MODO(mod);
      plcd();        
     }
   
    if (digitalRead(set)==LOW){    
      EEPROM.write(0,mod);  
      lcd.setCursor(34,0);
      lcd.print(" ");
      //plcd();    
      fset=6;
     delay(300);                                
     }              
  }
  while(fset==6){
      if (digitalRead(set)==LOW){
        delay(300);
        fset=2;              
      }              
    }        
  }
}  
 

 

Comentarios