проверьте
скомпиллировалось- спасибо!
Странно, у меня в менеджере библиотек стоит метка Installed, но при компиляции выдает ошибку, что файл SD.h не найден
А мы человека не путаем?
Разве приведённый выше дефайн для FILE_WRITE не подразумевает, что он уже включает в себя режим append? Я так понимаю, что с таким набором оно создаст файл если его нет и будет дописывать, если он есть.
По симптомам-то конечно сильно похоже на то, что файл перезаписывается каждый раз.
Но и в библиотечных примерах он же используется (Datalogger).
Надо видимо внутри смотреть, что там реально делается.
Я про это в #6 написал. Но проблема в том, что якобы штатная библиотека SD у меня не компилируется, так что не уверен, что это так в реале ))
В той библиотеке, что нашел на гитхабе, FILE_APPEND как раз и не определено.
ЗЫ: по идее myFile.println()
как бы намекает, что запись должна идти в конец, но…
ЗЫЫ: @ЖукИванов, а точно в файле именно последняя запись, а не просто единственная? Может она вообще только один раз записалась, и более не пишется?
то есть приведенная в №16 цитата не убеждает?
Вообще FILE_WRITE это не ардуиновский дефайн, а стандартный спецификатор режима открытия файла, применяемый во многих файловых системах. И его значение давно определено. Если библиотека трактует его как-то иначе - то это скорее косяк в библиотеке. Однако, судя по жалобам клиента, в данном случае атрибут FILE_WRITE работает именно так, как описано в справке из поста 16
может это проблемы новых библиотек? в 21 году в архиве обсуждений исходников 1 человек проект повторил и у него проблем не возникло.
append не стандартная для моей библиотеки sd комманда идет в связке с библиотекой SPIFFS. для есп32. не думаю что смогу корректно вставить все это в скетч. сейчас сделаю передых и вечером продолжу.
Повторю вопрос
И попутно - а в каком месте вы текущее время получаете?
Да, мужики, похоже что вы правы, а я нет:
В стандартной библиотеке Sd режим FILE_WRITE уже включает append.
Выбор между write и append должен делать сам юзер, смещая позицию записи в файл командой seek()
Вот пример
File outputFile = SD.open(LOG_FILE, FILE_WRITE);
outputFile.seek(EOF);
outputFile.println("Appended to the EOF");
так что @v258 правильно написал
Цитаты разные бывают:
Parameters
filepath
: the name of the file to open, which can include directories (delimited by forward-slashes, /).mode
(optional): the mode in which to open the file. Mode can beFILE_READ
(open the file for reading, starting at the beginning of the file) orFILE_WRITE
(open the file for reading and writing, starting at the end of the file).
SD - open() - Arduino Reference
А этим заканчивается Open:
if ((mode & (O_APPEND | O_WRITE)) == (O_APPEND | O_WRITE)) {
file.seekSet(file.fileSize());
}
В примерах к библиотеке есть Datalogger.ino
, т.е. по определению здесь данные должны дописываться, однако в коде тоже имеем
// open the file. note that only one file can be open at a time,
// so you have to close this one before opening another.
File dataFile = SD.open("datalog.txt", FILE_WRITE);
// if the file is available, write to it:
if (dataFile) {
dataFile.println(dataString);
dataFile.close();
// print to the serial port too:
Serial.println(dataString);
}
// if the file isn't open, pop up an error:
else {
Serial.println("error opening datalog.txt");
}
Стало быть проблема все-таки в чем-то другом
ок, зря значит воду замутил
Надо всё сначала проверять по частям. Раз сейчас и температура не работает - её первую и выкинуть! Пусть только время на карточку пишет. Будет писать?
Дальше в отдельном скетче добиться работы датчика температуры. И добавлять в схему и скетч уже заведомо рабочий вариант.
Может припаять ардуинку?
Ардуину тоже можно, хотя они обычно в таких шилдах хорошо держатся. А вот что точно надо - проверить все дюпонные перемычки - в них очень вероятно контакт плавает
А я один не увидел задержку между
t.requestTemperatures(); и
Serial.println(temp = t.getTempCByIndex(0));
Вроде как бы надо по даташиту…
Там далласовская библиотека, она сама задержку делает. Хотя… ))
У меня как раз на ней вылезали глюки при использовании трех датчиков. Один периодически выдавал -127. Увеличил задержку до 1сек (некритично в том проекте) и все нормально стало.
Так и должно быть - преобразование при максимальном разрешении занимает почти секунду. А у него в коде задержка в 5 секунд (строка 40)
Но по хорошему после 40 строки нужно бы вставить
t.requestTemperaturesByIndex(0);
В библиотеке Dallas при беглом просмотре задержка в зависимости от битности ds18b20 вроде поддерживается. Для 12 бит - 750мс, как по даташиту.
Но у меня в свое время именно это сработало. Теперь везде где некритично, ставлю секунду и все.