Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.

111 rindas
2.4KB

  1. // Demo of rewriting a line read by fgets
  2. #include <SPI.h>
  3. #include "SdFat.h"
  4. // SD card chip select pin
  5. const uint8_t chipSelect = SS;
  6. // file system
  7. SdFat sd;
  8. // print stream
  9. ArduinoOutStream cout(Serial);
  10. //------------------------------------------------------------------------------
  11. // store error strings in flash memory
  12. #define error(s) sd.errorHalt(F(s))
  13. //------------------------------------------------------------------------------
  14. void demoFgets() {
  15. char line[25];
  16. int c;
  17. uint32_t pos;
  18. // open test file
  19. SdFile rdfile("fgets.txt", O_RDWR);
  20. // check for open error
  21. if (!rdfile.isOpen()) {
  22. error("demoFgets");
  23. }
  24. // list file
  25. cout << F("-----Before Rewrite\r\n");
  26. while ((c = rdfile.read()) >= 0) {
  27. Serial.write(c);
  28. }
  29. rdfile.rewind();
  30. // read lines from the file to get position
  31. while (1) {
  32. pos = rdfile.curPosition();
  33. if (rdfile.fgets(line, sizeof(line)) < 0) {
  34. error("Line not found");
  35. }
  36. // find line that contains "Line C"
  37. if (strstr(line, "Line C")) {
  38. break;
  39. }
  40. }
  41. // rewrite line with 'C'
  42. if (!rdfile.seekSet(pos)) {
  43. error("seekSet");
  44. }
  45. rdfile.println("Line R");
  46. rdfile.rewind();
  47. // list file
  48. cout << F("\r\n-----After Rewrite\r\n");
  49. while ((c = rdfile.read()) >= 0) {
  50. Serial.write(c);
  51. }
  52. // close so rewrite is not lost
  53. rdfile.close();
  54. }
  55. //------------------------------------------------------------------------------
  56. void makeTestFile() {
  57. // create or open test file
  58. SdFile wrfile("fgets.txt", O_WRITE | O_CREAT | O_TRUNC);
  59. // check for open error
  60. if (!wrfile.isOpen()) {
  61. error("MakeTestFile");
  62. }
  63. // write test file
  64. wrfile.print(F(
  65. "Line A\r\n"
  66. "Line B\r\n"
  67. "Line C\r\n"
  68. "Line D\r\n"
  69. "Line E\r\n"
  70. ));
  71. wrfile.close();
  72. }
  73. //------------------------------------------------------------------------------
  74. void setup() {
  75. Serial.begin(9600);
  76. // Wait for USB Serial
  77. while (!Serial) {
  78. SysCall::yield();
  79. }
  80. cout << F("Type any character to start\n");
  81. while (!Serial.available()) {
  82. SysCall::yield();
  83. }
  84. // Initialize at the highest speed supported by the board that is
  85. // not over 50 MHz. Try a lower speed if SPI errors occur.
  86. if (!sd.begin(chipSelect, SD_SCK_MHZ(50))) {
  87. sd.initErrorHalt();
  88. }
  89. makeTestFile();
  90. demoFgets();
  91. cout << F("\nDone\n");
  92. }
  93. void loop() {}