acid-drop/lib/ESP32-audioI2S/examples/TalkingClock/TalkingClock.ino
2024-05-23 18:42:03 -04:00

69 lines
1.7 KiB
C++

#include "Arduino.h"
#include "Audio.h"
#include "SD.h"
#include "SPI.h"
#include "FS.h"
#include "Ticker.h"
// Digital I/O used
#define SD_CS 5
#define SPI_MOSI 23
#define SPI_MISO 19
#define SPI_SCK 18
#define I2S_DOUT 25
#define I2S_BCLK 27
#define I2S_LRC 26
Audio audio;
Ticker ticker;
struct tm timeinfo;
time_t now;
uint8_t hour = 6;
uint8_t minute = 59;
uint8_t sec = 45;
bool f_time = false;
int8_t timefile = -1;
char chbuf[100];
void tckr1s(){
sec++;
if(sec > 59) {sec = 0; minute++;}
if(minute > 59){minute = 0; hour++;}
if(hour > 23) {hour = 0;}
if(minute == 59 && sec == 50) f_time = true; // flag will be set 10s before full hour
Serial.printf("%02d:%02d:%02d\n", hour, minute, sec);
}
void setup() {
Serial.begin(115200);
SPI.begin(SPI_SCK, SPI_MISO, SPI_MOSI);
SD.begin(SD_CS);
audio.setPinout(I2S_BCLK, I2S_LRC, I2S_DOUT);
audio.setVolume(10); // 0...21
ticker.attach(1, tckr1s);
}
void loop(){
audio.loop();
if(f_time == true){
f_time = false;
timefile = 3;
uint8_t next_hour = hour + 1;
if(next_hour == 25) next_hour = 1;
sprintf(chbuf, "/voice_time/%03d.mp3", next_hour);
audio.connecttoFS(SD, chbuf);
}
}
void audio_eof_mp3(const char *info){ //end of file
//Serial.printf("file :%s\n", info);
if(timefile>0){
if(timefile==1){audio.connecttoFS(SD, "/voice_time/080.mp3"); timefile--;} // stroke
if(timefile==2){audio.connecttoFS(SD, "/voice_time/200.mp3"); timefile--;} // precisely
if(timefile==3){audio.connecttoFS(SD, "/voice_time/O'clock.mp3"); timefile--;}
}
}