Created
September 29, 2021 16:33
-
-
Save vprusa/296b59be8d48ca7b61d2bb1bcb6675b0 to your computer and use it in GitHub Desktop.
Radio: Digispark (Attiny85) + Si4703
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// this file is live bkp... | |
//setup | |
/* | |
* Digispark | |
* | |
* rst scl sda | |
* P5 P2 P1 | |
* | |
* A | |
* ||| | |
* V | |
* | |
* I2C convertor 5V<->3.3V | |
* | |
* A | |
* ||| | |
* V | |
* | |
* Si4703_Breakout | |
* | |
*/ | |
// https://dratek.cz/arduino/1492-fm-rds-radio-si4703-modul-tuneru-pro-avr-arm-pic.html | |
// https://navody.dratek.cz/navody-k-produktum/arduino-fm-radio-si4703.html | |
#include <DigiUSB.h> | |
// Arduino FM Rádio Si4703 | |
// připojení potřebných knihoven | |
#include <Si4703_Breakout.h> | |
#include <Wire.h> | |
// nastavení propojovacích pinů | |
//#define resetPin 2 | |
//#define SDIO A4 | |
//#define SCLK A5 | |
//working | |
#define resetPin 5 | |
#define SDIO 0 | |
#define SCLK 2 | |
//#define resetPin 5 | |
//#define SDIO 4 | |
//#define SCLK 3 | |
// inicializace modulu z knihovny | |
Si4703_Breakout radio(resetPin, SDIO, SCLK); | |
//Si4703_Breakout * radioPtr; | |
// proměnné pro běh programu | |
short int frekvence; | |
char hlasitost; | |
//char rdsBuffer[10]; | |
char radioPlaying = 2; | |
/* | |
void zobrazInfo() { | |
// vytištění informací z proměnných | |
// DigiUSB.print("Frekvence:"); DigiUSB.print(frekvence); | |
// DigiUSB.print(" | Hlasitost:"); DigiUSB.println(hlasitost); | |
} | |
*/ | |
void setup() { | |
DigiUSB.begin(); | |
/* | |
DigiUSB.println("\n\nSi4703 Radio"); | |
DigiUSB.println("==========================="); | |
// DigiUSB.println("a b Oblibene stanice nastavene v programu"); | |
DigiUSB.println("+ - hlasitost (max 15)"); | |
DigiUSB.println("> < Zmena frekvence nahoru(dalsi)/dolu(zaptky)"); | |
// DigiUSB.println("r Nacteni RDS dat (15 sekund timeout)"); | |
DigiUSB.println(); | |
*/ | |
/* | |
// zahájení komunikace s modulem | |
radio.powerOn(); | |
DigiUSB.println(" radio.powerOn()"); | |
// nastavení hlasitosti na nulu | |
radio.setVolume(3); | |
DigiUSB.println(" .setVolume(5);"); | |
*/ | |
} | |
void loop() { | |
char ch; | |
// if(radioPlaying == -1){ | |
// turnOnRadio(); | |
// } | |
while (true) { // loop forever | |
if (DigiUSB.available()) { | |
// something to read | |
ch = DigiUSB.read(); | |
// DigiUSB.write(ch); | |
if (ch == 's') { | |
// turnOnRadio(); | |
DigiUSB.print(ch); | |
// DigiUSB.delay(100); | |
// free(radioPtr); | |
// radioPtr = new Si4703_Breakout(resetPin, SDIO, SCLK); | |
// Si4703_Breakout radio = *radioPtr; | |
// DigiUSB.delay(1000); | |
// DigiUSB.delay(100); | |
radio.powerOn(); | |
radioPlaying = 1; | |
DigiUSB.println("."); | |
} else if (ch == '\n') { | |
break; // when we get a newline, break out of loop | |
} | |
} | |
if (radioPlaying == 1) { | |
if(ch!=0) { | |
// DigiUSB.print((char)ch); | |
} | |
// Si4703_Breakout radio = *radioPtr; | |
// DigiUSB.delay(100); | |
// nejak blbne frekvence == 0 ... && frekvence != 0 ? | |
if(ch == '>' ) { | |
// DigiUSB.delay(100); | |
// DigiUSB.delay(10); | |
frekvence = radio.seekUp(); | |
// DigiUSB.delay(10); | |
// DigiUSB.delay(100); | |
DigiUSB.println(frekvence); | |
// DigiUSB.delay(1000); | |
// DigiUSB.println("."); | |
} | |
// při znaku D spustíme hledání směrem dolů | |
else if (ch == '<') { | |
frekvence = radio.seekDown(); | |
DigiUSB.println(frekvence); | |
// DigiUSB.println("."); | |
// zobrazInfo(); | |
} | |
/* | |
// při znaku + přidáme hlasitost | |
else if (ch == '+') { | |
hlasitost ++; | |
// maximální hodnota hlasitosti je 15, | |
// při větší nastavíme pouze 15 | |
if (hlasitost == 16) hlasitost = 15; | |
radio.setVolume(hlasitost); | |
// zobrazInfo(); | |
} | |
// při znaku - snížíme hlasitost | |
else if (ch == '-') { | |
hlasitost --; | |
// minimální hodnota hlasitosti je 0, | |
// při záporné hodnotě nastavíme 0 | |
if (hlasitost < 0) hlasitost = 0; | |
radio.setVolume(hlasitost); | |
// zobrazInfo(); | |
}*/ | |
/* | |
// při znaku a nastavíme oblíbenou stanici, | |
// pro kterou je nastavena frekvence níže | |
else if (ch == 'a') { | |
frekvence = 910; // Radio Beat | |
radio.setChannel(frekvence); | |
zobrazInfo(); | |
} | |
// při znaku b nastavíme oblíbenou stanici, | |
// pro kterou je nastavena frekvence níže | |
else if (ch == 'b') { | |
frekvence = 1055; // Radio Evropa 2 | |
radio.setChannel(frekvence); | |
zobrazInfo(); | |
} | |
*/ | |
// při znaku r spustíme načítání RDS dat, | |
// které bude trvat 15 sekund - lze změnit níže | |
/* | |
// nefunguje a zamrzava zelezo (TODO test proc - mem./DigiUSB.delay(10)/...?) | |
else if (ch == 'r') { | |
// pomocí funkce readRDS se pokusíme | |
// načíst RDS data do proměnné | |
// a následně je vytiskneme | |
DigiUSB.println("R"); | |
radio.readRDS(rdsBuffer, 1000); | |
DigiUSB.print(rdsBuffer); | |
DigiUSB.println("."); | |
}*/ | |
} | |
ch = 0; | |
// refresh the usb port for 10 milliseconds | |
DigiUSB.delay(10); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment