Encodeur Rotatif Absolu 1024 pas : BRT38-SOM1024

Anonyme
dim, 01/12/2020 - 14:34
Suite à une demande sur mon Email voici le code pour ce BRT38-SOM1024 non commenté ;
int CS = 10;
int DO = 12;
int CLK = 13;
float Angle, Data, xData;
String Dep;
int N, Tr;void setup() {
Serial.begin(115200);
Serial.println();
pinMode(CS, OUTPUT);
digitalWrite(CS, HIGH);
pinMode(DO, INPUT);
pinMode(CLK, OUTPUT);
digitalWrite(CLK, LOW);
}void loop() {
digitalWrite(CS, LOW);
Data = 0;
Dep = "";
for (N = 0; N < 10; N++) {
digitalWrite(CLK, LOW);
delay(2);
digitalWrite(CLK, HIGH);
delay(2);
Data = Data + (pow(2, 9 - N) * digitalRead(DO));
}
if (xData - Data > 600)
Tr++;
if (Data - xData > 600)
Tr--;if (xData != Data) {
xData = Data;
Serial.println("Valeur BRT38 =" + StringF(Data, 0, 5 ) + " pas Nbr Tour =" + StringF(Tr, 0, 4) + " Degrés =" + StringF((Data * 360 / 1024), 2, 8) + " Grades =" + StringF(400 * Data / 1024, 2, 7));
Serial.println("Soit : " + DegMinSec((Data * 360 / 1024)));
}
digitalWrite(CS, HIGH);
delay(5);
}String StringF(float Valeur, int Dec, int Lg) { // Converti une valeur numerique en chaine de caractère avec dec décimal et une longueur mini de Lg caractères
String sValeur = String(Valeur, Dec);
Lg = Lg - sValeur.length();
while (Lg > 0) {
sValeur = " " + sValeur;
Lg--;
}
return (sValeur);
}String DegMinSec(float Valeur) {
int Degres = Valeur;
int Minutes = 60 * (Valeur - Degres);
float Secondes = 60 * (Valeur - Degres - (Minutes / 60));
String Retour = String(Degres) + String("°") + String(Minutes) + "'" + String(Secondes); //+String(char(34));
Retour.replace(".", String(char(34)));
return (Retour);}
brossden abondamment critiqué par des ... je préfère m'abstenir, avait réalisé cette vidéo :