/*
MAITRE
------
Generateur de fréquence de précision moyenne
Sortie Géné MAITRE sur broche 13 du MAITRE
Relier la broche 13 du MAITRE à la broche 2 de l'ESCLAVE par un fil
Brancher USB série sur le MAITRE
Vous pouvez lire sur le moniteur série du MAITRE (à 115200 bauds) le débit en ml/mn
et la fréquence de sortie de l'esclave
Initialement le débi est eéglé à 1000ml/mn
Pour changer sa valeur, maintenir le BP appuyé et réglé avec le potentiométre
la valeur souhaitée.
Toutes les 10 impulsions de sortie (broche13) du génerateur de débit, le systéme fait un auto test
et affiche le débit et la F de sorties resultant de son auto test.
*/
unsigned long debitMetre = 444;// nombre d'impulsions par l du débit-métre
unsigned long debit = 1000;// réglage débit initial en ml/mn
unsigned long T = 15;// T(ms) = 135/Q(l/mn), débit 1l/mn--->T = 135, débit 7l/mn--->T = 19,28
int freqOutPin = 13;
int consignePin = A0;
int reglageConsignePin = 2;
volatile unsigned long consigneValue = 1000;
unsigned long t0 = 0;// départ chrono, passage à l'état HAUT
unsigned long t2 = 0;// temps intermédiaire
unsigned long t3 = 0;// = t0 + t1, passage à l'état BAS
unsigned long t4 = 0;// = t0 + T0, fin état BAS
unsigned long t5 = 0;
unsigned long t6 = 0;
unsigned long debutCompte = 0;
unsigned long finCompte = 0;
unsigned long F0 = 0;// milli Hz
unsigned long T0 = 0;// micro seconde
volatile unsigned long T1 = 0;// 1/2 période
void setup() {
Serial.begin(115200);
pinMode(freqOutPin, OUTPUT);
pinMode(reglageConsignePin, INPUT_PULLUP);
// VALEURS INITIALES-----------
F0 = debitMetre*debit/60;
T0 = 1000000000/F0;
T1 = T0/2;
//-----------------------------
}
void loop() {
//1:APPUYER SUR LE BOUTON POUR CHANGER LES VALEURS INITIALES------
while (digitalRead(reglageConsignePin)==HIGH){
consigneValue = analogRead(consignePin);
consigneValue = map(consigneValue, 0, 1023, 100, 15151);
F0 = debitMetre*consigneValue/60;;
T0 = 1000000000/F0;
T1 = T0/2;
Serial.println("REGLAGE:");
Serial.print("consigneValue(ml/mn)= ");
Serial.println(consigneValue);
Serial.print("Fréquence Out(millis_Hz)= ");
Serial.println(F0);
Serial.println("------------------------------");
delay(100);
}
//FIN1-------------------------------------------------------------
//2: MESURER LE TEMPS NECESSAIRE POUR EFFECTUER 10 IMPULSIONS------
debutCompte = micros();
for (int q = 0; q < 10; q++){
//3: FAIRE LES IMPULSIONS----------------------------------------
t0 = micros();// démarrer chrono
t3 = t0+(T1);// calcul temps 1/2 période
t4 = t0+T0;// calcul temps période compléte
digitalWrite(freqOutPin,HIGH);//mette sortie à niveau HAUT
while (t2<t3){//attendre que t = 1/2 période
t2=micros();// actualiser t2
}
t2=micros();// actualiser t2
digitalWrite(freqOutPin,LOW);// mettre à 0
while (t2<t4){// attendre que t = période compléte
t2=micros();// actualiser t2
}
t2=micros();// actualiser t2
//FIN 3-------------------------------------------------------
}
finCompte = micros();
//FIN 2---------------------------------------------------------
//4: VERIFICATION AFFICHAGE: DEBIT ET LA F DE SORTIE DU GENE----
F0 = 10000000000/(finCompte-debutCompte);
debit = 1351351351/(finCompte-debutCompte);
Serial.println("AUTO TEST:");
Serial.print("Debit(ml/mn)= ");
Serial.println(debit);
Serial.print(("Fréquence Out(millis_Hz)= "));
Serial.println(F0);
Serial.println("--------------------------------");
//FIN4----------------------------------------------------------
}