Arduino Polska Forum

Pełna wersja: zapis daty na microSD
Aktualnie przeglądasz uproszczoną wersję forum. Kliknij tutaj, by zobaczyć wersję z pełnym formatowaniem.
Witam,
mam pewien problem, za pomocą Arduino Yun chce realizować pewien program ,który zlicza impulsy od kontaktronu poprzez przerwanie zewnętrzne oraz co 30s chce generować przerwanie od timera który zapisze stan licznika na kartę pamięci. Aby zwiększyć szybkość wykonywania się kodu w funkcji Setup chce zapisywać na kartę datę i godzinę tylko przy uruchamianiu programu. Tutaj właśnie jest problem bo gdy po odłączeniu zasilania i ponownym podłączeniu nie zapisuję na karcie daty , natomiast zapis stanu licznika jest realizowany prawidłowo , poniżej kod programu .
Będe wdzięczny za każdą rade bo siedzę nad tym już sporo czasu .
Kod:
#include <Bridge.h>
#include <Timers.h>
#include <Wire.h>
#include <DS3231.h>
#include <FileIO.h>

Timers<1>akcja;

DS3231 clock;
RTCDateTime dt;

volatile int licznik = 0;

void setup() 
{
  pinMode(13, OUTPUT);
  pinMode(2, INPUT_PULLUP);
  Bridge.begin();
  FileSystem.begin();
  attachInterrupt(1,przycisk,FALLING);
  Serial.begin(9600);
  akcja.attach(0,30000,zapis);
  clock.begin();
  //clock.setDateTime(__DATE__, __TIME__);
  
  dt = clock.getDateTime();
  File dataFile = FileSystem.open("/mnt/sd/datalog.txt", FILE_APPEND);
  if (dataFile) 
  {
   dataFile.println(clock.dateFormat("d-m-Y H:i: s", dt));
  }
  
}

void loop() 
{
  akcja.process();  
}

void zapis()

 digitalWrite(13,HIGH);
   if(dataFile)
   {
    dataFile.println(licznik);
    dataFile.close();
    digitalWrite(13,LOW);
   }
 licznik=0; 
}


void przycisk()
{
  static unsigned long lastTime;
  unsigned long timeNow = millis();
  
  if (timeNow - lastTime < 25)
    return;
   licznik++;
   lastTime = timeNow;
}
Po pierwsze daj tam małego delaya po drugie zrób to w pod programie void data(){//kod}
pomiędzy loop a setup bo w setup mogą niektóre funkcje nie działać ale raczej powinna.
Dzięki za radę , faktycznie pomogło Wink
ale mam następny problem , zapis zmiennej "licznik" odbywa się co 30 sekund, i tutaj się program zawiesza w sensie dioda sygnalizująca zapis zaświeca się ale fizycznie nie zawsze zapisuję , raz zapiszę się 5 razy raz 40 razy, nie ma reguły , czy może być zbyt mały czas na zapis i system nie zdąży zapisać ??
Za często to robisz i prawdo podobnie otwierasz i zamykasz plik co chwila .
hmm, zmieniłem czas żeby zapisywało co minutę i niestety nic to nie zmieniło ;(