INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
sd.h mit tinyFat.h kombinieren?
15.06.2014, 12:47 (Dieser Beitrag wurde zuletzt bearbeitet: 19.06.2014 18:44 von ArduTux.)
Beitrag #1
sd.h mit tinyFat.h kombinieren?
Hallo Arduino´s
Ich möchte jetzt mal Wissen ob ich die beiden Librays zusammen in einem Sketch Laden kan?
tinyFat => Weil ich die Images.raw (format) von SD-Card lade. Zusammen mit seiner UTFT_tinyfat
sdFat weil die gut mit SD-Card umgehen kann.

Aufgabe die ich zu lösen gedenke ist: Bei meinem "Arduino-Coden" Talent habe ich es geschafft, in meinem Sketch über 500 Files Speichern zu wollen Confused Die tinyFat macht Probleme. Für die Bildchen ganz nett, aber sonst wars das auch.

Jetzt könnte ich an den Author der tinyFat ne Mail schreiben. Dort fragen wann Updates laufen, oder ob überhaupt welche geplant sind. Oder ich frage mal hier im Forum, was ich sonst anstellen kann.

Ich habe bei der tinyFat Probleme beim Speichern meiner Files die nur ins root abgelegt werden können. Ich schaffe nichteinmal die 512 Files Grenze für´s root zu erreichen. Nach dem 12. File sowas is schluss und es passieren ungewollte Sachen mit den Files und deren Inhalte.

Kann ich jetzt einfach die beiden Lib´s zusammen laufen lassen? Wenn ja Wie? Mein erster Versuch die Libs einfach stumpf im setup zu Laden ging schief Rolleyes

gruß

In unserer Gesellschaft ist das Gehirn am gerechtestesten Verteilt! Jeder glaubt, er habe genug davon.
Hardware: SainSmart Mega 2560 R3 + 3,2" LCD-Touch-Screen
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
16.06.2014, 13:13
Beitrag #2
RE: sdFat mit tinyFat kombinieren?
Moin moin,

Zitat:Mein erster Versuch die Libs einfach stumpf im setup zu Laden ging schief
Hast du mal die Compilermeldungen dazu und ein Stück Code?

Grüße RK

Nüchtern betrachtet...ist besoffen besser Big Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
17.06.2014, 11:17 (Dieser Beitrag wurde zuletzt bearbeitet: 17.06.2014 18:23 von ArduTux.)
Beitrag #3
RE: sdFat mit tinyFat kombinieren?
Moinsens
Öhhm, beim Kombilieren/Upload gabs keine Fehlermeldungen. Ich finde den Sketch nicht wieder den ich vor paar Tagen gebaut hab um mit der SDfat zu arbeiten. Aber die SD default tut es ja auch.

Hier mein Header mit allem was ich an Libs verwende.

Zitat://##############################################################
//**************************************************************************** -LIBRARYS
//##############################################################
//------------------------------------------------------------- -Library Real-Time-Clock
#include <Wire.h>
#include <DS1307RTC.h>
#include <Time.h>
#include <TimeAlarms.h>
//----------------------------------------------------------- -Library TFT Touch Screen
#include <UTFT.h>
#include <UTouch.h>
//-------------------------------------------------------- -Library Sensor for TemP-RLF
#include <dht11.h>
//-------------------------------------------------------- -Library for Our Relay Shields
#include <relay8.h>
//---------------------------------------------------- -Library for SD Card read Images
#include <tinyFAT.h>
#include <avr/pgmspace.h>
#include <UTFT_tinyFAT.h>
#include <SD.h>
//------------------------------------------------------------- -Library String to Integer
#include <stdio.h>
#include <stdlib.h>
//##############################################################
//**************************************************************************** -DECLARE
//##############################################################
//----------------------------------------------------------- -Declare Touch Screen LCD
UTFT myGLCD(ITDB32S, 38, 39, 40, 41);
UTouch myTouch(6,5,4,3,2);
//------------------------------------------------------------ -Declare SD-CARD INSTANZ
UTFT_tinyFAT myFiles(&myGLCD);
File sdFile;
//------------------------------------------------------- -Declare DHT11-PIN Temp1/RLF1
dht11 DHT111;
#define DHT111PIN 11
//------------------------------------------------------- -Declare DHT11-PIN Temp2/RLF2
dht11 DHT112;
#define DHT112PIN 12
//--------------------------------------------- -Declare Our Relay Pins-(A0-A15=D54-69)
relay8 relay0(58, 59, 60, 61, 62, 63, 64, 65); //(A3-A10=D56-63)
relay8 relay1(66, 67); //(A6-A7=D64-65)
//------------------------------------------------------------------------ -Call Fonts
extern uint8_t SmallFont[];
extern uint8_t BigFont[];
//##############################################################

Und Hier das Komplette Setup
Zitat://###################################################################
void setup(){
//--------------------------------------------------------- -INITIATE LCD FOR LANDSCAPE
myGLCD.InitLCD(LANDSCAPE);
//------------------------------------------------ -INITIATE TOUCH-SCREEN FOR LANDSCAPE
myTouch.InitTouch(LANDSCAPE);
myTouch.setPrecision(PREC_HI);
//----------------------------------------------------------- -
pinMode(53, OUTPUT);
//---------------------------------------------------- -INITIATE SD-CARD TO LOAD IMAGES
file.setSSpin(53);
sderror=file.initFAT(SPISPEED_VERYHIGH);
if (sderror!=NO_ERROR){
myGLCD.print(verboseError(sderror), CENTER, 155);
while (true) {
delay(2000);
break;
}
}
//-------------------------------------------------- -INITIATE SD-CARD TO LOAD SETTINGS
if (!SD.begin(53)) {
myGLCD.print("initialization failed!", CENTER, 145);
delay(2000);
}
//--------------------------------------------------------- -LOAD SETTINGS FROM SD-CARD
Load_Settings();
//------------------------------------------------------- -LOAD GRAPH-DATA FROM SD-CARD
Load_Graph_Data();
//----------------------------------------------------------------------- -GET RTC-TIME
setSyncProvider(RTC.get);
if(timeStatus()!= timeSet)
myGLCD.print("Unable to sync with the RTC", CENTER, 155);
delay(2000);
//------------------------------------------------------------- -LDR-ALARM PIN-SETTINGS
pinMode(ldr1_pin, INPUT);
pinMode(ldr2_pin, INPUT);
//------------------------------------------------------ - UPDATE SENSOR-DATA INTERVALS
updatetime = millis();
READ_ALL_DHT11();
UPDATE_HYST_STATS();
//------------------------------------------------------------------- -LOAD HOME-SCREEN
Screen_select_false();
Dock_Screens(0,0,0);
home_screen = true;
//------------------------------------------------------------------ - Start Idle-Check
idle_start = minute();
screen_fade = 0;
//------------------------------------
Check_Lights_Status();
}
//###################################################################

Vorher ist es so gewesen das er mit tinyFat in der Funktion "Load_Settings()" alle Daten aus der "root /" der SD-Card gelesen hat =>
Code:
file.openFile("T1P0Y1.TXT", FILEMODE_TEXT_READ);
file.readLn(atoi_read_buffer, 2);
T1P0Y1= atoi(atoi_read_buffer);
file.closeFile();
Jetzt hab ich die Files in Verzeichnisse aufgeteilt und er soll jetzt die SD.h oder die SDfat.h benutzen um aus den Verzeichnissen die Daten zu Laden. Die tinyFat kan das ja leider nicht.
Code:
sdFile = SD.open("/GRAPH/T1P0Y1.TXT");
if (sdFile) t1p0y1 = sdFile.read();
sdFile.close();

Nun hängt er im Setup beim Laden der Graph-Daten, da scheint wohl noch nen Fehlerteufel drin zu stecken.
Wenn ich das alles richtig kapiert hab sollte es doch so laufen und er schreibt mir die Integer mit den Daten von SD voll.

EDIT:
Ich hab mich jetzt soweit rangearbeitet, so das ich inner Console alle werte zu lesen bekomme.
Jetzt muss ich noch rausfinden wie ich diese max 8bit da in ein Integer übergeben bekomme.
Code:
sdFile = SD.open("/GRAPH/T1P0Y1.TXT");
if (sdFile) {
Serial.println("T1P0Y1:");
while (sdFile.available()) {
Serial.write(sdFile.read());
}
sdFile.close();
}


gruß

In unserer Gesellschaft ist das Gehirn am gerechtestesten Verteilt! Jeder glaubt, er habe genug davon.
Hardware: SainSmart Mega 2560 R3 + 3,2" LCD-Touch-Screen
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
17.06.2014, 20:29
Beitrag #4
RE: sdFat mit tinyFat kombinieren?
So Ihr lieben Arduino´s Rolleyes

Ich habe jetzt einen Beitrag gefunden der mir wohl den "Kick" gegeben hatte. Ich werde jetzt versuchen für die jeweilige Uhrzeit gleich alle 4 Datensätze in ein File zu Schreiben. Diese Seite HIER hat mir das eingebrockt. Tongue

Wie ich das ganze beim System-Start einlesen könnte habe ich mir wie folgt zusammengebastelt. =>
Code:
#include <SD.h>

File myFile;

int t1p0y1,h1p0y1,t2p0y1,h2p0y1;

void setup(){
Serial.begin(115200);

Serial.print("Initializing SD card...");
pinMode(53, OUTPUT);

if (!SD.begin(53)) {
Serial.println("initialization failed!");
return;
}
Serial.println("initialization done.");
//##########################################
//##########################################- 0-Uhr
myFile = SD.open("/GRAPH/0UHR.TXT");
while (myFile.available()) {
bool h1p0y1_present, t2p0y1_present, h2p0y1_present;
t1p0y1 = myFile.parseInt();
h1p0y1_present = false;
t2p0y1_present = false;
h2p0y1_present = false;
if (myFile.read() == ';') {
h1p0y1_present = true;
h1p0y1 = myFile.parseInt();
if (myFile.read() == ';') {
t2p0y1_present = true;
t2p0y1 = myFile.parseInt();
if (myFile.read() == ';') {
h2p0y1_present = true;
h2p0y1 = myFile.parseInt();
}
}
}
myFile.close();
}
// Zur Kontrolle in die Console Schreiben. Kann ich später weg lassen.
Serial.println(t1p0y1);
Serial.println(h1p0y1);
Serial.println(t2p0y1);
Serial.println(h2p0y1);
}
void loop(){
}

Jetzt muss ich mir noch irgendwo das Schreiben der Files in die Verzeichnisse zusammen basteln.
Ich arbeite auf der SD-Card jetzt mit Verzeichnissen für den Graph, die Hysterese, die Timer die Images.raw bleiben in der root.

Wie ich meine Images auch ohne Hennig Karlsen "myGLCD tinyFat" so schön auf das Touch-Screen bekomme ist eine andere Baustelle. Rolleyes

Ich kämpfe weiter und halte den Thread hier aktuell.

gruß

In unserer Gesellschaft ist das Gehirn am gerechtestesten Verteilt! Jeder glaubt, er habe genug davon.
Hardware: SainSmart Mega 2560 R3 + 3,2" LCD-Touch-Screen
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
19.06.2014, 17:32
Beitrag #5
RE: sdFat mit tinyFat kombinieren?
UPDATE:
Lesen von SD kan ich ja jetzt Smile Das Schreiben erledige ich zur Zeit so =>
Code:
//[#SGP0]#####################################
//***************************** -SAVE GRAPH-POINT 0-Uhr
//###########################################
void SAVE_GRAPH_POINT_0(){
//------------------------------------------------------- -delete old File
SD.remove("/HYST/0UHR.TXT");
delay(100);
//------------------------------------------------------------- -open File
sdFile = SD.open("/HYST/0UHR.TXT", FILE_WRITE);
if (sdFile){
//------------------------------------------------ -write new Data to File
sdFile.print(t1p0y1);
sdFile.print(";");
sdFile.print(h1p0y1);
sdFile.print(";");
sdFile.print(t2p0y1);
sdFile.print(";");
sdFile.print(h2p0y1);
sdFile.print(";");
//------------------------------------------------------------ -close File
sdFile.close();
}
//--------------------------------------------------------- -error massage
else {
myGLCD.print("ERROR opening 0UHR.TXT", CENTER, 190);
delay(1000);
}
//------------------------------------------------------------------ -done
load_default_screen();
}
//###########################################

Bestimmt gibt es noch ne einfachere Lösung damit der Code nicht zu groß wird.
Am Anfang muss ich das so machen weil ich sonst nichts mehr selbst nachvollziehen kann.

Irgendwann muss ich da eh etwas verändern da ich jetzt bei =>
Code:
Binäre Sketchgröße: 146.636 Bytes (von einem Maximum von 258.048 Bytes)

Lesen Speichern von SD ist erstmal als Fertig Deklareirt Tongue

gruß

In unserer Gesellschaft ist das Gehirn am gerechtestesten Verteilt! Jeder glaubt, er habe genug davon.
Hardware: SainSmart Mega 2560 R3 + 3,2" LCD-Touch-Screen
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
19.06.2014, 19:21
Beitrag #6
RE: sd.h mit tinyFat.h kombinieren?
Hallo ArduTux,

du bist ja offensichtlich richtig am ackern. Sehr löblich Smile
Was die Speichergröße angeht mal ein paar Vorschläge:
Code:
sdFile.print(";");
Würde ich mit dem F Macro versehen:
Code:
sdFile.print(F(";"));
Genauso die Serial.print() - Aufrufe. Geht aber beides nur bei Übergabe von Strings, bei Variablen nicht.
Ich habe in den Code-Schnipseln keine dataAvailable() - Aufrufe gesehen. Machst du Eingaben über das GLCD ? Wenn nicht kann die UTouch.h raus.
Sowas wie
Code:
relay8 relay0(58, 59, 60, 61, 62, 63, 64, 65);
als
Code:
const relay8 relay0(58, 59, 60, 61, 62, 63, 64, 65);
definieren, da ja feste Werte.
Wenn du alle Funktionen in eine Sketchdatei schreibst kannst du alle Funktionen, ausser setup() und loop() als "static" definieren.

Nur so nebenbei.

Grüße Ricardo

Nüchtern betrachtet...ist besoffen besser Big Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
19.06.2014, 20:58 (Dieser Beitrag wurde zuletzt bearbeitet: 19.06.2014 21:12 von ArduTux.)
Beitrag #7
RE: sd.h mit tinyFat.h kombinieren?
Huhu Smile

Zitat:Ich habe in den Code-Schnipseln keine dataAvailable() - Aufrufe gesehen. Machst du Eingaben über das GLCD ? Wenn nicht kann die UTouch.h raus.

Ja ich benutze das Touch für die Eingabe von Werten die im Grunde auch vorgegeben werden können.
Aber ich schlepp ja nich immer nen Lappi mit mir rum Wink um neue Daten zu Laden.

Ich kann über das Touch-Screen
Temp/RLF Hysterese 1+2
PH/EC Hysterese 1+2 (Hier fehlen aber noch die Hardware Sensoren inkl. Meßumformer etc. aber noch nicht festgelegt.)
Sunset/Sunrise 1+2
je 4 Timer für Wasserversorgung 1+2
4 Timer für Sauerstoff/Stickstoff Zufuhr oder ähnliches.
EDIT:
Manual/Automatik für Temp/RLF und Sunset/Sunrise 1+2, Wasserversorgung 1+2, Sauerstoff/Stickstoff Zufuhr is auch schon drin Smile Wobei Temp nen Ausgang für Belüftung ist und RLF nen Ausgang für Luftbefeuchter oder Lüfter etc. eingeplant ist.

Was am Ausgang dran hängt is ja am Ende wurscht.
Sowas könnte man für Terrarium/Aquarium oder so etwas fest Coden.
Ich habe noch keine wirkliche Verwendung.
Das ist nur das was in vielen Anfänger WIKI´s und evtl. Berufsschulen immer wieder Vorkommt. Temp/RLF & Co Standards Übungen. Smile

Was mich direckt zu meiner nächsten Frage bringt Wink

Ich habe ja für PH/EC Hysterese eine UP/DOWN Vorgabe wo im Code ja "dobble" eingesetzt ist.

Wie speichere ich jetzt diese dobble auf SD? Mit den Integer geht es ja wunderbar zum Nachvollziehen for beginners Smile

Im Anhang habe ich den Kompletten TAB von meinem SKETCH wo ich die Hysterese Einstellungen für PH/EC drin stehen hab. Ich muss ja bei diesen Werten +/-0.1 anders heran gehen als wie bei den Integer für Temp/RLF

gruß

In unserer Gesellschaft ist das Gehirn am gerechtestesten Verteilt! Jeder glaubt, er habe genug davon.
Hardware: SainSmart Mega 2560 R3 + 3,2" LCD-Touch-Screen
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
20.06.2014, 17:46 (Dieser Beitrag wurde zuletzt bearbeitet: 20.06.2014 17:47 von rkuehle.)
Beitrag #8
RE: sd.h mit tinyFat.h kombinieren?
Hallo Ardu,
Zitat:Was mich direckt zu meiner nächsten Frage bringt
Wo war die erste Frage Huh
Zur zweiten Frage guckst du hier:
Code:
// Druckt einen Wert mit einer Anzahl von Dezimalstellen
// Precision + Anzahl der Nullen entspricht Anzahl der gwünschten Dezimalstellen nach dem Dezimalpunkt
// Beispiel: printDouble( 3.1415, 100); // Druckt 3.14 (zwei Dezimalstellen)
void printDouble( double val, unsigned int precision) {
  sdFile.print (int(val));  // int Anteil
  sdFile.print("."); // Dezimalpunkt
  unsigned int frac;
  if (val >= 0)
    frac = (val - int(val)) * precision;
  else
    frac = (int(val) - val ) * precision;
  int frac1 = frac;
  while ( frac1 /= 10 )
    precision /= 10;
  precision /= 10;
  while (  precision /= 10)
    sdFile.print("0");
  sdFile.println(frac, DEC) ;
}
Bist du dir sicher dass du double verwenden musst? Bei +/- 0.1 eher nicht.
float kann bis zu 7 Gesamtstellen (vor dem Dezimalpukt + Dezimalpunkt + nach dem Dezimalpunkt) haben, double jedoch 15 Gesamtstellen.
Das Entscheidende dabei:
float braucht auf allen Arduinos 4 Byte, double auf fast allen Arduino ebenfalls 4 Byte, jedoch auf dem Arduino Due 8 ByteExclamation
Double rechnet auch wesentlich länger und erzeugt mehr Maschinencode.
Nur als Hinweis.

Grüße Ricardo

Nüchtern betrachtet...ist besoffen besser Big Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  handle read-write dir-files with tinyFat ArduTux 4 1.346 29.05.2014 22:03
Letzter Beitrag: ArduTux

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste