Arduino не пишет на SD-карту
У меня есть Arduino с SD-картой Seeedstudio vd 4.0 с экраном прототипа над ним, и на нем датчик температуры TMP36 и красный и два зеленых светодиода, красный, чтобы показать, что он "готов" для регистрации данных, первый зеленый, показывающий, что в данный момент "регистрируются данные", и последний светодиод, показывающий, что данные были "сохранены" на SD-карту, которую они отправили, в начале файла, однако он создает строку "Тестирование". 1, 2, 3..."в текстовом файле с именем TEST. в этом же файле должны быть данные, но нет данных, они будут записаны на карту в настройке, но не в цикле. Может кто-нибудь мне помочь?
Код:
#include <toneAC.h>
#include <SPI.h>
#include <SD.h>
int readyLED = 2;
int startLED = 8;
int buzzer = 7;
int tempSensor = A0;
int readyButton = 5;
int sampleNo = 0;
int button_mode = 1;
int saveLED = 4;
File myFile;
void setup() {
// put your setup code here, to run once:
pinMode(readyLED, OUTPUT);
digitalWrite(readyLED, HIGH);
pinMode(saveLED, OUTPUT);
digitalWrite(saveLED, LOW);
pinMode(startLED, OUTPUT);
pinMode(buzzer, OUTPUT);
pinMode(10, OUTPUT);
pinMode(tempSensor, INPUT);
pinMode(readyButton, INPUT);
digitalWrite(readyLED, HIGH);
digitalWrite(startLED, LOW);
Serial.begin(9600);
while (!Serial){}
Serial.println("Initializing SD card...");
if(!SD.begin(4)){
Serial.println("Failed!");
return;
}
Serial.println("Success!");
myFile = SD.open("test.txt", FILE_WRITE);
if (myFile) {
Serial.println("Writing to test.txt...");
myFile.println("testing 1, 2, 3.");
delay(500);
myFile.close();
Serial.println("done.");
} else {
// if the file didn't open, print an error:
Serial.println("error opening test.txt");
}
}
void loop() {
// put your main code here, to run repeatedly:
digitalWrite(readyLED, HIGH);
digitalWrite(startLED, LOW);
delay(700);
digitalWrite(startLED, HIGH);
delay(650);
int reading = analogRead(tempSensor);
float voltage = reading * 5.0;
voltage /= 1024.0;
float temperatureC = (voltage - 0.5) * 100;
float temperatureF = (temperatureC * 9.0 / 5.0) + 32.0;
Serial.print("Sample No. ");
sampleNo = sampleNo + 1;
Serial.print(sampleNo);
Serial.print(" Temperature: ");
Serial.print(temperatureF);
Serial.println(" F");
myFile = SD.open("test.txt", FILE_WRITE);
if(myFile){
Serial.println("Test.txt");
}
while(myFile.available()){
myFile.print("Sample No. ");
myFile.print(sampleNo);
myFile.print(" Temperature: ");
myFile.print(temperatureF);
myFile.println(" F");
}
delay(30);
digitalWrite(saveLED, HIGH);
delay(10);
digitalWrite(saveLED, LOW);
delay(10);
myFile.close();
}
1 ответ
Вы можете проверить, что ваш цикл while действительно запущен. Поскольку вы знаете, что вы можете написать на SD-карту из void setup()
Вы знаете, что ваш код внутри цикла while работает, но действительно ли выполняется цикл while или он оценивается как false
и пропустить?
Рассматривали ли вы время, необходимое для записи данных, как проблему? Вы можете попросить записать данные до того, как код Arduino успеет обработать.