Pomoc s programem - arduino uno
Moderátor: Moderátoři
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
}
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
}
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á
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();
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..
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..
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
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
Po pravdě jsem z toho úplně mimo.. toto je základní program, který mi funguje a na SD kartu zapisuje data
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.
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.