// Include required libraries
#include "Arduino.h"
//#include "Audio.h"
#include "SD.h"
//#include "FS.h"
#include "SPI.h"
#include <iostream>
#include <U8g2lib.h>
#include <Wire.h>
// microSD Card Reader connections
#define SD_CS 10
#define SPI_MOSI 11
#define SPI_MISO 13
#define SPI_SCK 12
// I2S Connections
#define I2S_DOUT 22
#define I2S_BCLK 26
#define I2S_LRC 25
#define OLED_SDA 8
#define OLED_SCL 9
/*struct Artist{
char* name;
Album* firstAlbum = nullptr;
Artist* nextArtist = nullptr;
}
struct Album{
char* name;
Song* firstSong = nullptr;
Album* nextAlbum = nullptr;
}
struct Song{
char* name;
Song* nextSong = nullptr;
}
*/
U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0);
struct FileNode{
char name[64];
bool isDirectory;
FileNode* next = nullptr;
};
// Create Audio object
//Audio audio;
FileNode* head = nullptr;
void clearList(){
while(head != nullptr){
FileNode* temp = head;
head = head->next;
delete temp;
}
}
void LoadFile(const char* path){
// clearList();
File file = SD.open(path);
if(file || file.isDirectory()){
FileNode* tail = nullptr;
while(File entry = file.openNextFile()){
FileNode* newNode = new FileNode();
strncpy(newNode->name, entry.name(),63);
newNode->name[63] = '\0';
newNode->isDirectory = entry.isDirectory();
newNode->next = nullptr;
if (head == nullptr) {
head = newNode;
tail = newNode;
} else {
tail->next = newNode;
tail = newNode;
}
entry.close();
}
file.close();
}
}
void setup() {
// Set microSD Card CS as OUTPUT and set HIGH
// pinMode(SD_CS, OUTPUT);
// digitalWrite(SD_CS, HIGH);
u8g2.begin();
// Initialize SPI bus for microSD Card
SPI.begin(SPI_SCK, SPI_MISO, SPI_MOSI);
// Start Serial Port
Serial.begin(115200);
// Start microSD Card
/*if(!SD.begin(SD_CS))
{
Serial.println(F("Error accessing microSD card!"));
while(true);
}*/
//Serial.println("Sikersad");
//std::vector<Directory> directories;
/*try{
LoadFile("/");
}catch(int vmi){
Serial.println(F("Helno"));
}*/
// Setup I2S
/* audio.setPinout(I2S_BCLK, I2S_LRC, I2S_DOUT);
Set Volume
audio.setVolume(5);
Open music file
audio.connecttoFS(SD,"/MYMUSIC.mp3");
*/
}
void loop()
{
// audio.loop();
u8g2.firstPage();
do {
u8g2.setFont(u8g2_font_ncenB14_tr);
u8g2.drawStr(0,15,"heho vilag");
} while ( u8g2.nextPage() );
delay(1000);
}
/*
public class Directory{
public Directory(File* root){
this->init(root);
}
public std::vector<File> getFiles(){
return this->files;
}
public File getFile(char* fileName){
if(this->files.get(fileName)){
return this->files[fileName];
}else{
return 0;
}
}
public Directory getDirectory(char* dirName){
if(this->directories.get(dirName)){
return this->directories[dirName];
}
}
public char* getDirectoryName(){
return this->name;
}
public void init(File* root){
while(true){
}
}
private std::vector<File> files;
private std::vector<Directory> directories;
private char* name;
}
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();
}
std::vector<Directory> initDirectories(File dir){
std::vector<Directory> directories;
while(true){
File entry = dir.OpenNextFile();
if(!entry){
break;//jön a brék
}
//hozzon létre egy dájrektorit ha ez egy dájrektori és nyomja be azon belül az initet uwu
if(entry.isDirectory()){
Directory dir(entry);
directories.push_back(dir);
}
entry.close();
}
return directories;
}
*/