Files
2014-11-07 02:05:44 +01:00

92 lines
3.0 KiB
Arduino

/***************************************************
* Radio met analoge afstemming en LCD
*
* Radio op basis van de (Philips) TEA5767 met een
* LCD voor informatie-weergave. Afstemming gaat met
* een potentiometer wat de afstemming dus analoog
* maakt.
*
* Gebruikte libraries:
* TEA5767 FM Radio Library for Arduino by Simon Monk
* New LiquidCrystal by fmalpartida
***************************************************/
#include <Wire.h>
#include <TEA5767Radio.h>
#include <LiquidCrystal_I2C.h>
// Onderstaand zijn de gegevens van het door mij gebruikte LCD en IIC-module
#define I2C_ADDR 0x27 // IIC-adres van het LCD
#define BACKLIGHT_PIN 3
#define En_pin 2
#define Rw_pin 1
#define Rs_pin 0
#define D4_pin 4
#define D5_pin 5
#define D6_pin 6
#define D7_pin 7
// Initialisitie van de FM-module
TEA5767Radio radio = TEA5767Radio();
// Initialisitie van lcd
LiquidCrystal_I2C lcd(I2C_ADDR,En_pin,Rw_pin,Rs_pin,D4_pin,D5_pin,D6_pin,D7_pin);
#define freqPot A0 // Analoge pin voor de potmeter ten behoeve van de afstemming
int freqPotValue; // Waarde van de Potentiometer in 0 tot 1023
float freq; // Frequentie (uiteindelijke frequentie x 10)
int previousFreq; // Laatste gekozen frequentie
// Veelgebruikte gegevens
int freqMin = 760; // Laagste frequentiekeuze x10
int freqMax = 1080; // Hoogste frequentiekeuze x10
void setup()
{
Wire.begin();
lcd.begin(16, 2); // Type LCD (16x2) opgeven.
lcd.setBacklightPin(BACKLIGHT_PIN,POSITIVE); // Pin achtergrondverlichting LCD zetten.
lcd.setBacklight(HIGH); // Achtergrondverlichting LCD aanzetten.
}
void loop()
{
// Uitlezen potmeter
freqPotValue = analogRead(freqPot);
// Potmeter waarde (0 - 1023) omzetten in een frequentie (76MHz - 108MHz)
// De frequentiewaarde is x 10 om ook de waarde achter de punt te bepalen.
// De map-functie kent alleen integere getallen.
// De potmeter komt nooit helemaal op 0 of 1023. Hierom zijn de eerste en laatste 32 stappen vervallen.
// berekening: 1080-760 = 320
// 1024/320 = 3,2 -> 3
// 320x3 = 960
// 1024-960 = 64
// 64/2 = 32
// Met deze berekening delen steeds 3 potmeterwaarden 1 frequentie. Hierdoor voelt de afstemming ook beter aan
// en zijn de stappen consequent.
freq = map(freqPotValue, 31, 991, freqMin, freqMax);
//Zorgen dat freq niet onder freqMin of boven freqMax komt.
if (freq < freqMin) {
freq = freqMin;
} else if (freq > freqMax) {
freq = freqMax;
}
// Frequentie alleen verzenden naar de TEA5767 als er daadwerkelijk een nieuwe is geselecteerd.
if (previousFreq != freq){
lcd.setCursor(0, 0); // Cursor LCD op positie 1 van regel 1.
lcd.print("FM "); // tekst FM weergeven.
lcd.print(freq/10); // de frequentie in zijn uiteindelijk vorm weergeven.
// Frequentie naar de TEA5767 verzenden.
radio.setFrequency(freq/10);
}
// Kleine pauze toepassen.
delay(10);
}