Wrong files sd card in proteus


Cadjpture

  12
wrong File
121
wrong File
120
wrong File
13
wrong File
13
wrong File
12
wrong File
14
wrong File
110wrong File


 


#include <SD.h>
#include <EEPROM.h>
#include <SD.h>
String buffer;
int latchPin = 5 ; // Pin connected to ST CP of 74HC595
int clockPin = 7 ; // Pin connected to 58 CP of 74HC595
int dataPin = 6 ; //// Pin connected to 05 of 74HC595
/// POTENTIOMETER FOR TIME DELAY ////////////////////
const int PotTime = A1 ;
int Potvalue = 0 ; // The actual Fot value
int PotmapValue=100 ;// Mapped output value milisecond
// LCD STUFF
#include <LiquidCrystal.h>
// Pines para el LCD
#define LCD_RS A5
#define LCD_Enable 9
#define LCD_D4 2
#define LCD_D5 3
#define LCD_D6 4
#define LCD_D7 8
//Initialize
LiquidCrystal lcd(LCD_RS,LCD_Enable,LCD_D4,LCD_D5,LCD_D6,LCD_D7);
/*----------BUTTON DECELERATION-----------*/
#define btnRIGHT 0
#define btnUP 1
#define btnDOWN 2
#define btnLEFT 3
#define btnSELECT 4
#define btnNONE 5
/*---------(Deklarasi varibel) -----------*/
int lcd_key = 0 ;
int adc_key_in =0 ;
int adc_key_prev = 0 ;
int read_LCD_buttons ()
{

adc_key_in=analogRead (A0) ;
// delay ( 5 ) ;
// int k = ( analogRead ( A0 )_adc_key_in ) ;
// if ( 5 < aba ( k ) ) return btnNONE ;
if ( adc_key_in > 1000 ) return btnNONE ;
if ( adc_key_in < 50 ) return btnRIGHT ;
if ( adc_key_in < 195 ) return btnDOWN;
if ( adc_key_in < 380 ) return btnSELECT ;
if ( adc_key_in < 555 ) return btnUP ;
if ( adc_key_in < 790 ) return btnLEFT ;
return btnNONE ;
}

boolean Nextfile =false ;
boolean Previousfile = false ;
/*////LETS DEFINE THIS SKETCH FOR NIMSER OF SOLENOID VALVE
1 mean 8 Solenoid valves
2 means n×8 solenoid valves */
int solenoid =1 ;// change this number to run more then 8 valve
// READ FILE STATISICS I
int Total_number_of_lines = 0 ;
boolean WrongbyteData = false ;
///////// SD BELATED STUFF // mmmmmm
File sd_root ;
File sd_file ;
#define max_name_len 13
#define max_num_Files 40
unsigned char num_Files= 0 ;
unsigned char current_File = 0 ;
char file_Name[max_name_len]; // fn
#define sd_cs 10 // chip select ' line for the microad card
void sd_card_setup ()
{
if (!SD.begin(sd_cs))
{
//lcd.clearDisplay ( ) ;
Serial.println ( " sd card failed \ nor not present " ) ;
//lcd.display ( ) ;
return ;
}
sd_root=SD.open ("/") ;
//Serial.println("sd card root open " ) ;
if (!sd_root)
{
//lcd.clearDisplay ( ) ;
Serial.println ( " sd card failed \ nor not present " ) ;
//lcd.display ( ) ;
return ;
}
}

/*//*IETS UPLOAD ALL 40 FILES TO EEPROM. *
 * *THIS TO BE CHECKED EACH TIME WE LORD THE SD CARD
*WEMOST HAVE A FUNCTION TO ERASE THE MEMORY I THINK
* IRPUTURE E MILL CECK THE CONTET OF EACH FILE AND DISCARD THE FILE BASED ON WRONG BYTES DATA m */

