Skip to content

Instantly share code, notes, and snippets.

@vprusa
Created September 29, 2021 16:33
Show Gist options
  • Save vprusa/296b59be8d48ca7b61d2bb1bcb6675b0 to your computer and use it in GitHub Desktop.
Save vprusa/296b59be8d48ca7b61d2bb1bcb6675b0 to your computer and use it in GitHub Desktop.
Radio: Digispark (Attiny85) + Si4703
// 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