Sida 1 av 1

Arduino SD.open öppnar filen men returnerar fail (???)

Postat: 25 april 2014, 20:45:14
av RoPa
Så har jag fått ännu ett obegripligt problem med Arduino (story of my life?)

Jag har en bit kod som jag använt i Arduion Uno för att logga till SD kort och nu ska jag köra den i en "ATmega328 on a breadboard (8Mhz internal clock)" och då händer detta.

SD.begin fungerar, kortet initialiseras

SD.exists fungerar, jag kan se om filen finns eller inte

SD.open fungerar inte, den skapar filen om den inte finns men returnerar false !?!?!?

Efterföljande File.println(...) lägger inte till något till filen (eftersom File är false så är det inte konstigt)

Någon som haft detta eller liknande problem och har någon idé om var felet kan ligga?

Re: Arduino SD.open öppnar filen men returnerar fail (???)

Postat: 25 april 2014, 21:57:54
av RoPa
Troligen ett RAM problem...
Gjorde en mindre sketch och då fungerar det...

Kod: Markera allt

#if 1
__asm volatile ("nop"); // BOF preprocessor bug prevent - insert me on top of your arduino-code
#endif

#include <stdio.h>
#include <SoftwareSerial.h>
#include <arduino.h>

#include <LiquidCrystal.h>
// LiquidCrystal    (rs, rw, en, d4, d5, d6, d7) 
   LiquidCrystal lcd( A5, 7, A3, A2, A1, A0);

#include <SD.h>
const int chipSelect = 10; /** MOSI - pin 11 ** MISO - pin 12 ** CLK - pin 13 ** CS - pin 10 */

unsigned char fail;

void setup()
{
  lcd.begin(16,2);                  // Init LCD
  lcd.clear();

  Serial.begin(9600);              // Open serial communications

  Serial.println("Initializing SD card...");
  lcd.print("Init. SD card   ");
  pinMode(10, OUTPUT);             // set SD card default chip select pin to output, even if not used
  if (!SD.begin(chipSelect))       // see if the card is present and can be initialized:
  {
    Serial.println("Card failed, or not present");
    lcd.setCursor(0, 1); lcd.print("SD card failed  ");
    fail = fail | 0x01;
  } else {
    Serial.println("Card initialized.");
    lcd.setCursor(0, 1); lcd.print("Card init. OK   ");
    fail = fail & 0xFE;
  }

  if (SD.exists("DRYERLOG.TXT") == true)
  { 
    Serial.println("Logg files exist on SD card");
  } else {                                          // Files do not exist on card, logging has not been done
    Serial.println("No logg files exist on SD card"); 
  }
}

void loop(void)
{
  while (fail && 0x01)
    {
      Serial.println("Insert SD card and reboot");  // if card failed do nothing
      lcd.clear(); lcd.print("SD card failure!");
      delay(1000);
      lcd.setCursor(0,1); lcd.print("Re-insert card!");
      delay(1000);
    }

  Serial.println("Ready to start.");
  lcd.clear(); lcd.print("Ready to start.");
  delay(1000);

  File dataFile = SD.open("DRYERLOG.TXT", FILE_WRITE);   // Open logg file
  if (dataFile)
  {
    Serial.println("Opening file");
    lcd.setCursor(0,1); lcd.print("Opening file...");
    delay(1000);
    lcd.clear();
  } else {
    dataFile.close();                                // Close logg file
    fail = true;              // Error opening file
    Serial.println("Cant open file, check SD card...");
    lcd.setCursor(0,1); lcd.print("Can't open file!");
    delay(1000);
    lcd.clear();
  }

  Serial.println("Closing file");
  dataFile.close();                                // Close logg file
  lcd.clear(); lcd.print("Closing file...");
  delay(1000);
}
Och detta blir resultatet, först utan SD kort sedan med tomt kort och sedan efter en reset.

Kod: Markera allt

Initializing SD card...
Card failed, or not present
No logg files exist on SD card
Insert SD card and reboot
...
Initializing SD card...
Card initialized.
No logg files exist on SD card
Ready to start.
Opening file
Closing file
...
Initializing SD card...
Card initialized.
Logg files exist on SD card
Ready to start.
Opening file
Closing file
Långt.. men det funkar :D

Re: Arduino SD.open öppnar filen men returnerar fail (???)

Postat: 26 april 2014, 00:10:09
av ElectricNooB
Bra att du postar lösningen, den kommer nog hjälpa nån i frammtiden! :)