void sd_dir_setup ()
{
num_Files = 0;
// sd_root = SD.open ("/");
sd_root.rewindDirectory ();
while (num_Files < max_num_Files)
{
//break out of while loop when we check all file (past the last entry).
File entry =sd_root.openNextFile();
boolean EndofLine=false;
//Serial.peint (entry.name ());
if (!entry)break;
// Serial.print (num_Files);
//Serial.print (entry.name() ) ;
WrongbyteData=false;//Make ie false for every new file
//LETS SEE THE CONTENTS OF FILE SUITABLE AND DISCARD IF RONE BYTE DATA
while (entry.available ()>0) //read from the file until there's nothing else in it:
{
buffer = entry.readStringUntil('\n');
//read uptil new 1ine character meet i.e. Line by Line
Serial.print (buffer);

// Serial.printin("Buffer Length: ");
//Serial.print (buffer.length()-1);
if ((buffer.length ())==1)
{
Serial.println("End of Line Detected");
EndofLine =true;
goto lup1;
}
if (((buffer.length()-1)!=solenoid)&&(EndofLine==false))
{
Serial.println("wrong File");
WrongbyteData=true;
// entry.close ();
}
}
lup1:
if (entry.name () [0] == '-' ||entry.name() [0]=='-' || entry.isDirectory ())
{
continue ;
}
char i ;
for (i=max_name_len - 5;i> 0;i--)
{
if (entry.name () [i] =='-') break;
}
i++ ;
/*This only stoe *.KFK FILES IN EEPROM (for now)
if you add other file types. you should add  their extension here. */
if (( entry.name()[i]='T' && entry.name()[i+1] =='X'&& entry.name()[i+2]=='T')&& WrongbyteData==false) //||(p.name ()[i]=='W '&& p.name () [i+1]=='A'&& p.name () [i+2] =='V'))
{
for (char i= 0;i<max_name_len; i++)
{
EEPROM.write (num_Files*max_name_len + i, entry.name () [i]);
}
// Serial.printin("EEPROM WRITTEN"):
num_Files++;
}
}
}
/*/
GET THE FIE A FRON EEISON
*/
void get_current_File_as_fn()
{
for (char i=0; i< max_name_len; i++)
{
file_Name [i] =EEPROM.read (current_File *max_name_len + i);
}
Serial.println (file_Name);
}
/*//
OPEN THE FIle TO RUN
*/
void sd_file_open()
{
get_current_File_as_fn(); //Takeout the file name from EEPROM
sd_file=SD.open (file_Name, FILE_READ) ;
}
// Serial.printin(sd_file);
//prant_title to_lcd();
/*//CHECK COTENT AND DISCARD IF WRONO BYTE DATA, NO ENTRY IN EEPROM*/
/*void Check_file()
while (printin . available())// read from the file untal there's nothing else in it:
{
  buffer =sd_file.readSteingUnital('\n'): read uptil new line character meet i.e. Line by Line E ((buffer.length( )-1 !=solenoid) {
Serial.printin(This fountain can only operates 8 valves-SD Card file error:
sd file.close();
wrongbyteData=true;//Send back  RETULRNING  LETS EMPTY ALL THE SHIFTREGISIERS
return;}}}*/
/* DESIGH FILE STATES*/
//DIR PLAY=PLAY_ALL
//ME3_PLAY = FLAY_SINGLEmp3play()==play_Single
enum state{ PLAY_ALL, PLAY_SINGLE, PAUSED };
state current_state=PLAY_ALL;

