Cordial saludo mi nombre es Javier, estoy incursionando en el mundo de arduino y no tengo mucha experiencia, encuentro en internet mucho sobre el uso de estos módulos, los he probado por separado en un arduino mega y un ESP#", funcionando excelente, mi inconveniente es cuando uno los dos módulos, no siempre inicializa la SD (sale falla y obviamente no continua) he leido en varios articulos y foros y ya puse una resistencia de 10K entre el pin SDA del RFID y 3.3V , igualmente en el SD una resistencia de 10K en el pin CS y 3.3V (estos módulos se alimentan a 3.3V), también he leido que debo poner la instrucción “digitalWrite(pin, LOW)” para activar o direccionar al modulo que requiero comunicarme en ese momento, desarrollar toda la acción y luego al terminar poner la instrucción “digitalWrite(pin, HIGH)” , eso lo hago pero este problema persiste, si desconecto el RFID si accede a la SD, cabe aclarar que de todo lo que he encontrado, la instrucción “FILE_WRITE” en el Arduino me crea archivo o me agrega datos si ya existe, mientras que en el ESP32 si ya existe el archivo, lo sobre escribe, así que la instrucción para agregar linea es “FILE_APPEND” he revisado toda la semana sobre este tema y no encuentro solución, les agradezco una ayuda al respecto, mi código es:
// RFID
#include <SPI.h>
#include <MFRC522.h>
#define RST_PIN 4//pin reset
#define SS 5// pin slave select (SDA)
MFRC522 mfrc522(SS, RST_PIN);
String VECTOR = “”;
// SD
#include <SD.h>
#define pin_CS 15
String frase;
File myFile;
void setup()
{
Serial.begin(115200);
pinMode(SS, OUTPUT);
pinMode(pin_CS, OUTPUT);
// SD
digitalWrite(pin_CS, LOW); // LLAMO AL MODULO SD
Serial.print(“Iniciando SD …”);
if (!SD.begin(pin_CS)) {
Serial.println(“No se pudo inicializar”);
return;
}
Serial.println(“inicializacion exitosa”);
digitalWrite(pin_CS, HIGH); //MODULO SD
// RFID
digitalWrite(SS, LOW); // LLAMO AL MODULO RFID
SPI.begin();
mfrc522.PCD_Init(); // inicializa modulo lector
Serial.println (" … inicia …");
digitalWrite(SS, HIGH); // MODULO RFID
}
void loop()
{
// RFID
digitalWrite(SS, LOW); // LLAMO AL MODULO RFID
VECTOR = “”;
if ( ! mfrc522.PICC_IsNewCardPresent()) // si no hay una tarjeta presente
{
return; // retorna al loop esperando por una tarjeta
}
if ( ! mfrc522.PICC_ReadCardSerial()) // si no puede obtener datos de la tarjeta
{
return; // retorna al loop esperando por otra tarjeta
}
Serial.println(“ID:”);
for (byte i = 0; i < mfrc522.uid.size; i++) // bucle recorre de a un byte por vez el UID
{
VECTOR.concat(String(mfrc522.uid.uidByte < 0x10 ? “0” : " ")); //organiza en un vector y almacena
VECTOR.concat(String(mfrc522.uid.uidByte, HEX)); //agrega parametro a una cadena myString.concat(parameter)
VECTOR.toUpperCase(); //cambia a mayusculas
}
Serial.print(“leido ==>”); Serial.println(VECTOR);//imprime toda la cadena
digitalWrite(SS, HIGH); // MODULO RFID
// SD
if (VECTOR != “”)
{
digitalWrite(pin_CS, LOW); // LLAMO AL MODULO SD
// RUTINA PARA ESCRIBIR EN ARCHIVO
digitalWrite(pin_CS, LOW);
myFile = SD.open("/AB00.txt", FILE_APPEND) ;
if (myFile) {
Serial.print(“Escribiendo SD”);
myFile.print(VECTOR);
myFile.println(millis());
Serial.println(millis());
myFile.close();
} else {
Serial.println(“Error al abrir el archivo”);
}
digitalWrite(pin_CS, HIGH); // MODULO SD
}
}