#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <Fonts/FreeMonoBoldOblique24pt7b.h>
#include "img.h"
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
#include <SPI.h> // include Arduino SPI library
#include <SD.h> // include Arduino SD library
#include "TMRpcm.h" // include TMRpcm library
#define next 3
#define _pause 2
TMRpcm audio;
File root;
// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
#define OLED_RESET 4 // Reset pin # (or -1 if sharing Arduino reset pin)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
void text() {
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.display();
}
void setup() {
Serial.begin(9600);
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("SSD1306 allocation failed"));
for(;;);
}
pinMode(next, INPUT_PULLUP);
pinMode(_pause, INPUT_PULLUP);
Serial.print("Initializing SD card...");
text();
display.print("Initializing SD card...");
display.display();
if (!SD.begin()) {
Serial.println("failed!");
text();
display.print("failed!");
display.display();
while(true); // stay here.
}
Serial.println("OK!");
text();
display.print("OK!");
display.display();
audio.speakerPin = 9; // set speaker output to pin 9
root = SD.open("/"); // open SD card main root
printDirectory(root, 0); // print all files names and sizes
audio.setVolume(5); // 0 to 7. Set volume level
audio.quality(1); // Set 1 for 2x oversampling Set 0 for normal
}
void loop() {
if ( !audio.isPlaying() ) {
// no audio file is playing
File entry = root.openNextFile(); // open next file
if (! entry) {
// no more files
root.rewindDirectory(); // go to start of the folder
return;
}
uint8_t nameSize = String(entry.name()).length(); // get file name size
String str1 = String(entry.name()).substring( nameSize - 4 ); // save the last 4 characters (file extension)
if ( str1.equalsIgnoreCase(".wav") ) {
// the opened file has '.wav' extension
audio.play( entry.name() ); // play the audio file
Serial.print("Playing file: ");
Serial.println( entry.name() );
text();
display.print( entry.name() );
display.display();
}
else {
// not '.wav' format file
entry.close();
return;
}
while( debounce(next) ) ; // wait until 'next' button is released
}
if ( !digitalRead(next) ) {
// 'next' button is pressed
audio.stopPlayback(); // stop playing
return;
}
if ( !digitalRead(_pause) ) {
// '_pause' button is pressed
audio.pause(); // pauses/unpauses playback
while( debounce(_pause) ) ; // wait until '_pause' button is released
}
}
// a small function for buttons debounce
bool debounce (int bt)
{
byte count = 0;
for(byte i = 0; i < 5; i++)
{
if ( !digitalRead(bt) )
count++;
delay(10);
}
if(count > 2) return 1;
else return 0;
}
void printDirectory(File dir, int numTabs) {
while (true) {
File entry = dir.openNextFile();
if (! entry) {
// no more files
break;
}
for (uint8_t i = 0; i < numTabs; i++) {
Serial.print('\t');
}
Serial.print(entry.name());
if (entry.isDirectory()) {
Serial.println("/");
printDirectory(entry, numTabs + 1);
} else {
// files have sizes, directories do not
Serial.print("\t\t");
Serial.println(entry.size(), DEC);
}
entry.close();
}
}
//display.clearDisplay();
//display.setTextSize(2);
//display.setTextColor(WHITE);
//display.setCursor(0, 0);
//display.print("Hello My Name Is Arduino UNO");
//display.display();
//display.clearDisplay();
//display.drawBitmap(15, 0, arduino, 128, 64, WHITE);
//display.display();
//delay(4000);
//display.clearDisplay();
//display.drawBitmap(0, 0, sd, 64, 64, WHITE);
//display.display();
//display.setTextSize(1);
//display.setTextColor(WHITE);
//display.setCursor(70, 0);
//display.print("Recherche");
//display.display();
//display.setCursor(70, 10);
//display.print("de la");
//display.display();
//display.setCursor(70, 20);
//display.print("Carte SD");
//display.display();
//delay(4000);