You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

Timestamp.ino 4.3KB

10 jaren geleden
10 jaren geleden
10 jaren geleden
10 jaren geleden
10 jaren geleden
10 jaren geleden
10 jaren geleden
10 jaren geleden
10 jaren geleden
10 jaren geleden
10 jaren geleden
10 jaren geleden
10 jaren geleden
10 jaren geleden
10 jaren geleden
10 jaren geleden
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  1. /*
  2. * This program tests the dateTimeCallback() function
  3. * and the timestamp() function.
  4. */
  5. #include <SPI.h>
  6. #include "SdFat.h"
  7. SdFat sd;
  8. SdFile file;
  9. // Default SD chip select is SS pin
  10. const uint8_t chipSelect = SS;
  11. // create Serial stream
  12. ArduinoOutStream cout(Serial);
  13. //------------------------------------------------------------------------------
  14. // store error strings in flash to save RAM
  15. #define error(s) sd.errorHalt(F(s))
  16. //------------------------------------------------------------------------------
  17. /*
  18. * date/time values for debug
  19. * normally supplied by a real-time clock or GPS
  20. */
  21. // date 1-Oct-14
  22. uint16_t year = 2014;
  23. uint8_t month = 10;
  24. uint8_t day = 1;
  25. // time 20:30:40
  26. uint8_t hour = 20;
  27. uint8_t minute = 30;
  28. uint8_t second = 40;
  29. //------------------------------------------------------------------------------
  30. /*
  31. * User provided date time callback function.
  32. * See SdFile::dateTimeCallback() for usage.
  33. */
  34. void dateTime(uint16_t* date, uint16_t* time) {
  35. // User gets date and time from GPS or real-time
  36. // clock in real callback function
  37. // return date using FAT_DATE macro to format fields
  38. *date = FAT_DATE(year, month, day);
  39. // return time using FAT_TIME macro to format fields
  40. *time = FAT_TIME(hour, minute, second);
  41. }
  42. //------------------------------------------------------------------------------
  43. /*
  44. * Function to print all timestamps.
  45. */
  46. void printTimestamps(SdFile& f) {
  47. dir_t d;
  48. if (!f.dirEntry(&d)) {
  49. error("f.dirEntry failed");
  50. }
  51. cout << F("Creation: ");
  52. f.printFatDate(d.creationDate);
  53. cout << ' ';
  54. f.printFatTime(d.creationTime);
  55. cout << endl;
  56. cout << F("Modify: ");
  57. f.printFatDate(d.lastWriteDate);
  58. cout <<' ';
  59. f.printFatTime(d.lastWriteTime);
  60. cout << endl;
  61. cout << F("Access: ");
  62. f.printFatDate(d.lastAccessDate);
  63. cout << endl;
  64. }
  65. //------------------------------------------------------------------------------
  66. void setup(void) {
  67. Serial.begin(9600);
  68. // Wait for USB Serial
  69. while (!Serial) {
  70. SysCall::yield();
  71. }
  72. cout << F("Type any character to start\n");
  73. while (!Serial.available()) {
  74. SysCall::yield();
  75. }
  76. // Initialize at the highest speed supported by the board that is
  77. // not over 50 MHz. Try a lower speed if SPI errors occur.
  78. if (!sd.begin(chipSelect, SD_SCK_MHZ(50))) {
  79. sd.initErrorHalt();
  80. }
  81. // remove files if they exist
  82. sd.remove("callback.txt");
  83. sd.remove("default.txt");
  84. sd.remove("stamp.txt");
  85. // create a new file with default timestamps
  86. if (!file.open("default.txt", O_CREAT | O_WRITE)) {
  87. error("open default.txt failed");
  88. }
  89. cout << F("\nOpen with default times\n");
  90. printTimestamps(file);
  91. // close file
  92. file.close();
  93. /*
  94. * Test the date time callback function.
  95. *
  96. * dateTimeCallback() sets the function
  97. * that is called when a file is created
  98. * or when a file's directory entry is
  99. * modified by sync().
  100. *
  101. * The callback can be disabled by the call
  102. * SdFile::dateTimeCallbackCancel()
  103. */
  104. // set date time callback function
  105. SdFile::dateTimeCallback(dateTime);
  106. // create a new file with callback timestamps
  107. if (!file.open("callback.txt", O_CREAT | O_WRITE)) {
  108. error("open callback.txt failed");
  109. }
  110. cout << ("\nOpen with callback times\n");
  111. printTimestamps(file);
  112. // change call back date
  113. day += 1;
  114. // must add two to see change since FAT second field is 5-bits
  115. second += 2;
  116. // modify file by writing a byte
  117. file.write('t');
  118. // force dir update
  119. file.sync();
  120. cout << F("\nTimes after write\n");
  121. printTimestamps(file);
  122. // close file
  123. file.close();
  124. /*
  125. * Test timestamp() function
  126. *
  127. * Cancel callback so sync will not
  128. * change access/modify timestamp
  129. */
  130. SdFile::dateTimeCallbackCancel();
  131. // create a new file with default timestamps
  132. if (!file.open("stamp.txt", O_CREAT | O_WRITE)) {
  133. error("open stamp.txt failed");
  134. }
  135. // set creation date time
  136. if (!file.timestamp(T_CREATE, 2014, 11, 10, 1, 2, 3)) {
  137. error("set create time failed");
  138. }
  139. // set write/modification date time
  140. if (!file.timestamp(T_WRITE, 2014, 11, 11, 4, 5, 6)) {
  141. error("set write time failed");
  142. }
  143. // set access date
  144. if (!file.timestamp(T_ACCESS, 2014, 11, 12, 7, 8, 9)) {
  145. error("set access time failed");
  146. }
  147. cout << F("\nTimes after timestamp() calls\n");
  148. printTimestamps(file);
  149. file.close();
  150. cout << F("\nDone\n");
  151. }
  152. void loop() {}