Car le bruit est vraiment important, même pour mon système en courroie direct.

Ce sont les montages à 4 diodes dont tu parles ?
Tu sais Eric, quand on écrit quelque chose, qu'on est persuadé que c'est bon et que ça ne marche pas, on a beau aller se coucher, ça travaille dans la tête, ça travaille, ça travaille . . . . et on se relève . . . . et ainsi de suite !
J'ai bien étudié ta méthode, mais tu utile des fonctions que je ne connais pas et je n'ai pas trouvé d'explication sur le net .
Code : Tout sélectionner
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* *
* Gestion de la SDCard pour Transbordeur *
* *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <RotaryEncoder.h> // Bibliothéque pour l'encodeur rotatif
#include <SPI.h>
#include <SD.h>
RotaryEncoder encodeur(A3, A2); // Borne de l'encodeur (DT, CLK) et déclaration de l'objet
LiquidCrystal_I2C lcd(0x27,16,2); // Description de l'écran
// * * * * * * * * * * * * * * Variable de gestion de la SD * * * * * * * * * * * *
Sd2Card card;
SdVolume volume;
SdFile root;
File FichierActif;
char c; // variable du caractère lu par READ();
char buffer [6]; // Buffer de réception
byte curs=0; // curseur de position dans le buffer
byte i=0; // variable d'incrémentation
const byte PinCS = 53; // Pin de branchement de la broche CS du module SDCard
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
const byte PinBPConf = 46; // Pin d'entrée du bouton poussoir de l'encodeur
int Voie = 0;
int VoieInt = 0;
int VoieSel = 0;
boolean act = false;
boolean Confirm = false ;
boolean mem = false ;
unsigned long NiveauVoie [11] = {0,0,0,0,0,0,0,0,0,0,0};
unsigned long Niveaumod ;
void setup()
{
lcd.init();
lcd.backlight();
lcd.setCursor(0,0);
Serial.begin(9600);
pinMode(PinCS , OUTPUT);
initialiseSD();
delay (2000) ;
LectureSD() ;
delay (1000) ;
// MemVoie();
// delay (1000) ;
// LectureSD() ;
}
void loop()
{
}
Code : Tout sélectionner
void initialiseSD()
{
while (!SD.begin(PinCS)) { affichSD(1); }
while (!SD.exists("NIVEAUX.txt")) { affichSD(2); }
while (!SD.exists("USINE.txt")) { affichSD(3); }
while (!SD.exists("VOIE.txt")) { affichSD(4); }
}
void LectureSD()
{
FichierActif = SD.open("NIVEAUX.txt"); while (!FichierActif){ affichSD(2); }
i=1; curs=0;
while(FichierActif.available() > 0 ) // boucle de parcour du fichier
{
c = FichierActif.read(); // lecture du caractere suivant
if (c != ';') // comparairon au séparateur de variable
{
buffer[curs] = c; // mise en buffer du caractère
curs++; // déplacement du curseur de buffer
}
else // si un ; a été trouvé
{
NiveauVoie [i] = atol(buffer); // conversion de la chaine de cafactères en valeur
affichSD(6);
Serial.println(NiveauVoie [i]);
curs = 0; // on réinitialise le curseur
i = i+1 ; // on passe à la valeur suivante
delay (1500);
}
}
for (i=1 ; i <= 10 ; i++) // On vérifie que tous les niveaux ont été lu
{ if(NiveauVoie [i]<20000){affichSD(5);while (true) {} } }
FichierActif.close();
FichierActif = SD.open("VOIE.txt"); while (!FichierActif){ affichSD(4); }
for (i=0 ; i <= 5 ; i++) { c = FichierActif.read(); buffer[i] = c; }
VoieSel = atoi(buffer);
Serial.println(VoieSel);
FichierActif.close();
}
void EcritureSD()
{
SD.remove ("NIVEAUX.txt");
FichierActif = SD.open("NIVEAUX.txt",FILE_WRITE ); while (!FichierActif){ affichSD(2); }
for (i=1 ; i <= 10 ; i++)
{
if(NiveauVoie [i]<100000) { FichierActif.print("0"); }
FichierActif.print(NiveauVoie [i]);
FichierActif.print(";");
}
FichierActif.close();
}
void MemVoie()
{
SD.remove ("VOIE.txt");
FichierActif = SD.open("VOIE.txt",FILE_WRITE ); while (!FichierActif){ affichSD(4); }
if(NiveauVoie [i]<10) { FichierActif.print("00000"); }
else { FichierActif.print("0000"); }
FichierActif.print(VoieSel);
FichierActif.print(";");
FichierActif.close();
}
Code : Tout sélectionner
void affichSD(int ecr)
{
switch (ecr) {
case 1:
lcd.setCursor(0,0);
lcd.print(" Erreur SDCard ");
lcd.setCursor(0,1);
lcd.print("................");
break ;
case 2:
lcd.setCursor(0,0);
lcd.print(" Fichier NIVEAUX");
lcd.setCursor(0,1);
lcd.print(".... absent ....");
break ;
case 3:
lcd.setCursor(0,0);
lcd.print(" Fichier USINE ");
lcd.setCursor(0,1);
lcd.print(".... absent ....");
break ;
case 4:
lcd.setCursor(0,0);
lcd.print(" Fichier VOIE ");
lcd.setCursor(0,1);
lcd.print(".... absent ....");
break ;
case 5:
lcd.setCursor(0,0);
lcd.print("*Erreur fichier*");
lcd.setCursor(0,1);
lcd.print("* Arret total *");
break ;
case 6:
lcd.setCursor(0,0);
lcd.print("* * Lecture * *");
lcd.setCursor(0,1);
lcd.print(" Voie ");
lcd.setCursor(6,1);
lcd.print(i);
lcd.print(" ");
if(i<10){lcd.print(" ");}
lcd.print(NiveauVoie [i]);
if(NiveauVoie [i]<100000){lcd.print(" ");}
break ;
case 7: