• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
zapis daty na microSD
#1
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;
}
 
Odpowiedź
#2
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.
[Obrazek: banerelektronika.jpg]



Jeśli pomogłem podziękuj punktem reputacji Wink
 
Odpowiedź
#3
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ć ??
 
Odpowiedź
#4
Za często to robisz i prawdo podobnie otwierasz i zamykasz plik co chwila .
[Obrazek: banerelektronika.jpg]



Jeśli pomogłem podziękuj punktem reputacji Wink
 
Odpowiedź
#5
hmm, zmieniłem czas żeby zapisywało co minutę i niestety nic to nie zmieniło ;(
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości