Вопрос по SD.exists()
- Войдите на сайт для отправки комментариев
Ср, 30/12/2015 - 16:27
Доброго времени суток!
Подскажите пожалуйста, почему так работает:
if (SD.exists("Temp")) Serial.println("File Temp is exists");
А при использовании строки нет:
String filename = "Temp";
if (SD.exists(filename)) Serial.println("File Temp is exists");
Контроллер постоянно перезагружается. Я так понимаю причина в том, что в массиве строк символом окончания является код 0х0, а в строке 0х10, 0х13?
Попробуйте
String filename = "Temp"; char charfilename[filename.length()+1]; filename.toCharArray(charfilename, sizeof(charfilename)); if (SD.exists(charfilename)) Serial.println("File Temp is exists");Попробуйте
String filename = "Temp"; char charfilename[filename.length()+1]; filename.toCharArray(charfilename, sizeof(charfilename)); if (SD.exists(charfilename)) Serial.println("File Temp is exists");Araris, по идее должен и String кушать. Там перегрузка определена:
boolean exists(char *filepath); boolean exists(const String &filepath) { return exists(filepath.c_str()); }Так что надо смотреть остальной скетч на предмет памяти и прочих приятностей.
Я так понимаю причина в том, что в массиве строк символом окончания является код 0х0, а в строке 0х10, 0х13?
Не выдумывайте. Где Вы эти символы в Вашем примере увидели?
Что компилятор про память говорит?
Почему то подумал что в конце строки используются символы перевода карретки CF, LF, ошибся.
Памяти у меня еще много: Global variables use 2 174 bytes (26%) of dynamic memory, leaving 6 018 bytes for local variables. Maximum is 8 192 bytes.
Специально накатал тестовый скетч, после которого ардуина уходит в бесконечный ребут:
#include <SD.h> #include <SPI.h> void setup() { Serial.begin(9600); pinMode(53, OUTPUT); Serial.print("Initializing SD card..."); if (!SD.begin(4)) Serial.println("initialization failed!"); String filename = "1.tmp"; if (SD.exists(filename)) { Serial.println("File of " + filename + " is exists. Remove this file\n"); //SD.remove(filename); } } void loop() { }Может конечно у меня просто глаза замылились, и я в упор не замечаю ошибки?
Попробуйте
String filename = "Temp"; char charfilename[filename.length()+1]; filename.toCharArray(charfilename, sizeof(charfilename)); if (SD.exists(charfilename)) Serial.println("File Temp is exists");Да, так работает, спасибо!
Да, так работает, спасибо!
Но, разобраться, почему не работает так, как у Вас, всё равно надо. Чуть попозже я доберусь до ардуины - отпишусь.
Добрался. Странно, но у меня как-то работает :(
У меня IDE 1.6.5, а у вас?