Stránka 3 z 3
Napsal: 13 dub 2018, 12:56
od luki28n
programování v Céčku snad máme v osnovách ve škole a protože zrovna maturuji, měl bych to mít už za sebou

ale co si budem, trochu jsem to pozapomněl.
Každopádně jsem našel velmi elegantní způsob, jak to vyřešit
unsigned long predchozicas=0;
int interval = 1000;
void loop()
unsigned long aktualnicas = millis();
if ((unsigned long)(aktualnicas - prechozicas) >= interval)
{
predchozicas = aktualnicas;
// a vykoná se program
}
Napsal: 13 dub 2018, 13:10
od FHonza
no to je totéž co sem ti psal

Napsal: 13 dub 2018, 13:14
od luki28n
já si vůbec nevšimnul tvé první zprávy, omlouvám se.. děkuji ti moc
na ten formát kódu kouknu.. je to má maturitní práce, mohlo by to vypadat

Napsal: 13 dub 2018, 17:15
od luki28n
tak se sem, snad už naposledy, obracím s prosbou o pomoc. Poslední, co mi zbývá je každý příchod a jeho čas zapsat na SD kartu.. SD karta se inicializuje, ale nejde zapisovat do souboru, nevíte čím to je?
tady je část kódu za to zodpovědná
Kód: Vybrat vše
else if ((pressedKey[0] == code2[0]) && (pressedKey[1] == code2[1]) && (pressedKey[2] == code2[2]) && (pressedKey[3] == code2[3]))
{
lcd.print("Vitej mami");
zamceno=0;
delay(2000);
lcd.clear();
// vynuluj stiskuté tlačítka
pressedKey[0] = '0';
pressedKey[1] = '0';
pressedKey[2] = '0';
pressedKey[3] = '0';
char cas[15];
sprintf(cas, "%02d.%02d.%02d %02d:%02d", rtc[4],rtc[5],rtc[6],rtc[2],rtc[1]);
String dataString = ""; // inicializuje proměnou pro data
dataString = cas; // čas do proměné data
dataString = cas; // čas do proměné data
dataString = dataString + " - Mamka "; // vhodný oddělovač
File dataFile = SD.open("data.txt", FILE_WRITE);
dataFile.println(dataString);
dataFile.close();
Napsal: 14 dub 2018, 15:15
od luki28n
Tak pořád od včera večer se mi to nepovedlo zprovoznit. Zkoušel jsem jiné knihovny a stále nic. Když to zkusím jako samostatný program, který má umět jen toto (zapojím jen arduino, RTC modul a modul na paměťovku a každých 5 sekund to zapíše čas), tak to vše perfektně funguje.
Nevíte někdo, kde můžu najít chybu? Je zvláštní, že samostatně to funguje, tak nevim, jestli se ty dva programy perou..
Napsal: 14 dub 2018, 15:49
od Atlan
A ta sdkarta mieje na rovnakych pinoch ako lcd displej alebo klavesnica?
V tom alarmovom programe ide zapisatnieco na kartu napr jeden znak? ( bez toho zeby si saskoval s rtc modulom a jeho premenimi?
Napsal: 14 dub 2018, 16:03
od luki28n
Není, to jsem si ještě kontroloval
hodím sem schéma zapojení
akorát v návodu je to takto
MOSI - pin 11 na Arduino Uno/Duemilanove/Diecimila
MISO - pin 12 na Arduino Uno/Duemilanove/Diecimila
CLK - pin 13 na Arduino Uno/Duemilanove/Diecimila
CS - pin 4 na Arduino Uno/Duemilanove/Diecimila
a já tam nemám CLK, ale SCK napsané, na tom microSD adaptéru, tak třeba v tom je chyba..
přes I2C sběrnici mám display a RTC modul, to je vše..
teď jsem ještě jednou zkoušel v tom programu jen napsat jedno slovo pokud zadám to heslo a nic se nestalo
Napsal: 14 dub 2018, 20:38
od luki28n
Po pravdě jsem z toho úplně mimo.. toto je základní program, který mi funguje a na SD kartu zapisuje data
Kód: Vybrat vše
#include <WProgram.h>
#include <Wire.h>
#include <DS1307.h>
#include <SD.h>
// vytvoří pole čísel do kterých se bude ukládat čas
int rtc[7];
// CS pro četčku karet na pinu 4
// (pro Arduino UNO a Ethernet Shield
const int chipSelect = 4;
void setup()
{
// nastaví seriovou komunakaci na 9600
Serial.begin(9600);
Serial.print("Inicializace SD karty...");
// make sure that the default chip select pin is set to
// output, even if you don't use it:
pinMode(10, OUTPUT);
// see if the card is present and can be initialized:
if (!SD.begin(chipSelect)) {
Serial.println("/nKarta nenalezena...");
// don't do anything more:
return;
}
Serial.println("/n Karta inicializovana...");
}
void loop()
{
// zapíše data z modulu do pole čísel rtc
RTC.get(rtc,true);
// připraví pole znaků pro čas
char cas[9];
// zapíše do pole znaků cas hodnoty z rtc
sprintf(cas, "%02d:%02d:%02d", rtc[2],rtc[1],rtc[0]);
String dataString = ""; // inicializuje proměnou pro data
dataString = cas; // čas do proměné data
dataString = dataString + " :"; // vhodný oddělovač
dataString = dataString + String(analogRead(0));
// otevře soubor data.txt
File dataFile = SD.open("data.txt", FILE_WRITE);
// když soubor existuje zapíše do něj
if (dataFile) {
// samotný zápis - zapíše a skočí na nový řádek
dataFile.println(dataString);
dataFile.close();
Serial.print("Zapisuji do souboru data - ");
Serial.println(dataString);
}
// při chybě vypíše hlášku
else {
Serial.println("Chyba - nemohu otevřít soubor !!!");
}
// Čeká 5 sekund
delay(5000);
}
Stačí z něj ale jen odstranit tu kontrolu přes sériový kanál a už se nic nezapisuje a nefunguje to. A já jsem absolutně v koncích a nechápu, ke je chyba.
Napsal: 16 dub 2018, 09:43
od FHonza
Dej sem prosim odkaz na knihovnu SD, kterou používáš.