Witam. Chcę zrobić stoper z funkcją zapisu na SD. Jednak mam gdzieś błąd w kodzie, bo układ raz działa a raz nie. Pomoże ktoś ?
#include <TimerOne.h> /biblioteka obsługi timera
#include <SD.h> //biblioteka do obsługi kart SD
File plik; //tworzymy obiekt, który będzie przechowywać informacje konieczne do prowadzenia operacji na plikach
void setup(){
Timer1.initialize();//inicjalizujemy Timer1
Timer1.setPeriod(1000);//przerwanie co 1000 us = 1 ms
Timer1.attachInterrupt(ms_tick);
attachInterrupt(INT0,klik,FALLING);
//przycisk
pinMode(2,INPUT);
digitalWrite(2,HIGH);
pinMode(6,OUTPUT); //dioda sygnalizująca poprawność inicjalizacji karty
digitalWrite(6,LOW);
pinMode(10,OUTPUT);//ustawiam pin 10, podłączony do pinu CS karty jako wyjście
if(SD.begin(10)){ //sprawdzam czy karta jest w slocie
digitalWrite(6,HIGH);
}else{
digitalWrite(6,LOW);
while(1);
}
}
volatile unsigned int ms=0;
volatile unsigned int s=0;
volatile boolean flaga=0;
volatile boolean koniec=0;
void loop(){
if(flaga==1) {
plik=SD.open("czasy.txt",FILE_WRITE); //otwieram plik do zapisu
if(plik) { //sprawdzam czy poprawnie otwarty
plik.print(s,DEC);
plik.print(".");
if(ms<100)plik.print("0");
if(ms<10)plik.print("0");
plik.print(ms,DEC);
plik.println(" s");
plik.close(); //zamykam plik
flaga=0;
}
}
if(digitalRead(2)==1){
delay(10);
koniec=1;
}
}
void ms_tick(){
ms++;
if(ms==1000){
ms=0;
s++;
}
}
void klik() {
detachInterrupt(INT0);
flaga=1;
delay(10);
if(koniec==1)attachInterrupt(INT0,klik,FALLING);
}