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 :D 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 :oops:


na ten formát kódu kouknu.. je to má maturitní práce, mohlo by to vypadat :D

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í

Obrázek


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áš.