Pomoc s programem - arduino uno

Raspberry, Arduino, Mini-PC a další

Moderátor: Moderátoři

Zpráva
Autor
Uživatelský avatar
luki28n
Příspěvky: 23
Registrován: 06 bře 2018, 01:00

#31 Příspěvek 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
}

Uživatelský avatar
FHonza
Příspěvky: 1443
Registrován: 20 lis 2012, 01:00
Bydliště: Praha

#32 Příspěvek od FHonza »

no to je totéž co sem ti psal :)

Uživatelský avatar
luki28n
Příspěvky: 23
Registrován: 06 bře 2018, 01:00

#33 Příspěvek 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

Uživatelský avatar
luki28n
Příspěvky: 23
Registrován: 06 bře 2018, 01:00

#34 Příspěvek 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();
    
    
 

Uživatelský avatar
luki28n
Příspěvky: 23
Registrován: 06 bře 2018, 01:00

#35 Příspěvek 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..

Uživatelský avatar
Atlan
Příspěvky: 4499
Registrován: 10 kvě 2004, 02:00
Bydliště: Košice

#36 Příspěvek 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?

Uživatelský avatar
luki28n
Příspěvky: 23
Registrován: 06 bře 2018, 01:00

#37 Příspěvek 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

Uživatelský avatar
luki28n
Příspěvky: 23
Registrován: 06 bře 2018, 01:00

#38 Příspěvek 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.

Uživatelský avatar
FHonza
Příspěvky: 1443
Registrován: 20 lis 2012, 01:00
Bydliště: Praha

#39 Příspěvek od FHonza »

Dej sem prosim odkaz na knihovnu SD, kterou používáš.

Odpovědět

Zpět na „Miniaturní počítače (Arduino, Raspberry a další)“