Ардуино не пишет в файл

Я бы хотел, чтобы arduino писал в файл всякий раз, когда выполняется вызов ajax. Аякс работает, но в файл не пишет. Весь остальной код внутри обработчика ajax выполняется.

void handle_ajax(){
int startUrlIndex= HTTP_req.indexOf("button");
int endUrlIndex = HTTP_req.indexOf(" HTTP");
String url = HTTP_req.substring(startUrlIndex, endUrlIndex);

int startButtonIndex = url.indexOf("device-") + 7;// 7 is length of device-, I really just want the number.
int endButtonIndex = url.indexOf("&");
String button = url.substring(startButtonIndex, endButtonIndex);

int startStateIndex = url.indexOf("state=") + 6; // 6 is length of state=, I really just want the number.
String state = url.substring(startStateIndex);

int device = button.toInt();
int newState = state.toInt();

dim_light(device, newState * 12);
write_config("", "text");
}

bool write_config(String line, String text){
configFile = SD.open("config.ini", FILE_WRITE);

if(configFile){
    configFile.write("Dipshit");
}
configFile.close();
Serial.println("Works.");
return true;
}

person JordyvD    schedule 26.01.2016    source источник
comment
Какой у вас результат? Не могли бы вы поместить светодиод, который мигает внутри «if (configFile)»? Доступны ли контакты для SD? Вы используете какой-нибудь щит? Больше информации, пожалуйста   -  person jabujavi    schedule 26.01.2016
comment
Нашел, проблема в оперативной памяти... Снова   -  person JordyvD    schedule 26.01.2016


Ответы (2)


Я не вижу ничего плохого в приведенном коде.

Сначала проверьте основы:

  • SD-карта — это либо стандартная SD-карта, либо SDHC-карта.
  • SD-карта отформатирована в файловой системе FAT16 или FAT32.
  • Правильный вывод был использован для вывода CS в команде SD.begin(). Это зависит от используемого оборудования. http://www.arduino.cc/en/Reference/SDCardNotes
  • SPI подключен правильно (контакты 11, 12 и 13 на большинстве плат Arduino).
  • Аппаратный вывод SS устанавливается как выход (даже если он не используется в качестве вывода CS).

По прошлому опыту я знаю, что эти маленькие Arduino могут довольно быстро исчерпать SRAM при чтении и записи на SD-карту. Пример программы ReadWrite использует только около 50% SRAM UNO!!
Чтобы проверить, является ли это вашей проблемой, запустите пример программы чтения/записи SD-карты (с правильным выводом CS в SD.begin() команда). Если это работает, проблема, скорее всего, в том, что у вас закончилась SRAM. Попробуйте вместо этого использовать Arduino MEGA 2560, у которого в 4 раза больше SRAM.

Редактировать: последняя версия Arduino IDE (v1.6.8) фактически вычисляет, сколько SRAM используется глобальными переменными. Он не учитывает локальные переменные.

person sa_leinad    schedule 03.04.2016
comment
Извините, я должен закрыть его. - person JordyvD; 04.04.2016
comment
Был ли ответ полезен? Если это так, пожалуйста, примите его, щелкнув значок галочки рядом с ответом, а также, возможно, проголосуйте за него. Это указывает другим пользователям, что вы нашли ответ полезным, а также не позволяет Stack Exchange периодически поднимать ваш вопрос в надежде получить принятый ответ. Спасибо за понимание и сотрудничество! - person sa_leinad; 05.04.2016
comment
Спасибо за помощь, я добавлю 1, потому что это хороший ответ, но он не решил проблему. - person JordyvD; 05.04.2016

Обнаружена проблема: Оперативная память

У Arduino было недостаточно оперативной памяти в момент открытия SD-карты, что привело к сбою.

Если кто-то еще столкнется с той же проблемой, вам нужно 300 или более байт оперативной памяти. Проверьте это путем серийной печати FreeRam()

person JordyvD    schedule 04.04.2016