【问题标题】:arduino not writing to sd cardarduino不写入SD卡
【发布时间】:2016-02-01 01:19:26
【问题描述】:

我有一个带有 Seeedstudio sd 卡屏蔽 v4.0 的 Arduino,上面有一个原型屏蔽,上面是一个 TMP36 温度传感器和一个红色和两个绿色 LED,红色表示它“准备好”记录数据,第一个绿色表示它当前正在“记录数据”,最后一个 LED 表示数据已“保存”到 SD 卡,它在文件开始时将其删除,但是,它会创建在名为 TEST 的 txt 文件中的“测试 1、2、3...”行。在同一个文件中应该有数据,但没有数据,它将在设置中写入卡,但不会在循环中。谁能帮帮我?

代码:

#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();
}

【问题讨论】:

  • 尝试取下所有其他防护罩,看看它是否只是在同一个引脚上的信息冲突......
  • 我试过了,写了一个示例草图,写了“x =”,然后是 int x,每次循环重复时上升 1,它没有在循环中写入文本,我仍然有它在设置中将“测试”打印到 SD 并且有效,但“x =”没有。
  • 您是设置文件的内容到X=还是追加它,差别很大。
  • 好吧,我的意思不是听起来很蠢,但是这两件事是什么?
  • 好的,所以在几行代码中,当文件可用时,它将保存,我在其中放了一个 Serial.print 以查看文件是否可用,现在,我将尝试从 while 语句中删除它

标签: sd-card arduino-uno write-error


【解决方案1】:

您可能需要检查以确保您的 while 循环实际上正在运行。既然您知道您可以从 void setup() 写入 SD 卡,您就知道您的 while 循环内的代码可以正常工作,但是 while 循环是否实际正在运行,或者它是否评估为 false 并被跳过?

【讨论】:

    【解决方案2】:

    您是否考虑过写下数据所需的时间是一个问题?您可能会要求它在 Arduino 代码有时间处理之前写下数据。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-30
      • 1970-01-01
      • 1970-01-01
      • 2011-04-20
      • 2011-07-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多