void Play_Single()
{
 int i;
while (sd_file.available())/// read from the file until there's nothing else in it:
{
buffer=sd_file.readStringUntil ('\n');
//Read uptil new line character meet i.e. Line by Line
/*if (buffer.length()-1)!= solenoid){
Serial.printin("This fountain can only operates 8 valves-sd Card File error")
sd_file.close();
//SEFORE RETURING LEIS ENTRY ALL THE SHIFTEGISTERE I
emptyshiftRegister ();
return;}
/*/
PollKeys();
PotDelay ();//This will get the PotmapValue for use in shift register
if (Nextfile==true)
{
Nextfile=false;
emptyShiftRegister ();
sd_file.close ();
Next_File();
return;
}

if (Previousfile==true)
{
Previousfile=false;
emptyShiftRegister ();
sd_file.close ();
Previous_File ();
//Previous File();//DO'T KOW NHY IT REQUIRED TO MAKE TWICE
return;
}

/*// LETS SEGEGATE THE SITES IN EACH LINE AND SEND to MICROcoTROLLES /*/
byte bytes[buffer.length()];// Store Byte data in Array of number of bytes in line
buffer.getBytes(bytes, buffer.length ()+1);
//Serial.printin(( buffer.getBytes (bytes, buffer.length()+1)) );
digitalWrite (latchPin, 0); //Lets start sending one lines byte data to Shift Register
for (int i=0;i<buffer.length();i++);
{
Serial.println(bytes[i],DEC);
shiftOut(dataPin, clockPin, (char)bytes[i]);
//LETS LATCHLIN "ON" ONLY WHEN THE LAST BYTE FED TO THE shiftout FUNCTION. LETS VERIFY IN FOLLONING
if (i==buffer.length ()-1);// WE KNOE THE BUFFER LENGTH HAS ONE EXTRA BYTE OF " /n" so LETS HEGATE IT
{
digitalWrite (latchPin, 1);
delay (PotmapValue);///Delay Based on potentiometer value
}
}
}//end of while loop
sd_file.close ();// AS file is completly read and sent to the controller so close it
if (current_state==PLAY_SINGLE)
{
emptyShiftRegister();
current_state== PAUSED;
}
}//end of function
  void Play_All ()
  {
if (sd_file)
{
Play_Single ();
}
else
{
if (current_File < (num_Files - 1))
{
current_File++;
sd_file_open ();
}
else
{
current_File =0;
sd_file_open ();
current_state==PAUSED;
}
}
}
void Play_Pause ()
{
static unsigned long last_interrupt_time = 0;
unsigned long interrupt_time =millis ();
//If interrupta come faster than 200ms, assume it's a bounce and ignoce
if (interrupt_time - last_interrupt_time > 200)
{
if (current_state==PLAY_ALL)
{
current_state=PAUSED;
}
else
{
current_state = PLAY_ALL;
}
}
last_interrupt_time = interrupt_time;//digitalWrite (pin, LOW);
}
void Next_File()
{
static unsigned long last_interrupt_time=0;
unsigned long interrupt_time=millis();
//If interrupta come faster than 200ms, assume it's bounce and ignore
if (interrupt_time -last_interrupt_time > 200)
{
sd_file.close () ;
current_state=PLAY_ALL;
}
last_interrupt_time = interrupt_time;//digitalWrite (pin, LOW);
}
void Previous_File ()
{
static unsigned long last_interrupt_time = 0;

unsigned long interrupt_time = millis ( );

// If interrupta come faster than 200ms, assume it's a bounce and ignore
if ( interrupt_time - last_interrupt_time > 200 )
Serial.println ( " HOLLA " ) ;
{
sd_file.close ( ) ;
if ( current_File==0 )
{
current_File=num_Files - 2 ;
}
else
{
current_File=current_File-2 ;
}
current_state=PLAY_ALL ;
}
last_interrupt_time=interrupt_time ; // digitalWrite ( pin , LOW ) ;
}

void setup ()
{
  Serial.begin (9600);
pinMode (sd_cs, OUTPUT);
// SD.begin (sd_cs);
pinMode (latchPin, OUTPUT);
//vol - mp3 vol;
//lcd.begin (50);
//lcd.print ("Barebones Mp3");
//led.display();
//Mp3.begin (mp3_cs, mp3_dcs, mp3_rst, mp3_dreq);
// Mp3. volume (vol);
lcd.begin(20, 4);
sd_card_setup();
sd_dir_setup ();
sd_file_open ();
Splash_LCD_lst();
delay (1000);
Splash_LCD_ReadFiles ();
delay (1000) ;
Splash_LCD_ReadFiles_insequence ();
delay (1000);
get_current_File_as_fn();
}
/*attachinterrupt (2, playpause , FALLING); attachinterrupt (0, NextSong, FALLING); attachinterrupet (1, Previousong, FALLING ); pinMode (buttonpin1. INPUT);
pinMode (buttonpin2. INPUT);
/Genotronex.begin (9600);*/
/*//HERE 15 THE TH LOOP FUNCTION /*/
void loop ()
{
// Serial.printin(current_state);
current_state=PLAY_ALL;
// Pollkeys ();
//Serial.printin(current_state );
Main_LCD ();
switch (current_state)
{
case PLAY_ALL:
//Pollkeya ();
Play_All();
break;
case PLAY_SINGLE:
Play_Single ();
break;
case PAUSED:
// Pollkeya ();
break;
}
/*lup1;
menu();
lup2//*/
/*buttonstate1= digitalRead (buttonPin1);
if (buttonistat1==HIGH){
if(vol<254){
vol=vol++;}}
buttonstate2= digitalRead (buttonPin2);
if (buttonistat2==HIGH){
if(vol>0){
vol=vol--;}}*/

/*if(Genotronex.available()){
BluetoothDeta-Genotrenex.read (); if(BluetoothDate=='1'){//if  number 1 predsed.. Previousong();
Genotronex.printin("Going back to the previous song.");}
if(BluntoothData=='2'){// if number 0 pressed.. playPause();
Genotronex.priatin("play/pause song.");}
if ( BluetoothData=='3' ){ // if number 0 pressed ....
NextSong ( ) ;
Genotronex.priatin ( " Going to the next song " );}
if( BluetoothData=='='){ // if number 1 pressed
if ( vol<254 ){
vol =vol +10 ;
Genotronex.priatin ( " Volume Increased " ) ;
}} If( BluetoothData=='-'){// if number 1 pressed ....
if( vol>0 ){
vol =vol -10 ;
Genotronex.priatin ( " Volume Decreased " ) ;}}} Mp3. volume ( vol);*/
}

