SD error- no guarda información - error al abrir el archivo

Hola necesito ayuda
Tengo una placa Arduino UNO conectada a 4 sensores MQ4 para lectura de metano y pantalla LCD que muestra los valores de los sensores.

Tengo dos errores persistentes:

  1. lo primero es que la memoria SD se vuelva y no abre el archivo.
  2. Funciona y no guarda la información o la guarda incompleta.

Yo requiero registrar la producción de metano por 24 horas, pero no he podido hacerlo debido a esto.

No se, si el error esta en el código por que funciona bien cuando lo compilo, pero al momento de dejar el ensayo midiendo presenta error.

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Set the LCD address to 0x27 or 0x3f for a 16 chars and 2 line display
LiquidCrystal_I2C lcd(0x27, 20, 4);

int LED = 13; // Use the onboard Uno LED

#include <SPI.h>
#include <SD.h>
#include <Time.h>
#include <TimeLib.h>
File archivo;
int periodo = 2000;  
unsigned long tiempoAnterior = 0;   
int sensorValue;
int sensorValue2;
int sensorValue3;
int sensorValue4;
//int sensorValue5;


void setup()
{
   lcd.init();
  lcd.backlight();
  pinMode(LED, OUTPUT);
  pinMode(A0, INPUT);
  Serial.begin(9600);
setTime(00,00,01,29,07,2023);
  Serial.print(F("Iniciando SD ..."));
    if (!SD.begin(4))
  {
    Serial.println(F("Error al iniciar"));
    return;
  }
  Serial.println(F("Iniciado correctamente"));
   
  }

void loop() {
    time_t t = now();
    if (millis() - tiempoAnterior >= periodo) {
        archivo = SD.open("METANO.XLS", FILE_WRITE);
                
        if (archivo) {
            sensorValue = analogRead(0);
            Serial.println(sensorValue, DEC);       
            sensorValue2 = analogRead(1);
            Serial.println(sensorValue2, DEC);       
            sensorValue3 = analogRead(2);
            Serial.println(sensorValue3, DEC);
            sensorValue4 = analogRead(3);
            Serial.println(sensorValue4, DEC); 
            //sensorValue5= analogRead(4);
            //Serial.println(sensorValue5, DEC);      

            // Escribir en una sola línea con valores separados por comas
            archivo.print(sensorValue);
            archivo.print(",");
            archivo.print(sensorValue2);
            archivo.print(",");
            archivo.print(sensorValue3);
            archivo.print(",");
            archivo.print(sensorValue4);
            archivo.print(",");
            //archivo.print(sensorValue5);
            //archivo.print(",");
            archivo.print(hour(t));  
            archivo.print(":");
            archivo.print(minute(t));
            archivo.print(":");
            archivo.println(second(t));

            archivo.close(); 
             lcd.clear();
            lcd.setCursor(0,0);
            lcd.print("CH4=");
            lcd.print("A0:");
            lcd.print(sensorValue);
            lcd.print(",");
            lcd.print("A1:");
            lcd.print(sensorValue2);
            lcd.print(",");
            lcd.setCursor(0,1);
            lcd.print("A2:");
            lcd.print(sensorValue3);
            lcd.print(",");
            lcd.print("A3:");
            lcd.print(sensorValue3);
            


        } 
        else {
            Serial.print("Error al abrir el archivo. Código de error: ");
            
            
        }
        tiempoAnterior = millis();
    }
}

Este es el código
y este es uno de los problemas al no guardar la información:
9ÿÿÿÿÿÿø5,?¿ÿÿÿÿÿÿú?ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ97,1:34:1

La verdad es que no soy experto en programación, soy estudiante universitario y estoy incursionando en el arduino como parte de mi trabajo de grado.

My Spanish isn't that good, but are you certain you are using the correct baud rate?
The funny y is -1 = no characters available.

He trasladado su tema de una categoría de idioma inglés del foro a la categoría International > Español @felipe_ortiz95.

En adelante por favor usar la categoría apropiada a la lengua en que queráis publicar. Esto es importante para el uso responsable del foro, y esta explicado aquí la guía "How to get the best out of this forum".
Este guía contiene mucha información útil. Por favor leer.

De antemano, muchas gracias por cooperar.

My english isn't that good, but using 9.600 baud

The examples show the value should be

int aPort = A0;
sensorValue = analogRead(aPort);

Prueba con, por ej.

archivo.print(sensorValue, DEC);

Puedes compartir en detalle cómo tienes conectado el módulo SD?

es un Micro SD Card Adapter
la conexión esta de la siguiente manera:
CS=digital pmd 4
SCK: digital pmd 13
MOSI: digital pmd 11
MOSO: digital pmd 12
VCC: power 5V
GND: power GND

ya lo use en el codigo

Lo usaste para mostrar los valores en la consola no para guardarlos en la SD.

mira, aqui lo use

¿Y dónde dice "DEC"?

Te dije

archivo.print(sensorValue, DEC);

que no es lo mismo que

archivo.print(sensorValue);

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.