I finally succeed to write on the card and keep my modbus communication, eventhough I am stoping the modbus update while writing to the card. Here is my new code:
#include <SimpleModbusSlave.h>
#include <FileIO.h>
//Définition du LED comme étant la PIN 9.
#define LED 9
///////////////////////////////////////////////////////////////////
//Énumération des registres du Arduino
//Le premier registre commence à 0.
//Voir plus bas pour le format exact des registres.
//ADC = Réservé pour les pin 0 et 1
//INDIG = Input Digital
//OUTD = Output Digital
//AOUT = Analog Write
enum
{
ADC0,
ADC1,
INDIG0,
INDIG1,
INDIG2,
INDIG3,
OUTD0,
OUTD1,
OUTD2,
OUTD3,
AOUT0, //
HOLDING_REGS_SIZE
};
//////////////////////////////////////////////////////////////////////
// Assignation de la structure des Holding Registers
unsigned int holdingRegs[HOLDING_REGS_SIZE];
/////////////////////////////////////////////////////////////////////
//Setup de départ
void setup()
{
// Initialize the Bridge and the Serial
Bridge.begin();
Serial.begin(9600);
FileSystem.begin();
// COnfiguration du réseau Modbus.
//&Serial1 = Réseau série, disponible aussi en 2 et 3 mais je n'ai jamais testé
//19200 = Baud rate
//SERIAL_8N2 = 1 start bit, 8 data bits, 2 stop bitset none parity.Aussi disponible en SERIAL_8E1 et SERIAL_8O1
//1 = Adresse modbus
//2 = Modbus Enable PIN, à utilisé pour la chip MAX485
modbus_configure(&Serial1, 19200, SERIAL_8N2, 1, 2, HOLDING_REGS_SIZE, holdingRegs);
// Update de la configuration réseau
modbus_update_comms(19200, SERIAL_8N2, 1);
//Assignation des différentes entrées et sorties.
//Définition du LED en sortie.
pinMode(LED, OUTPUT);
//DÉfinition des PIN pour les entrées digitales
pinMode(10, INPUT_PULLUP);
pinMode(11, INPUT_PULLUP);
pinMode(12, INPUT_PULLUP);
pinMode(13, INPUT_PULLUP);
//DÉfinition des PIN pour les sortie digitales.
pinMode(3,OUTPUT);
pinMode(4,OUTPUT);
pinMode(5,OUTPUT);
pinMode(6,OUTPUT);
//Définition des PIN pour les sorties digitales.
pinMode(8,OUTPUT);
pinMode(9,OUTPUT);
//Initialisation des Holding Regs.
holdingRegs[0] = 0;
holdingRegs[1] = 0;
holdingRegs[2] = 0;
holdingRegs[3] = 0;
holdingRegs[4] = 0;
holdingRegs[5] = 0;
holdingRegs[6] = 0;
holdingRegs[7] = 0;
holdingRegs[8] = 0;
holdingRegs[9] = 0;
holdingRegs[10] = 0;
}
///////////////////////////////////////////////////////////////////
//Loop à l'infini
void loop()
{
//Update de la configuration modbus
modbus_update();
//Update de chacun des registres
holdingRegs[0] = analogRead(0);
holdingRegs[1] = analogRead(1);
holdingRegs[2] = digitalRead(10);
holdingRegs[3] = digitalRead(11);
holdingRegs[4] = digitalRead(12);
holdingRegs[5] = digitalRead(13);
digitalWrite(3,holdingRegs[6]);
digitalWrite(4,holdingRegs[7]);
digitalWrite(5,holdingRegs[8]);
digitalWrite(6,holdingRegs[9]);
analogWrite(9,holdingRegs[10]);
if (holdingRegs[10] == 69)
{
digitalWrite(LED, LOW);
}
else
{
digitalWrite(LED,HIGH);
}
if (holdingRegs[10] == 1)
{
holdingRegs[6] = 1 ;
Serial.println(" LED ON");
Bridge.begin();
Serial.begin(9600);
FileSystem.begin();
File dataFile = FileSystem.open("/mnt/sd/arduino/HMI.CSV", FILE_APPEND);
if (dataFile) {
dataFile.println(holdingRegs[9]);
dataFile.close();
holdingRegs[10]=0;
modbus_configure(&Serial1, 19200, SERIAL_8N2, 1, 2, HOLDING_REGS_SIZE, holdingRegs);
modbus_update_comms(19200, SERIAL_8N2, 1);
Serial.println("Enregistrement O.K.");
}
else { Serial.println("OUverture de fichier Echec.");
holdingRegs[10] = 0;
modbus_configure(&Serial1, 19200, SERIAL_8N2, 1, 2, HOLDING_REGS_SIZE, holdingRegs);
modbus_update_comms(19200, SERIAL_8N2, 1);
}
}
else
{
holdingRegs[6] = 0 ;
Serial.println(" LED OFF");
}
// delay(1000);
}