что интересно, если карту вставить, то все работает но и если ее вынуть в процессе работы, во время паузы ессессно, то продолжает выводиться следующее, даже когда карты в слоте давно уже нет:
жаль у меня второй меги нет, может сама плата так мозги делать?
В оконцове, выходит что это таки в библиотеке sd.h что-то накуролесино, если заменить ее на SdFat.h, то как минимум последний нерабочий скетч работает без проблем, с картой, без карты, вообще без модуля, как угодно.
И пока что весь код полностью у меня тоже работает и ни перезагрузок не глюков с жсм никаких.
В оконцове парт ту, все же, похоже, основная проблема была именно с оперативной памятью и ее распределением, а уже потом всякие глюки библиотеки подключились.
В оконцове парт ту, все же, похоже, основная проблема была именно с оперативной памятью и ее распределением, а уже потом всякие глюки библиотеки подключились.
В оконцове парт ту, все же, похоже, основная проблема была именно с оперативной памятью и ее распределением, а уже потом всякие глюки библиотеки подключились.
чем же вы таким забили всю оперативку меги - 8к?
всяким.
вообще мне показывало остаточных 1к, так что строго говоря не все 8к)
сейчас перевел весь вывод до которого дотянулся во флеш, плюс стринги в обработке смс передавал не по ссылке, сейчас 3к свободно.
это во время выполнения программы, при компиляции 50% показывает
ну так что, продолжим? - если оставить в скетче ТОЛЬКО СД-карт - виснет при создании каталога без карты?
меня тут пока дети из строя вывели, щас спать лягут продожу)
похоже таки ненавистный гайвер тут нипричем, в этот раз)
вот этот код не рабочий, виснет при попытке создать каталог
#include <Arduino.h> #include <SPI.h> #include <SD.h> const int chipSelect = 53; char result_file_name[] = "24_15_22.txt"; // прототипы String sendATCommand(String, bool); String waitOtvet(); void read_dtchk_tepl(); void dtchk_tepl(); void sd_write(); void setup() { Serial3.begin(9600); // SIM800 Serial.begin(9600); // Serial.println(F("Serial Initializing...")); sendATCommand("AT", true); // sd карта pinMode(chipSelect, OUTPUT); if (!SD.begin(chipSelect)) Serial.println(F("Карта НЕ завелась")); else Serial.println(F("карта завелась")); } void loop() { static int count = 0; delay(5000); count++; sendATCommand("AT+CSQ", true); // Проверка качества сигнала Serial.println(count); sd_write(); } String sendATCommand(String cmd, bool waiting) { String respond = ""; // Для хранения результата Serial3.println(cmd); // Отправляем команду модулю if (waiting) { // Если необходимо дождаться ответа respond = waitOtvet(); // ждем, ответа Serial.println(respond); //ответ в монитор порта } return respond; // передаем ответ дальше } String waitOtvet() { // ожидаем ответа String respond = ""; // для ответа unsigned long _timeout = millis() + 6000; // таймаут 6 секунд while (!Serial3.available() && millis() < _timeout) { } // ждем ответа 6 секунд // если есть ответ if (Serial3.available()) respond = Serial3.readString(); // считываем else return "Timeout"; return respond; } void sd_write() { if(!SD.exists(result_file_name)){ SD.mkdir("20"); // создаем каталог } File logFile = SD.open(result_file_name, FILE_WRITE); if (logFile) { logFile.print("21:22:32"); // сохраняем время на SD карту logFile.println(); //конец logFile.close(); //закрываем файл Serial.print(F("записали в файл")); } else Serial.print(F(" файл не записывается")); }//sd_writeа вот этот рабочий несоздает каталог на несуществующей карте и хоть бы хны, разве что паузы далеко не пятисекундные между попытками
#include <Arduino.h> #include <SPI.h> #include <SD.h> const int chipSelect = 53; char result_file_name[] = "24_15_22.txt"; // прототипы String sendATCommand(String, bool); String waitOtvet(); void read_dtchk_tepl(); void dtchk_tepl(); void sd_write(); void setup() { Serial.begin(9600); // Serial.println(F("Serial Initializing...")); // sd карта pinMode(chipSelect, OUTPUT); if (!SD.begin(chipSelect)) Serial.println(F("Карта НЕ завелась")); else Serial.println(F("карта завелась")); } void loop() { static int count = 0; delay(5000); count++; Serial.println(count); sd_write(); } void sd_write() { if(!SD.exists(result_file_name)){ SD.mkdir("20"); // создаем каталог } File logFile = SD.open(result_file_name, FILE_WRITE); if (logFile) { logFile.print("21:22:32"); // сохраняем время на SD карту logFile.println(); //конец logFile.close(); //закрываем файл Serial.print(F("записали в файл")); } else Serial.print(F(" файл не записывается")); }//sd_writeчто то странное, вот это код не рабочий, виснет при создании папки:
#include <Arduino.h> #include <SPI.h> #include <SD.h> const int chipSelect = 53; char result_file_name[] = "24_15_22.txt"; // прототипы void sendATCommand(String, bool); String waitOtvet(); void sd_write(); void setup() { Serial3.begin(9600); // SIM800 Serial.begin(9600); // Serial.println(F("Serial Initializing...")); sendATCommand("AT", false); // sd карта pinMode(chipSelect, OUTPUT); if (!SD.begin(chipSelect)) Serial.println(F("Карта НЕ завелась")); else Serial.println(F("карта завелась")); } void loop() { static int count = 0; delay(5000); count++; sendATCommand("AT+CSQ", false); // Проверка качества сигнала Serial.println(count); sd_write(); } void sendATCommand(String cmd, bool waiting) { String respond = ""; // Для хранения результата Serial3.println(cmd); // Отправляем команду модулю } void sd_write() { if(!SD.exists(result_file_name)){ SD.mkdir("20"); // создаем каталог } File logFile = SD.open(result_file_name, FILE_WRITE); if (logFile) { logFile.print("21:22:32"); // сохраняем время на SD карту logFile.println(); //конец logFile.close(); //закрываем файл Serial.print(F("записали в файл")); } else Serial.print(F(" файл не записывается")); }//sd_writeа этот рабочий, думает долго но не виснет:
#include <Arduino.h> #include <SPI.h> #include <SD.h> const int chipSelect = 53; char result_file_name[] = "24_15_22.txt"; // прототипы void sendATCommand(String); void sd_write(); void setup() { Serial3.begin(9600); // SIM800 Serial.begin(9600); // Serial.println(F("Serial Initializing...")); sendATCommand("AT"); // sd карта pinMode(chipSelect, OUTPUT); if (!SD.begin(chipSelect)) Serial.println(F("Карта НЕ завелась")); else Serial.println(F("карта завелась")); } void loop() { static int count = 0; delay(5000); count++; sendATCommand("AT+CSQ"); // Проверка качества сигнала Serial.println(count); sd_write(); } void sendATCommand(String cmd) { String respond = ""; // Для хранения результата Serial3.println(cmd); // Отправляем команду модулю } void sd_write() { if(!SD.exists(result_file_name)){ SD.mkdir("20"); // создаем каталог } File logFile = SD.open(result_file_name, FILE_WRITE); if (logFile) { logFile.print("21:22:32"); // сохраняем время на SD карту logFile.println(); //конец logFile.close(); //закрываем файл Serial.print(F("записали в файл")); } else Serial.print(F(" файл не записывается")); }//sd_writeНа данный момент следующая картина:
нерабочий код:
#include <Arduino.h> #include <SPI.h> #include <SD.h> // прототипы void sd_write(); void setup() { Serial3.begin(9600); // SIM800 Serial.begin(9600); // Serial.println(F("Serial Initializing...")); Serial3.println("AT+CSQ"); // Отправляем команду модулю // sd карта pinMode(53, OUTPUT); if (!SD.begin(53)) Serial.println(F("Карта НЕ завелась")); else Serial.println(F("карта завелась")); } void loop() { static int count; delay(5000); count++; Serial3.println("AT+CSQ"); // Отправляем команду модулю Serial.println(count); sd_write(); } void sd_write() { Serial.println(F("зашли")); if (!SD.exists("24_15_22.txt")) { Serial.println(F("нет файла")); SD.mkdir("20"); // создаем каталог Serial.println(F("не записали")); } Serial.println(F("открываем файл")); File logFile = SD.open("24_15_22.txt", FILE_WRITE); if (logFile) { logFile.print("21:22:32"); // сохраняем время на SD карту logFile.println(); //конец logFile.close(); //закрываем файл Serial.print(F("записали в файл")); } else Serial.print(F(" файл не записывается")); } //sd_writeВ мониторе следующее:
теперь такая картина:
#include <Arduino.h> #include <SPI.h> #include <SD.h> // прототипы void sd_write(); void setup() { Serial3.begin(9600); // SIM800 Serial.begin(9600); // Serial.println(F("Serial Initializing...")); Serial3.println("AT+CSQ"); // Отправляем команду модулю // sd карта pinMode(53, OUTPUT); if (!SD.begin(53)) Serial.println(F("Карта НЕ завелась")); else Serial.println(F("карта завелась")); } void loop() { static int count; delay(5000); count++; Serial.println(F("отправляем команду")); Serial3.println("AT+CSQ"); // Отправляем команду модулю Serial.println(count); sd_write(); } void sd_write() { Serial.println(F(" зашли")); SD.mkdir("20"); // создаем каталог Serial.println(F(" не записали")); Serial.println(F(" открываем файл")); File logFile = SD.open("24_15_22.txt", FILE_WRITE); if (logFile) { logFile.print("21:22:32"); // сохраняем время на SD карту logFile.println(); //конец logFile.close(); //закрываем файл Serial.print(F("записали в файл")); } else Serial.println(F(" файл не записывается")); } //sd_writeНа этом виснет
теперь такая, не рабочий код
#include <Arduino.h> #include <SPI.h> #include <SD.h> // прототипы void sd_write(); void setup() { Serial.begin(9600); Serial.println(F("Serial Initializing...")); pinMode(53, OUTPUT); if (!SD.begin(53)) Serial.println(F("Карта НЕ завелась")); else Serial.println(F("карта завелась")); } void loop() { static int count=0; delay(5000); count++; Serial.println(F("отправляем команду")); Serial.println(count); sd_write(); } void sd_write() { Serial.println(F(" зашли")); SD.mkdir("20"); // создаем каталог Serial.println(F(" не записали")); Serial.println(F(" открываем файл")); File logFile = SD.open("24_15_22.txt", FILE_WRITE); if (logFile) { logFile.print("21:22:32"); // сохраняем время на SD карту logFile.println(); //конец logFile.close(); //закрываем файл Serial.print(F("записали в файл")); } else Serial.println(F(" файл не записывается")); } //sd_writeкартина в мониторе порта таже что и предыдущая
что интересно, если карту вставить, то все работает но и если ее вынуть в процессе работы, во время паузы ессессно, то продолжает выводиться следующее, даже когда карты в слоте давно уже нет:
жаль у меня второй меги нет, может сама плата так мозги делать?
у кого есть мега попробуйте загрузите последний код, зависнет?
отковырял таки еще одну мегу, зависает в том же месте
В оконцове, выходит что это таки в библиотеке sd.h что-то накуролесино, если заменить ее на SdFat.h, то как минимум последний нерабочий скетч работает без проблем, с картой, без карты, вообще без модуля, как угодно.
И пока что весь код полностью у меня тоже работает и ни перезагрузок не глюков с жсм никаких.
#include <Arduino.h> #include <SPI.h> #include "SdFat.h" const byte chipSelect = 53; SdFat SD; // прототипы void sd_write(); void setup() { Serial.begin(9600); Serial.println(F("Serial Initializing...")); pinMode(53, OUTPUT); if (!SD.begin(53)) Serial.println(F("Карта НЕ завелась")); else Serial.println(F("карта завелась")); } void loop() { static int count=0; delay(5000); count++; Serial.println(F("отправляем команду")); Serial.println(count); sd_write(); } void sd_write() { Serial.println(F(" зашли")); SD.mkdir("20"); // создаем каталог Serial.println(F(" не записали")); Serial.println(F(" открываем файл")); File logFile = SD.open("24_15_22.txt", FILE_WRITE); if (logFile) { logFile.print("21:22:32"); // сохраняем время на SD карту logFile.println(); //конец logFile.close(); //закрываем файл Serial.print(F("записали в файл")); } else Serial.println(F(" файл не записывается")); } //sd_writeВ оконцове парт ту, все же, похоже, основная проблема была именно с оперативной памятью и ее распределением, а уже потом всякие глюки библиотеки подключились.
В оконцове парт ту, все же, похоже, основная проблема была именно с оперативной памятью и ее распределением, а уже потом всякие глюки библиотеки подключились.
чем же вы таким забили всю оперативку меги - 8к?
чем же вы таким забили всю оперативку меги - 8к?
Это непросто, но специалисты имеются.
В оконцове парт ту, все же, похоже, основная проблема была именно с оперативной памятью и ее распределением, а уже потом всякие глюки библиотеки подключились.
чем же вы таким забили всю оперативку меги - 8к?
всяким.
вообще мне показывало остаточных 1к, так что строго говоря не все 8к)
сейчас перевел весь вывод до которого дотянулся во флеш, плюс стринги в обработке смс передавал не по ссылке, сейчас 3к свободно.
это во время выполнения программы, при компиляции 50% показывает