Библиотека SD.h
- Войдите на сайт для отправки комментариев
Пнд, 21/02/2022 - 23:43
Всем добрый день. Столкнулся с интересной особенностью, хотелось бы понять в чем дело. Есть мой большой скетч (его не прикладываю т.к. он очень большой, сделал вырезку из него чтоб максимально убрать все лишнее) проблема в том что на карте SD не создается файл (в зависимости от того куда в условном операторе if,else вставить функцию (save()) ) пример такой
#include <SPI.h> #include <SD.h> byte menu = 1; byte menu1 = 2; void setup() { SD.begin(10); } void loop() { ret(); } void save() { if (SD.begin(10)) { File dataFile = SD.open("date.csv", FILE_WRITE); dataFile.print(345); dataFile.close(); } } void ret() { if (menu == 1) { if (menu1 == 0) { } else if (menu1 == 2) { save(); } } }
вот такой скетч не создает файл, а если функцию (save()) переместить так
#include <SPI.h> #include <SD.h> byte menu = 1; byte menu1 = 2; void setup() { SD.begin(10); } void loop() { ret(); } void save() { if (SD.begin(10)) { File dataFile = SD.open("date.csv", FILE_WRITE); dataFile.print(345); dataFile.close(); } } void ret() { if (menu == 1) { save(); if (menu1 == 0) { } else if (menu1 == 2) { } } }
то файл создается и в него записываются данные, или в loop положить, то тоже работает. Библиотека стандартная, ничего не трогал. ОЗУ чистил за собой (места должно хватать). Какие есть особенности? Где почитать про это? Спасибо!
И еще забыл указать, что если выполнить такой скетч
то файл создается, и в нем прописывается два раза число 345, то есть в первом варианте (где файл не создается) функция выполняется, но не может создать файл, а если файл уже создан, то функция успешно его открывает и пишет число 345.
* Функция ret() выполняется один раз, она не в loop, а в setup.
Все было как обычно. Проблема в своей невнимательности. Зато несколько дней потрачены на саморазвитие. В моём полном скетче использую библиотеку UTFT. Эту библиотеку я полностью исправлял, убирал все лишнее (чтоб меньше весила). Сделал свой вывод чисел float, вот вырезка с нее
Проблема была в том, что когда я объявлял массив (st), я указал размер 4 байта, а по факту писал 5 байт. Компилятор ошибку не выдавал, а я и не думал. Просто невнимательность.
причем тут библиотека SD и создание файла?
Скорее это яркий пример того. что ВСЕГДА надо выкладывать скетчи полностью, даж когда он "очень большой" и "не имеет отношения к проблеме"...