Данные не записываются на SD-карту

Я хочу сохранить файл как дату и время и хочу открыть файл mySensorData = SD.open(filename, FILE_WRITE); в настройке. Он показывает "вставьте карту SD", когда я пытаюсь открыть файл в настройке.

Данные не записываются на SD-карту. Файл создается, но не записывается в файл.

, 👍0

Обсуждение

а первая строка «Давление, Температура, Глубина, Высота» есть в файле?, @Juraj

в настройках вы открываете "sensor1.txt" и в цикле filename. тестируйте if (!mySensorData), а не if (mySensorData==0), @Juraj

Извините! Я только что загрузил новый код. Я хочу сохранить файл как дату и время. и я хочу открыть файл mySensorData = SD.open(filename, FILE_WRITE); в настройке. Он показывает вставьте SD-карту, когда я пытаюсь открыть файл в настройке., @brar_kev


2 ответа


1

Вы начинаете регистрацию, установив значение LOW, а затем проверяете, высокое ли оно, и если это не так, вы переходите к предложению else, вызываете exit(0) и завершаете работу процессора, следовательно, ваш код никогда не будет выполнен!

volatile boolean logging = LOW;

...

void loop() 
{ 
   if(logging == HIGH) // начинается с низкого
   {
    ... // никогда не выполняется
   }
   else 
   {
    ... //
    exit(0); // теперь ваш Arduino мертв!
   }
}

Многоточия (...) — это то место, где я вырезал ваш код.

exit(0) отключает прерывания и зацикливается на всегда с while(1); что приводит к полной остановке, потребляющей много энергии; в exit(0) должен быть вызов sleep, потому что то, что делает exit(...), не очень полезно для Arduino!

,

Извините, я не получил вашего ответа. Пожалуйста, объясните мне., @brar_kev

@brar_kev Я сократил код до структуры, чтобы вы могли видеть ; первое, что делает ваш цикл, это проверяет, был ли он инициализирован (logging == HIGH), чтобы он был инициализирован как LOW, поэтому поток переходит к пункту else, вы делаете что-то, затем вызываете exit(0), который останавливает процессор, uC не будет выполнять больше инструкций, пока не будет сброшен. Поэтому ничего другого никогда не вызывается., @esoterik

Но в прерываниях logging = ! logging .. поэтому я делаю его низким .. Код работал нормально, но когда я добавил модуль RTC, он перестал записывать в файл. Я проверил, когда пытаюсь открыть файл в настройке, он показывает iNSERT sd CARD И если я закомментирую раздел открытого файла, то он работает. Я новичок в программировании и не знаю, как мне теперь это изменить. Спасибо за помощь, @brar_kev

@brar_kev exit(0) отключает прерывания, поэтому ваш обработчик прерываний также не может быть выполнен., @esoterik

Как мне теперь действовать? Я застрял, не знаю, что мне изменить, чтобы это заработало., @brar_kev

@brar_kev извините, если это неочевидно, но удалите exit(0) и посмотрите, как это работает., @esoterik

Я удалил его, но он все еще печатает «Вставьте SD-карту»., @brar_kev

работают ли примеры? также SD.begin(4) должен вызываться только один раз; удалите его из цикла while в настройке, @esoterik

Я попробовал примеры Sd, и они работают отлично. Я удалил SD.begin из цикла while, но он все еще показывает Insert Sd card. Большое спасибо за помощь., @brar_kev

Кто-нибудь знает.. Что мне делать?? Я застрял, @brar_kev

@brar_kev начни с образца и добавляй к нему детали, пока он не заработает или что-то не сломается. Любые поломки могут подсказать тебе, что сломалось, или какой вопрос лучше задать, @esoterik


0

Проблема была связана с памятью. Поэтому я закомментировал некоторые команды Serial.print, и тогда все заработало отлично. Я редактирую эту часть своего кода.

иначе { // Serial.print(mySensorData); // Serial.println("Вставьте SD-карту для регистрации"); digitalWrite(led_pin, LOW); lcd.clear(); lcd.print("Вставьте SD-карту"); задержка(1000); //
}

,

Пожалуйста, перечислите строки, которые вам пришлось закомментировать. Ваш ответ может помочь кому-то с такой же проблемой., @Greenonline