Подскажите пожалуйста, почему на SD карту не каждый раз записывается строка? Вот код: Код (C++): #include <QuadDisplay2.h> #include <TroykaButton.h> #include <SD.h> #include <TroykaDHT.h> QuadDisplay qd(10, 11, 13); TroykaButton button1(4); TroykaButton button2(6); DHT dht(7, DHT11); boolean mode = true; boolean one = true; boolean power = true; unsigned long minutes = millis() / 60000; unsigned long minfu = 0; unsigned long hours = 0; void saveToSD(String filep, String dataString) { File dataFile = SD.open(filep, FILE_WRITE); dataFile.print(dataString); dataFile.close(); } void setup() { qd.begin(); button1.begin(); button2.begin(); SD.begin(8); dht.begin(); dht.read(); saveToSD("Info.csv", "Time;Humidity, %;Temp, C;Temp, F\r\n"); int tempv = dht.getTemperatureC(); String temp = String(tempv); int temp2v = dht.getTemperatureF(); String temp2 = String(temp2v); int humv = dht.getHumidity(); String hum = String(humv); String minutesPrint = String(minfu); String hoursPrint = String(hours); String dataPrint = hoursPrint + ":" + minutesPrint + ";" + hum + ";" + temp + ";" + temp2 + "\r\n"; saveToSD("Info.csv", dataPrint); } void loop() { button2.read(); if (power) { button1.read(); if (button1.isClick()) { mode = !mode; } if (button1.isHold()) { one = !one; if (one) { qd.displayTemperatureC(dht.getTemperatureC()); } else { qd.displayTemperatureF(dht.getTemperatureF()); } mode = false; } } if (button2.isClick()) { if (power) { qd.displayDigits(QD_O, QD_f, QD_f, QD_NONE); delay(3000); qd.displayClear(); } else { qd.displayDigits(QD_O, QD_n, QD_NONE, QD_NONE); delay(3000); } power = !power; } if (power) { dht.read(); if (mode) { qd.displayHumidity(dht.getHumidity()); } else { if (one) { qd.displayTemperatureC(dht.getTemperatureC()); } else { qd.displayTemperatureF(dht.getTemperatureF()); } } } if (millis() / 60000 - minutes == 10) { minutes = millis() / 60000; minfu += 10; if (minfu == 60) { ++hours; minfu = 0; } dht.read(); int tempv = dht.getTemperatureC(); String temp = String(tempv); int temp2v = dht.getTemperatureF(); String temp2 = String(temp2v); int humv = dht.getHumidity(); String hum = String(humv); String minutesPrint = String(minfu); String hoursPrint = String(hours); String dataPrint = hoursPrint + ":" + minutesPrint + ";" + hum + ";" + temp + ";" + temp2 + "\r\n"; saveToSD("Info.csv", dataPrint); } } Вот файл Info.csv:
10 должен тянуть. У меня когда-то была похожая проблема. Делал логер напряжения. Как только файл увеличивался - всё вешалось. Взял карту 10 класса (до этого было что-то древнее) - всё заработало.
Предположение - может после открытия файла добавить дэлэй на несколько десятков мс в процедуре записи на SD. Код (C++): void saveToSD(String filep, String dataString) { File dataFile = SD.open(filep, FILE_WRITE); delay(50); dataFile.print(dataString); dataFile.close(); }
Можно попробовать проконтролить результаты работы с SD. Засылать в Serial результат открытия файла (false если не удалось открыть) и печати в него (print() и println() возвращает количество записанных байтов, да и саму строку для записи при неудаче можно вывести - мало ли она криво сформирована как то).