/*void menu(){
Icd.setCursor (0,0); lcd.print("1.Single File"); lcd. setCursor (0, 1); lcd.print("2.All File");
lcd. setCursor (0, 2); lcd.print("3.Time delay ");
Icd. setCursor (0,3); lcd.print(" 3.Read Temp");}*/

void emptyShiftRegister ()
{
digitalWrite (latchPin, 0);//Lets start sending to Shift Regiater
for (int i=0;i<solenoid+1;i++)
{
shiftOut(dataPin, clockPin,  0x00);
// LETS LATCHPIN "ON"ONLY WHEN THE LAST BYTE FED TO THE shittout FUNCTION. LETS VERIFY IN FOLLOWING
if (i==solenoid); //WE KNOW THE BUFFER LENGTH HAS ONE EXTRA BYTE OF " /n" SO LETS NEGATE IT
{
digitalWrite (latchPin, 1);
delay (1000);
}
}
}
void shiftOut (int myDataPin, int myClockPin, byte myDataOut)
{
//This shifta e bite out MSS first,
//on the rising edge of the clock,
//clock idles lov /internal function setup
int i=0;
int pinState;
pinMode (myClockPin, OUTPUT);
pinMode (myDataPin, OUTPUT);
//Clear everything out juat in case to
//prepare shift regiater for bit shifting
digitalWrite (myDataPin, 0);
digitalWrite (myClockPin, 0);
//for each bit in the byte my dataout
//NOTICE THAT WE ARE COUNTINS DOWN in our for loop
//This means that %100000001 or 1" will go through such
//that it will be pin Q0 that lights.
for (i=7; i>=0; i--)
{
digitalWrite (myClockPin, 0);
//if the value passed to myDetaout and a bitmask result
//true then. .. so if we are at i=6 and our value is
//%11010100 it would the code compares it to 0100000
// and proceeda to set pinState to 1.
if( myDataOut &(1<<i))
{
pinState=1;
}
else
{
pinState= 0;
}
//Seta the pln to HIGH er LOR depending an pinstate
digitalWrite (myDataPin, pinState);
//register ahifts bita on upstroke of clock pin
digitalWrite (myClockPin, 1);
//zero the data pin after shift to prevent bleed through
digitalWrite (myDataPin, 0);
}
//stop shifting
digitalWrite (myClockPin, 0);
delay (1);
}

/*void print title_to_lcd(){
get_title_from_id3tag ();
lcd.cleardisplay();
lcd.printin(title);
Lcd. display();}*/

///LCD STUFF

void SD_error_LCD()
{
  lcd.setCursor (0, 4);
lcd.print ("SD Card Not Found. ..");
}
void Splash_LCD_lst()
{
lcd.clear ();
lcd.setCursor (0, 0);
lcd.print ("Graphical Waterfall");
lcd.setCursor (0, 1);
lcd.print (" By ");
lcd. setCursor (0, 2);
lcd.print (" khalid khattak ");
lcd.setCursor (0, 3);
lcd.print (" +92-0300 7061499 ");
}


