FM-Radio med Si4703 Breakout styrelsen, LCD och Arduino (7 / 9 steg)
Steg 7: Arduino kodning
Denna kod som jag skrev är ganska rakt fram. När du slår på radion genom att ansluta Arduino till makt, är radion inställd på en uppsättning station som frekvens visas på LCD-skärmen tillsammans med orden "FM-Radio". Från denna punkt, kan du använda de tuner + eller tuner - momentan tryckknapparna att hitta önskad station och titta på den uppdatera på LCD.
Som jag har flera ingångar till min jukebox, bestämde jag mig att ha Si4703 breakout styrelsen satt till en viss volym och jag kunde justera volymnivån för mina högtalare med knapparna på frontpanelen på jukeboxen bredvid knapparna tuner. Du kan enkelt lägga till ett par mer momentan tryckknappar till Arduino att styra volymen för radio modulen själv dock.
Så jag tror det är de grundläggande funktionerna i koden förklaras, är här den faktiska Arduino koden ändå:
BÖRJAN AV KOD
/*
Krets:
LCD (Jaycar artikelnummer QP5520)
* RS stift till digital stift 8
* Aktivera stift till digital pin 9
* DB4 stift till digital stift 4
* DB5 stift till digital stift 5
* DB6 stift till digital stift 6
* DB7 stift till digital stift 7
R/W pinnen till jord
* VSS pinnen till jord
* VDD stift till 5V
* VO pinnen till jord
* A(+) stift till 5V via 220 ohm motstånd [LCD backlight]
* K(-) stift till marken [LCD backlight]
Si4703 breakout styrelse
* SDIO stift till analoga stift 4 (Via logik nivå Converter) gul tråd
* SCLK stift till analoga stift 5 (Via logik nivå Converter) blå tråd
* FÖRSTA stift till digital stift 2 (Via logik nivå Converter) vit tråd
* GND marken
* + 3,3 v till 3.3V
Logik nivå Converter
* HV till 5V
* LV till 3.3V
* HV1 till Arduino analog pinne 4
* LV1 till Si4703 SDIO stift
* HV2 till Arduino analoga stift 5
* LV2 till Si4703 SCLK stift
* HV3 till Arduino digital stift 2
* LV3 till Si4703 första stift
* GNDS till GNDS
Tillfällig (N/O) tryckknapp ingångar (Jaycar artikelnummer SP0716)
* Tillfällig tryckknapp 1 + 5V___button___digital pin 10 (söka ner) med 10kohm pull down motstånd till jord
* Tillfällig tryckknapp 2 + 5V___button___digital stift 11 (söka upp) med 10kohm dra ner motstånd till jord * /
inkludera bibliotek-koden:
#include "<" LiquidCrystal.h">"
#include "<" Si4703_Breakout.h">"
#include "<" Wire.h">"
definiera stiften för LCD
int RS = 8.
int E = 9.
int DB4 = 4;
int DB5 = 5;
int DB6 = 6;
int DB7 = 7.
definiera stiften för Si4703
int resetPin = 2;
int SDIO = A4;
int SCLK = A5;
definiera stiften för tryckknapparna seek
int channelDown = 10;
int channelUp = 11;
initiera bibliotek med numrerar av gränssnittet stiften
LCD initiering
LiquidCrystal lcd (RS, E, DB4, DB5, DB6, DB7);
Si4703 initiering
Si4703_Breakout radio (resetPin, SDIO, SCLK);
Definiera variablerna för radio
int kanal;
int volym;
void setup()
{
definiera tryckknapp pins som insatsvaror
pinMode(channelDown,INPUT);
pinMode(channelUp,INPUT);
Delay(1000); fördröjning för att ta hänsyn för att driva upp av Arduino och lag att få LCD kör
Ange den LCD antal kolumner och rader:
LCD.BEGIN (16, 2);
slå på radion och ställa in volymen till en önskad nivå
radio.powerOn();
radio.setVolume(15); mellan 0 och 15
ställa in radion på en standard frekvens (Nova 96,9 MHz FM)
kanal = 969;
radio.setChannel(channel);
Visa en titel "FM-Radio" på rad 0 av LCD, centrerad
(Obs: linje 1 är den andra raden, sedan räknar börjar med 0):
lcd.setCursor(0,0);
LCD.Print ("FM-Radio"). Visa kanalfrekvensen på LCD: N centrerad
lcd.setCursor(0,1);
LCD.Print ("96,9 MHz");}
void loop()
{
Kontrollera om knappen channelUp har tryckt, så söka upp för en kanal
om (digitalRead(channelUp) == hög)
{
kanal = radio.seekUp();
updateLCD();
}
Kontrollera om knappen channelDown har tryckt, så söker en kanal
annat if (digitalRead(channelDown) == hög)
{
kanal = radio.seekDown();
updateLCD();
}
}
void updateLCD()
{
konvertera kanalen som heltal till en sträng att lägga till decimaler och "MHz" innan visas på LCD-
String channelString = String(channel);
Sträng frekvens;
om (channelString.length() == 3) //if frekvensen är 3 siffror, placera ett decimaltecken efter den andra siffran
{
frekvens = channelString.substring(0,2) + "." + channelString.substring(2) + "MHz";
}
annat if (channelString.length() == 4) //if frekvensen är 4 siffror, placera ett decimaltecken efter den tredje siffran
{
frekvens = channelString.substring(0,3) + "." + channelString.substring(3) + "MHz";
}
först ta bort linje 1 som konto för övergången mellan 3 och 4 siffriga frekvenser
lcd.setCursor(0,1);
LCD.Print("");
uppdateringsfrekvens på LCD
lcd.setCursor(4,1);
LCD.Print(Frequency);
}
SLUTET AV KODEN
Jag har läst att breakout styrelsen också få annan information som låten namn, men jag har inte hittat mycket mer information om detta och när jag försökte RDS, ingenting hände. Det skulle vara häftigt att ta bort raden "FM-Radio" från LCD och ersätta den med namnet på låten som spelar för närvarande för en uppdatering av detta projekt. Om någon vet hur man gör detta eller kan dela viss information, skulle jag älska att höra från dig!