Stap 7: Arduino codering
Deze code die ik schreef is vrij ongecompliceerd. Wanneer u de radio inschakelt door het aansluiten van de Arduino aan de macht, is de radio afgestemd op een set station waarvan frequentie wordt weergegeven op het LCD-scherm samen met de woorden "FM Radio". Vanaf dit punt kunt u de tuner + of tuner - kortstondige drukknoppen de gewenste zender zoeken en bekijken op het LCD-scherm bijwerken.
Ik heb verschillende audio-ingangen voor mijn jukebox, heb ik besloten om de Si4703 breakout board ingesteld op een bepaald volumeniveau en ik kon het aanpassen van het volume van mijn speakers met behulp van drukknoppen op het voorpaneel van de jukebox naast de tuner-knoppen. U kunt gemakkelijk een paar meer kortstondige drukknoppen toevoegen aan de Arduino controle van het volume van de radio module zelf wel.
Dus ik denk dat de basisfunctionaliteit van het Wetboek uitgelegd, is hier de werkelijke code van de Arduino wel:
BEGIN VAN DE CODE
/*
Het circuit:
LCD (Jaycar onderdeelnummer QP5520)
* RS pin naar digitale pin 8
* Laat speld aan digitale pin 9
* DB4 pin naar digitale pin 4
* DB5 aan digitale pin 5 vastmaken
* DB6 pin naar digitale pin 6
* DB7 pin naar digitale pin 7
* R/W pen op grond
* VSS pin op grond
* De VDD pin naar 5V
* VO pin op grond
* A(+) pin naar 5V via weerstand van 220 ohm [LCD-achtergrondverlichting]
* K(-) pin op grond [LCD-achtergrondverlichting]
Si4703 breakout board
* SDIO pin naar analoge pin 4 (Via Logic niveau Converter) gele draad
* SCLK pin naar analoge pin 5 (Via Logic niveau Converter) blauwe draad
* EERSTE pin aan digitale pin 2 (Via Logic niveau Converter) witte draad
* De GND op grond
* + 3,3 v naar 3,3 v
Logica niveau Converter
* De HV voor 5V
* LV naar 3,3 v
* HV1 naar analoge pin van de Arduino 4
* LV1 naar Si4703 SDIO pin
* HV2 naar analoge pin van de Arduino 5
* LV2 tot Si4703 SCLK pin
* HV3 naar digitale pin van de Arduino 2
* LV3 Si4703 RST PIN
* GND van met de GND
Kortstondige (N/O) drukknop ingangen (Jaycar onderdeelnummer SP0716)
* Kortstondige drukknop 1 + 5V___button___digital pin 10 (zoeken naar beneden) met 10kohm pull-down weerstand aan de grond
* Kortstondige drukknop 2 + 5V___button___digital pin 11 (zoeken omhoog) met 10kohm pull-down weerstand op grond * /
de code van de bibliotheek omvatten:
#include "<" LiquidCrystal.h">"
#include "<" Si4703_Breakout.h">"
#include "<" Wire.h">"
definiëren van de pinnen voor het LCD-scherm
int RS = 8;
int E = 9;
int DB4 = 4;
int DB5 = 5;
int DB6 = 6;
int DB7 = 7;
definiëren van de pinnen voor de Si4703
int resetPin = 2;
int SDIO = A4;
int SCLK = A5;
definiëren van de pinnen voor de drukknoppen zoeken
int channelDown = 10;
int channelUp = 11;
initialiseren van de bibliotheek met de nummers van de pennen van de interface
LCD initialisatie
LiquidCrystal lcd (RS E, DB4, DB5, DB6, DB7);
Si4703 initialisatie
Si4703_Breakout radio (resetPin, SDIO, SCLK);
Definiëren van de variabelen voor de radio
int kanaal;
int volume;
VOID Setup
{
definiëren van drukknop pinnen als ingangen
pinMode(channelDown,INPUT);
pinMode(channelUp,INPUT);
delay(1000); vertragen om rekening voor het voeden van van Arduino en met welke vertragings om LCD uitgevoerd te
de LCD's aantal kolommen en rijen instellen:
LCD.begin (16, 2);
Zet de radio en het volume tot een gewenste niveau instellen
radio.powerOn();
radio.setVolume(15); volume tussen 0 en 15
de radio ingesteld op een standaard frequentie (Nova 96,9 MHz FM)
kanaal = 969;
radio.setChannel(channel);
weergeven van een titel 'FM Radio' op regel 0 van het LCD, die
(Opmerking: lijn 1 is de tweede rij, aangezien tellen met 0 begint):
lcd.setCursor(0,0);
LCD.Print ("FM Radio"); Toon de frequentie van het kanaal op de LCD, gericht
lcd.setCursor(0,1);
LCD.Print ("96.9 MHz");}
void loop
{
Controleer als de channelUp knop is ingedrukt, zoja zoeken voor een kanaal
Als (digitalRead(channelUp) == HIGH)
{
kanaal = radio.seekUp();
updateLCD();
}
Controleer als de channelDown knop is ingedrukt, zoja zoeken naar beneden voor een kanaal
else if (digitalRead(channelDown) == HIGH)
{
kanaal = radio.seekDown();
updateLCD();
}
}
VOID updateLCD()
{
het kanaal geheel getal converteren naar een tekenreeks decimaal en "MHz" toevoegen voordat het wordt weergegeven op de LCD
ChannelString koord = String(channel);
Tekenreeks frequentie;
Als (channelString.length() == 3) //if de frequentie is 3 cijfers, plaatst u een komma na het tweede cijfer
{
frequentie = channelString.substring(0,2) + "." + channelString.substring(2) + "MHz";
}
else if (channelString.length() == 4) //if de frequentie bestaat uit 4 cijfers, plaatst u een komma na het derde cijfer
{
frequentie = channelString.substring(0,3) + "." + channelString.substring(3) + "MHz";
}
Eerst schakelt u lijn 1 van de weergave op account voor overgang tussen 3 en 4 cijferige frequenties
lcd.setCursor(0,1);
LCD.Print("");
Update de frequentie op het LCD-scherm
lcd.setCursor(4,1);
LCD.Print(Frequency);
}
EINDE VAN CODE
Ik heb gelezen dat de breakout board kan ook andere informatie zoals de namen van het lied, maar ik heb niet veel meer informatie over deze gevonden en wanneer ik de RDS probeerde, er niets gebeurde. Voor een update van dit project zou het cool om te verwijderen van de lijn "FM Radio" van de LCD en vervangen door de naam van het nummer dat momenteel wordt afgespeeld. Als iemand weet hoe dit te doen of wat informatie kan delen, zou ik graag van u horen!