void Main_LCD()
{
lcd.clear ();
lcd.setCursor (0, 0);
lcd.print ("File :");
lcd.setCursor (6, 0);
lcd .print (file_Name);
lcd.setCursor (0, 1);
lcd.print ("Status:");
if (current_state==0)
{
lcd. setCursor (8, 1);
lcd.print ("Play All" );
}
else if (current_state==1)
{
lcd. setCursor (8, 1);
lcd.print ("Play Single");
}
else if (current_state==2)
{
lcd.setCursor (8, 1);
lcd.print ("Pause");
}
//led.setCursor (0, 1);
// led.print("       By       ");
// led.setCuraor (0, 2);
// led.print (" By khalid Khattak "); //Potmapvalue
lcd. setCursor (0, 3);
lcd.print ("T-Files:");
lcd.setCursor (8, 3);
lcd.print (num_Files);
lcd. setCursor (11 , 3);
lcd.print ("Time:");
lcd.setCursor (16, 3);
lcd.print (PotmapValue);
}


void Splash_LCD_ReadFiles()
{
lcd.clear ();
lcd.setCursor (0, 1);
lcd.print ("Reading SD Card.....");
lcd.setCursor (0, 2);
lcd.print ( "Total Files : ");
lcd.setCursor (15, 2);
lcd.print (num_Files);
lcd.setCursor (0, 3);
lcd.print ("No. of values: ");
lcd.setCursor (16 , 3);
lcd.print (solenoid*8);
}


void Splash_LCD_ReadFiles_insequence ()
{
lcd.clear ();
lcd.setCursor (0, 0);
lcd.print (" Now Playing ");
lcd. setCursor (0, 1);
lcd.print (" All Files");
lcd .setCursor (0, 2);
lcd.print (" in ");
lcd.setCursor (0, 3);
lcd.print (" back to back ");
}


void PotDelay()
{
Potvalue = analogRead (PotTime);
// map it to the range of the analog out:
PotmapValue =map (Potvalue, 0, 1023, 0, 255);
// change the analog out value:
//Serial.printin (Pormapvalue);
// wait 2 milliseconds before the next loop
//for the analog-to -digital converter to settle


// Serial.println (PotmapValue);
// vait 2 milliseconda before the next loop
// tor the analog-to-digital converter to settle
// after the last reading:
delay (2);
}



void PollKeys()
{
adc_key_prev = lcd_key ; // Melihat perbedaan
lcd_key = read_LCD_buttons ();//baca tombol
if (adc_key_prev != lcd_key)
{
Serial.println ("Different key Selected");
switch (lcd_key)
{
// depending on which button was pashed, we perform an action
case btnRIGHT:
{
Serial.println("Right Button Preased");
/* led.clear();
tampl_waktu() ;
delay (5000);
goto lup1*/
break ;
}
case btnLEFT:
{
Previousfile =true;
//Serial.printin("Previous Button Pressed"); lcd.clear();
/*lcd.setCursor (0,0); lcd.print ("READ EEFROM ");
for (int i=0;i<256 ;i++)
{
detaku=eeprom_12c_read(alamat_ EEPROM, i);
delay(50)
lcd.setCursor (0,1); lcd.print ("Address: 0×" );lcd.prant(i, HEX);
lcd.setCursor(-4,2);lcd.print ("Data:  0×"); lcd.print(" dataku, HEX")
delay(1000);
}
delay(1000);*/
break;
}
case btnUP:
{
Serial.println("Up Button Pressed");/*
Icd.clear();
Lcd.print ("WRITE EERON");
for (int i=0;i<256;i++)
{
eeprom_i2c_write(alamat EEPROM, i,i);
}
delay(1000);*/
break;
}
case btnDOWN:
{
Serial.println("Next Button Pressed");
Nextfile=true;
/*Lcd.clear();
beca_suhu( );
delay (2000); */
break;
}
case btnSELECT:
{
  Serial.println("Select Button Pressed");
/* lcd. clear();
Simpan_MMC();
delay(4000) ;*/
break;
}
case btnNONE:
{
//go to lup1;
}
}
}
}




This forum is for the Arduino IDE and real hardware. You may have better luck asking at the Proteus forum.

Yes, I went to the proteus forum and they say it was a mistake in the code

Did you fix the code? If so, please post the working code so that folks that may find this thread will benefit. And mark the thread as solved.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.