Advertisement
Guest User

Arduino FM radio

a guest
Feb 18th, 2020
153
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.19 KB | None | 0 0
  1. #include <Arduino.h>
  2. #include <EEPROMVar.h>
  3. #include <EEPROMex.h>
  4. #include <Wire.h>
  5. #include <TEA5767.h>
  6. #include <Encoder.h>
  7.  
  8. #define INT1 2 //Interrupt 1 encoder rotativo tuning
  9. #define INT2 3 //Interrupt 2 encoder rotativo tuning
  10. #define INT3 18 //Interrupt 1 encoder rotativo fine-tuning
  11. #define INT4 19 //Interrupt 2 encoder rotativo fine-tuning
  12. #define INT5 20 // Promemoria penultimo
  13. #define INT6 21 // e ultimo interrup restanti
  14. #define BUT1 7 // Pulsante del tuning
  15. #define BUT2 17 // Pulsante del fine tuning
  16. #define PWM1 6 // Valore 1-255 in uscita pwm per volmetro a 5V
  17. #define MOLTIPLICATORE 9 // Valore per incrementare da 0v a 5v la frequenza FM su PWM1
  18. #define FIX_BAND RADIO_BAND_FM
  19.  
  20. TEA5767 radio = TEA5767();
  21. Encoder knobtune(INT1, INT2);
  22. Encoder knobfine(INT3, INT4);
  23.  
  24. float frequenza; // = 10660; //Radio Rock!
  25. int indiceLettura = 2;
  26. int indiceScrittura;
  27.  
  28. long positiontune;
  29. long positionfine;
  30.  
  31. void setup() {
  32. delay(1000);
  33. Serial.begin(115200);
  34. pinMode(PWM1, OUTPUT);
  35. Wire.begin();
  36. radio.init();
  37. radio.setMono(false);
  38. radio.setMute(false);
  39. indiceScrittura = EEPROM.readInt(0);
  40. leggiEeprom();
  41. frequenza = constrain(frequenza, 8750, 10850);
  42. radio.setBandFrequency(FIX_BAND, frequenza);
  43. mostraFreqenza();
  44. positiontune = knobtune.read();
  45. positionfine = knobfine.read();
  46. }
  47.  
  48. void(* Riavvia)(void) = 0;
  49.  
  50. void aggiornaFrequenza()
  51. {
  52. radio.setBandFrequency(FIX_BAND, frequenza);
  53. mostraFreqenza();
  54. memorizzaSuEeprom();
  55. }
  56.  
  57. void memorizzaSuEeprom()
  58. {
  59. EEPROM.writeFloat(indiceScrittura, frequenza);
  60. delay(5);
  61. }
  62.  
  63. void leggiEeprom()
  64. {
  65. frequenza = EEPROM.readFloat(indiceLettura);
  66. delay(5);
  67. if (frequenza <= 8750 && frequenza >= 10850)
  68. frequenza = 10660;
  69. aggiornaFrequenza();
  70.  
  71. }
  72.  
  73. void cancellaEprom()
  74. {
  75. EEPROM.writeInt(0, 2);
  76. delay(10);
  77.  
  78. for (int i = 2; i < 1024; i++)
  79. {
  80. EEPROM.writeInt(i, 0);
  81. delay(5);
  82. }
  83. Riavvia();
  84. }
  85.  
  86. void mostraFreqenza(){
  87. float v_out= frequenza-8750;
  88.  
  89. v_out = v_out/MOLTIPLICATORE;
  90. analogWrite(PWM1,v_out);
  91. }
  92.  
  93. void loop() {
  94. long tune, fine;
  95. int sbut1,sbut2;
  96.  
  97. sbut1 = digitalRead(BUT1);
  98. sbut2 = digitalRead(BUT2);
  99.  
  100. //if (sbut1 == LOW) radio.seekDown(true);
  101. //if (sbut2 == LOW) radio.seekUp(true);
  102. if ((sbut1 == LOW) && (sbut2 == LOW)) cancellaEprom(); //Riavvia();
  103. //Controllo Tune
  104. tune = knobtune.read();
  105. if (tune != positiontune){
  106. if (tune < positiontune) frequenza=frequenza+25;
  107. if (tune > positiontune) frequenza=frequenza-25;
  108. positiontune = tune;
  109. frequenza = constrain(frequenza, 8750, 10850);
  110. aggiornaFrequenza();
  111. }
  112. //Controllo FineTune
  113. fine = knobfine.read();
  114. if (fine != positionfine){
  115. if (fine < positionfine) frequenza=frequenza+5;
  116. if (fine > positionfine) frequenza=frequenza-5;
  117. positionfine = fine;
  118. frequenza = constrain(frequenza, 8750, 10850);
  119. aggiornaFrequenza();
  120. }
  121.  
  122. // Spazio per debug information su seriale
  123. /*
  124. Serial.print("Tune = ");
  125. Serial.print(sbut1);
  126. Serial.print(", Fine = ");
  127. Serial.print(fine);
  128. Serial.print("freq = ");
  129. Serial.print(frequenza);
  130. Serial.println();
  131. */
  132. delay(300);
  133.  
  134. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement