Zaslal: ne srpen 23 2015, 17:51 Předmět: ARDUINO - funkce pro zapis na SD kartu - VYŘEŠENO
Zdravím,
nějak jsem se zasekl s funkcí pro zápis na SD, tak bych tu chtěl někoho
z Vás požádat o radu.
Program viz níže zapisuje na SD kartu dobu běhu přístroje podle delay,
tedy každých 10s a já bych potřeboval, aby ten program fungoval trochu
jinak.
Přesněji, že pokud bude "Dobabehu" = např: 2 minuty, tak to spustí funkci pro zápis na SD a zapíše ji to tam.
Nějak přesně nevím, jak to správně zapsat, aby mi to takhle fungovalo?
Předem děkuji za pomoc
kód:
#include <SD.h>
File myFile;
char Dobabehu[19];
int vterin = 0; //pro cas doby behu pristroje
int minut = 0; //pro cas doby behu pristroje
int hodin = 0; //pro cas doby behu pristroje
int dny = 0; //pro cas doby behu pristroje
void setup() {
Serial.begin(9600);
//------------------------------------nacteni SD karty
while (!Serial) {
; // wait for serial port to connect. Needed for Leonardo only
}
Serial.print("Hledam SD kartu...");
Serial.print("Doba behu - ");
Serial.println(Dobabehu);
//----------------------------------------zacatek zapisu na SD
// nothing happens after setup
myFile = SD.open("test.txt", FILE_WRITE);
// if the file opened okay, write to it:
if (myFile) {
Serial.print("Writing to test.txt...");
myFile.print(Dobabehu);
myFile.print(" ; ");
} else {
// if the file didn't open, print an error:
Serial.println("error opening test.txt");
}
//-------------------------------------------konec zapisu na SD
//-----------------------------------------doba behu pristroje
vterin = vterin + 10; // přičtem další vteřinu
if (vterin == 60){ // pokud je vteřin 60
vterin = 0; // vynulujem vteřiny
minut ++; // přičtem minutu
}
if (minut == 60){ // pokud je minut 60
minut = 0; // vynulujem minuty
hodin ++; // přičtem hodinu
}
if (hodin == 24){ // pokud je hodin 24
hodin = 0; // vynulujem hodiny
dny ++; // prictem den
}
//char Dobabehu[19];
sprintf(Dobabehu, "Dny: %d - %02d:%02d:%02d", (dny),(hodin),(minut),(vterin));
//------------------------------------konec doby behu pristroje
delay(10000); //opakovani
}
Naposledy upravil jiri255 dne ne srpen 23 2015, 20:06, celkově upraveno 1 krát.
pomocí millis to právě řešit nechci, a delay je tam taky jen, aby ten program běžel může být nastaveno na 10000,30000 nebo 50000 na tom nezáleží jde o to, aby pokud je "dobabehu" = 2minuty, tak to provede zápis na kartu....
Mas jeden loop, kterej by rad rotoval a delal co ma, jen na konci ho bloknes na 10sekund.
Pokud bys vyjmul to zapisovani a dal si ho napriklad do podprogramu, kterej si zavolas podle nejaky svy podminky, bude ti zapisovat prave tehdy, co ho zavolas.
Podminka kazde 2 minuty je napriklad modulo minuty, tzn. %minuty.
Navic nikde v programu nevidim Dobubehu zavislou na vypoctu z vterin,minut,hodin a dnu.
Naposledy upravil Cowley dne ne srpen 23 2015, 18:41, celkově upraveno 1 krát.
jj přesně tak, napadá mě udělat s toho zápisu na SD něco jako níže a odsunout to na konec programu za loop.
Jen nevím, jak zapsat tu podmínku...
kód:
int getSDzapis() {
//----------------------------------------zacatek zapisu na SD
// nothing happens after setup
myFile = SD.open("test.txt", FILE_WRITE);
// if the file opened okay, write to it:
if (myFile) {
Serial.print("Writing to test.txt...");
myFile.print(Dobabehu);
myFile.print(" ; ");
myFile.close();
Serial.println("done.");
} else {
// if the file didn't open, print an error:
Serial.println("error opening test.txt");
}
//-------------------------------------------konec zapisu na SD
}
tak jsem to upravil snad správně, ale na kartu to nezapisuje,
tak nevím v čem by mohl být problém...
kód:
#include <SD.h>
File myFile;
char Dobabehu[19];
int vterin = 0; //pro cas doby behu pristroje
int minut = 0; //pro cas doby behu pristroje
int hodin = 0; //pro cas doby behu pristroje
int dny = 0; //pro cas doby behu pristroje
void setup() {
Serial.begin(9600);
//------------------------------------nacteni SD karty
while (!Serial) {
; // wait for serial port to connect. Needed for Leonardo only
}
Serial.print("Hledam SD kartu...");
Serial.print("Doba behu - ");
Serial.println(Dobabehu);
//-----------------------------------------doba behu pristroje
vterin = vterin + 10; // přičtem další vteřinu
if (vterin == 60){ // pokud je vteřin 60
vterin = 0; // vynulujem vteřiny
minut ++; // přičtem minutu
}
if (minut == 60){ // pokud je minut 60
minut = 0; // vynulujem minuty
hodin ++; // přičtem hodinu
}
if (hodin == 24){ // pokud je hodin 24
hodin = 0; // vynulujem hodiny
dny ++; // prictem den
}
//char Dobabehu[19];
sprintf(Dobabehu, "Dny: %d - %02d:%02d:%02d", (dny),(hodin),(minut),(vterin));
//------------------------------------konec doby behu pristroje
if (vterin==120)
{getSD();}
delay(10000); //opakovani
}
void getSD() {
//----------------------------------------zacatek zapisu na SD
// nothing happens after setup
myFile = SD.open("test.txt", FILE_WRITE);
// if the file opened okay, write to it:
if (myFile) {
Serial.print("Writing to test.txt...");
myFile.print(Dobabehu);
myFile.print(" ; ");
myFile.close();
Serial.println("done.");
} else {
// if the file didn't open, print an error:
Serial.println("error opening test.txt");
}
//-------------------------------------------konec zapisu na SD
}
no změnil jsem tu podmínku pro zápis na SD
if (vterin==120)
{getSD();}
za
if (minut==2)
{getSD();}
což začalo zapisovat na SD kartu, ale teď to zapisuje nějak divně...
pokud jsou 2 minuty zapisuje to pořád dokud tam neskočí 2:50 a pak
už to nefunguje, mělo by to při 4 minutách zapsat, ale to nic už neudělá
zde je výpis:
kód:
Hledam SD kartu...Karta nalezena.
Doba behu - Dny: 0 - 00:00:10
Doba behu - Dny: 0 - 00:00:20
Doba behu - Dny: 0 - 00:00:30
Doba behu - Dny: 0 - 00:00:40
Doba behu - Dny: 0 - 00:00:50
Doba behu - Dny: 0 - 00:01:00
Doba behu - Dny: 0 - 00:01:10
Doba behu - Dny: 0 - 00:01:20
Doba behu - Dny: 0 - 00:01:30
Doba behu - Dny: 0 - 00:01:40
Doba behu - Dny: 0 - 00:01:50
Writing to test.txt...done.
Doba behu - Dny: 0 - 00:02:00
Writing to test.txt...done.
Doba behu - Dny: 0 - 00:02:10
Writing to test.txt...done.
Doba behu - Dny: 0 - 00:02:20
Writing to test.txt...done.
Doba behu - Dny: 0 - 00:02:30
Writing to test.txt...done.
Doba behu - Dny: 0 - 00:02:40
Writing to test.txt...done.
Doba behu - Dny: 0 - 00:02:50
Doba behu - Dny: 0 - 00:03:00
Doba behu - Dny: 0 - 00:03:10
Doba behu - Dny: 0 - 00:03:20
Doba behu - Dny: 0 - 00:03:30
Doba behu - Dny: 0 - 00:03:40
Doba behu - Dny: 0 - 00:03:50
Doba behu - Dny: 0 - 00:04:00
Doba behu - Dny: 0 - 00:04:10
Doba behu - Dny: 0 - 00:04:20
Podminka minuty==2 je prece splnena jen ve 2.00 pak 2.10 pak 2.20 atd do 2.50 pak uz ne. To uz jsou minuty==3 atd, predtim byly minuty==1. Takhle to nejde. Zkus to s tim ode me.
A cti ty prispevky cele...
Naposledy upravil Cowley dne ne srpen 23 2015, 19:40, celkově upraveno 1 krát.
Časy uváděny v GMT + 1 hodina Jdi na stránku 1, 2Další
Strana 1 z 2
Nemůžete odesílat nové téma do tohoto fóra. Nemůžete odpovídat na témata v tomto fóru. Nemůžete upravovat své příspěvky v tomto fóru. Nemůžete mazat své příspěvky v tomto fóru. Nemůžete hlasovat v tomto fóru. Nemůžete připojovat soubory k příspěvkům Můžete stahovat a prohlížet přiložené soubory
Informace na portálu Elektro bastlírny jsou prezentovány za účelem vzdělání čtenářů a rozšíření zájmu o elektroniku. Autoři článků na serveru neberou žádnou zodpovědnost za škody vzniklé těmito zapojeními. Rovněž neberou žádnou odpovědnost za případnou újmu na zdraví vzniklou úrazem elektrickým proudem. Autoři a správci těchto stránek nepřejímají záruku za správnost zveřejněných materiálů. Předkládané informace a zapojení jsou zveřejněny bez ohledu na případné patenty třetích osob. Nároky na odškodnění na základě změn, chyb nebo vynechání jsou zásadně vyloučeny. Všechny registrované nebo jiné obchodní známky zde použité jsou majetkem jejich vlastníků. Uvedením nejsou zpochybněna z toho vyplývající vlastnická práva. Použití konstrukcí v rozporu se zákonem je přísně zakázáno. Vzhledem k tomu, že původ předkládaných materiálů nelze žádným způsobem dohledat, nelze je použít pro komerční účely! Tento nekomerční server nemá z uvedených zapojení či konstrukcí žádný zisk. Nezodpovídáme za pravost předkládaných materiálů třetími osobami a jejich původ. V případě, že zjistíte porušení autorského práva či jiné nesrovnalosti, kontaktujte administrátory na diskuzním fóru EB.