hi,
i have a project for my school and i'm kinda stuck. i will describe what it is suppose to do:
-on sd card i have .csv files
-i have to list them on lcd
-i have to navigate using buttons
-choose 1 file from there and open it pressing a button
-sent it via serial1
what i managed to do is to config the lcd and read the sdcard, and list the files on serial. i need some help from you guys, maybe you have some ideeas how to solve this.
here is my code so far.
#include <LiquidCrystal_I2C.h>
#include <SPI.h>
#include <SD.h>
#include <Wire.h>
//-------------------
Sd2Card card;
SdVolume volume;
SdFile root;
const int chipSelect = 53;
//-------------------
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); // Set the LCD I2C address
//-------------------
/*
The circuit:
* SD card attached to SPI bus as follows:
** 50-MOSI - pin 11 on Arduino Uno/Duemilanove/Diecimila
** 51-MISO - pin 12 on Arduino Uno/Duemilanove/Diecimila
** 52-CLK - pin 13 on Arduino Uno/Duemilanove/Diecimila
** 53-CS - depends on your SD card shield or module.
SPI Uno Mega
SS 10 53
MOSI 11 51
MISO 12 50
SCK 13 52
Pin 4 used here for consistency with other Arduino examples
*/
void setup() {
Serial.begin(9600);
lcd.begin(20,4);
lcd.setCursor(4,0);
lcd.print("Programator D");
delay(2000);
lcd.setCursor(0,2);
lcd.print("Initializing SD...");
pinMode(53, OUTPUT);
if (!card.init(SPI_HALF_SPEED, chipSelect)) {
lcd.clear();
lcd.setCursor(0,0);
lcd.print("init failed. Check:");
delay(1000);
lcd.setCursor(0,1);
lcd.print("* card in ?");
delay(1000);
lcd.setCursor(0,2);
lcd.print("* wiring ?");
delay(1000);
lcd.setCursor(0,3);
lcd.print("* chipSelect pin ");
delay(3000);
return;
} else {
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Wiring is correct");
lcd.setCursor(0,2);
lcd.print("a card is present.");
delay(2000);
}
// print the type of card
lcd.clear();
lcd.setCursor(0,0);
lcd.print("\nCard type: ");
switch (card.type()) {
case SD_CARD_TYPE_SD1:
lcd.println("SD1");
break;
case SD_CARD_TYPE_SD2:
lcd.println("SD2");
break;
case SD_CARD_TYPE_SDHC:
lcd.println("SDHC");
break;
default:
lcd.println("Unknown");
}
delay(2000);
lcd.clear();
lcd.setCursor(0,0);
// Now we will try to open the 'volume'/'partition' - it should be FAT16 or FAT32
if (!volume.init(card)) {
lcd.print("No FAT16/32 part.");
lcd.setCursor(0,1);
lcd.print("format the card");
delay(3000);
return;
}
// print the type and size of the first FAT-type volume
uint32_t volumesize;
lcd.clear();
lcd.setCursor(0,0);
lcd.print(" Volume is FAT");
lcd.print(volume.fatType(), DEC);
delay(1000);
//lcd.println();
volumesize = volume.blocksPerCluster(); // clusters are collections of blocks
volumesize *= volume.clusterCount(); // we'll have a lot of clusters
volumesize *= 512; // SD card blocks are always 512 bytes
lcd.setCursor(0,1);
lcd.print("Volume size (Mb): ");
lcd.setCursor(0,2);
volumesize /= 1024;
lcd.print(volumesize);
delay(2000);
lcd.setCursor(0,3);
lcd.print(" Files found : ");
root.openRoot(volume);
// list all files in the card with date and size
root.ls(LS_R | LS_DATE | LS_SIZE);
delay(3000);
}
void loop() {
//lcd.clear();
}
thank you