Go Down

Topic: SD kaart van 16Gigabyte Arduino Uno (Read 3426 times) previous topic - next topic

evermore99

Oct 12, 2012, 10:53 am Last Edit: Oct 12, 2012, 11:04 am by evermore99 Reason: 1
Hallo ik zelf als knutselaar ben bezig met mijn Arduino Uno, en gebruikt het als Datalogger met een Temperatuursensor, Spanningsdeler en een Stroomsensor. echter zelf heb ik een Probleem en kan niet multiple files in een directory schrijven.

Ik gebruik een Fat32, en 16 Gigabyte Scandisk

1 eerst roep ik een directory op,
2 maak een pointer aan in CreateDir(); en schrijf in de Functie van de CreateFile() met behulp van Char -> String conversie->Char (CharBuffer is groot genoeg)
3 de Pointer gaat naar de CreateFile(); waar hij de Char aanmaakt waar de File in de Directory gemaakt wordt
4 dan gebeurt het volgende, hij herhaalt de drie stappen alleen met de File buiten de gemaakte Directory,
5 en schrijft dan weer een bepaalde periode weer in de File

Hieronder een vereenvoudigde struktuur.

Void setup()
{
CreateDir();
}
Void loop()
{
Data inlezen van sensoren, synchroniseren en wegschrijven naar File. CreateFile();
}

CreateDir()
{
bevat For loop met char en een mkdir, en een pointer
}
CreateFile()
{
krijgt de pointer zodat het in de Directory een File kan schrijven.
}

Zo wat doe ik fout? gebeurt er wat met de Pointer?


Jantje

#1
Oct 12, 2012, 01:57 pm Last Edit: Oct 23, 2012, 02:08 pm by Jantje Reason: 1
Dag evermore
Ik heb eens snel naar je code gekeken en ik denk dat het probleem wat fundamenteler is dan enkel sd lib.
Zo zie ik volgende probleem.
Je gebruikt myFile voor je CreateFile() aanroept.
Oplossing CreateFile() toevoegen aan setup na CreateDir();

Je gebruik van char arrays is niet correct.
Zo moet deze lijn code op zijn minst een waarschuwing geven char Dir[]="0/";
char Dir[]  is en pointer naar geheugen en niet geheugen.
Wat je kan doen is
char Dir[8];  //maak 8 characters in het geheugen beschikbaar voor Dir dat is van 0 tot 7
Dir[7]=0; //Zet de laatste character op 0
Met vriendelijke groet
Jantje
Do not PM me a question unless you are prepared to pay for consultancy.
Nederlandse sectie - http://arduino.cc/forum/index.php/board,77.0.html -

evermore99

Hallo, ik heb de voorslagen doorgespeeld en getest. Echter rust mij de Vraag hoe het werkt met die Pointers? van de Functie CreateDir(); die door gegeven wordt aan CreateFile(); dit loopt toch niet helemaal lekker,

tot nu creeer ik 1 map met 1 File daarin, daarna blijft mijn arduino in de Error interrupt steken.

ik stel een kommentaar zeer op prijs.

met vriendelijke Groet

B


Jantje

B
Ik heb naar de code gekeken en die compileert niet. Ik snap niet hoe je kan zeggen dat je in een error interrupt blijft steken.

Als ik de code bekijk zie ik volgende fouten
Code: [Select]
char filename[12]="00000000.txt";
dit moet zijn
Code: [Select]
char filename[13]="00000000.txt";
want 8+1+3+1 er moet namelijk een 0 als string terminator bij. De compiler geeft daar ook een warning over.

ik zie ook de reeds aangehaalde fout weer komen
Code: [Select]
  char Dir[]="00000000/";

en dit lijkt me ook niet wat je wilt
Code: [Select]
   Dpointer[10]=Dir[10];
Gezien je kennis van memory management zou ik je sterk aanraden om met strings te werken in plaats van char[]

Met vriendelijke groet
Jantje
Do not PM me a question unless you are prepared to pay for consultancy.
Nederlandse sectie - http://arduino.cc/forum/index.php/board,77.0.html -

evermore99

Hallo Jan, het heeft een poosje geduurd voordat ik de code weer een beetje in Orde had, tevens heb ik dat advies met strings proberen te vervolgen. met niet tot veel succes, omdat ik het gewoon niet snap en door de bomen het bos of omgekeerd niet meer zie.

Tevens heb ik met de Strcat proberen te werken. maar tevergeefs.

wat ik wil bereiken is het volgende

CreateDir(); oproepen en een pointer doorgeven met de naam van de Directory/Folder aan CreateFile(); zodat de CreateFile 11x schrijft met een file groote van 15Kb en dit herhaalt kan worden voordat de Arduino door zijn SDFat16/32 het schrijven naar files begint te blokkeren.
dit in totaal 16 Gigabyte moet vullen.

Mijn Dank is al groot voor de moeite die je me hebt proberen bij te brengen.

JO3RI

Ik zal wel verkeerd zijn, maar volgens mij is 16gb teveel. Ik dacht altijd dat je enkel de standaard sd kan gebruiken van max 4gb (of zelfs 2gb)
http://www.JO3RI.be

Nederlandstalige sectie - http://arduino.cc/forum/index.php/board,77.0.html -

evermore99

Hallo Goede avond Arduino Fans,

hierbij het volgende.

1 Ik ben wat verder gekomen door niet met Voids te werken,
2 data in files en deze files in mappen te schrijven
3 maar dan komt de volgende uitdaging. Wat ik niet begrijp is het volgende
creeer 8 files schrijf een nieuwe map en creeer weer nieuwe 8 files met dezelfde nummers.
waarom kan ik niet meer schrijven? en waar ga ik de Fout in?

Jantje

Zoek eens naar 8 in je code.
Je doet een test na createfile voor 8 en dan een create dir en dan weer create file.
Das recursief programmeren wat voor experts soms a moeilijk is om te begrijpen.
Voor elke file die je opent moet je die ook sluiten.
Probeer je code wat te organiseren want nu is die echt niet te lezen.
Maak eerst eens een simpel programma waar je bv 3 maal na elkaar een lege file aanmaakt en sluit.
Dat zou je een beter begrip moeten geven. Nu met de extra code voor RTC en een grote file aanmaken en de pinnen maakt het heel onleesbaar
In het kort: probeer eerst te stappen en dan pas lopen
Met vriendelijke groet
Jantje
Do not PM me a question unless you are prepared to pay for consultancy.
Nederlandse sectie - http://arduino.cc/forum/index.php/board,77.0.html -

Go Up