

Modérateur : Dehas
Code : Tout sélectionner
int Relay = 2;
int PinHelix = A1; // Broche de la Mesure du RSSI de l'antenne Helix
int PinDipole = A0; // Broche de la Mesure du RSSI de l'antenne Dipole
int PinBat = A3; // Broche de la Mesure de la tension Batterie
int Led_RX1 = 3; // led 1 pour le Dipole omnidirectionnelle
int Led_RX2 = 4; // led 2 pour l'Helix directionnelle
int Buzz = 5; // Broche du Buzzer
int EcartRssi,HelixRssi,DipoleRssi,VBat,MBat,BuzzEtat;
unsigned long Millisec;
unsigned long OldMillisec = 0;
int Seuil = 10; // Seuil de basculement entre récepteur : a régler.
int BatLow = 60; // Niveau batterie faible : a regler
int BatZero = 40; // Niveau batterie HS
void setup() {
pinMode(Led_RX1, OUTPUT);
pinMode(Led_RX2, OUTPUT);
pinMode(PinHelix, INPUT);
pinMode(PinDipole,INPUT);
pinMode(PinBat, INPUT);
pinMode(Relay, OUTPUT);
pinMode(Buzz, OUTPUT);
// initialisation liaison serie pour tester
Serial.begin(9600);
} // End setup()
void loop() {
// Mesure des RSSI
HelixRssi = analogRead(PinHelix);
DipoleRssi = analogRead(PinDipole);
EcartRssi = HelixRssi - DipoleRssi;
Serial.print("Helix: ");
Serial.print(HelixRssi);
Serial.print(" - Dipole: ");
Serial.print(DipoleRssi);
// Pilotage du relai et de Leds suivant les RSSI mesurés
// Si les 2 valeurs sont identique au seuil prés, nous passons sur l'antenne dipole par defaut
// ce qui vas éviter que le relais travail trop dans le cas ou les 2 valeurs sont trop proche.
if ((abs(EcartRssi) < Seuil) || (EcartRssi < 0)) {
// nous nous mettons d'office sur l'antenne dipole
digitalWrite(Relay, LOW);
digitalWrite(Led_RX1, LOW); // la led (helix) est eteinte
digitalWrite(Led_RX2, HIGH); // la led (dipole) est allumée
} else {
digitalWrite(Relay, HIGH); // nous passons sur l'Helix
digitalWrite(Led_RX1, HIGH); // la led (helix) est allumée
digitalWrite(Led_RX2, LOW); // la led (dipole) est eteinte
}
// Mesure de la Batterie
VBat = analogRead(PinBat);
MBat = map(VBat, 0, 1024, 0, 100); // Transforme la valeur mesuré de la batterie (0..1024) en 0..100
Serial.print(" - Batterie: ");
Serial.print(VBat);
Serial.print(" / ");
Serial.println(MBat);
if (MBat < BatLow) { // Batterie faible
VBat = MBat - BatZero; // 20 si batterie faible, 0 si batterie HS
Millisec = millis();
if (Millisec - OldMillisec >= (VBat * 100)) {
OldMillisec = Millisec;
// Clignotement du Buzzer d'autant plus rapide que la batterie est faible
if (BuzzEtat == LOW) {
BuzzEtat = HIGH;
} else {
BuzzEtat = LOW;
}
// SI LE BUZZER EST UN BUZZER ACTIF, c'est a dire qu'il buzze alimenté en 5v
//- Buzzer Actif
digitalWrite(Buzz, BuzzEtat);
// SI LE BUZZER EST UN BUZZER PASSIF (Piezo), c'est a dire qu'il faut lui envoyer la "note"
//- Buzzer Passif
// if (BuzzEtat == LOW) {
// tone(Buzz,1500,2000)
// } else {
// noTone(Buzz);
// }
}
} else { // (MBat >= BatLow)
//- Buzzer Actif
digitalWrite(Buzz, LOW);
//- Buzzer Passif
// noTone(Buzz);
}
delay(200); // nous attendons 500ms (ou autre valeur) avant de boucler. Là aussi le but est de ne pas faire trop travailler le relais.
}// end loop()
Code : Tout sélectionner
//- Buzzer Passif
// if (BuzzEtat == LOW) {
// tone(Buzz,1500,2000)
// } else {
// noTone(Buzz);
// }bruno a écrit :En supposant 3.7 x 2 soit 7,4 volts et 5 volts en sortie du pont diviseur nous aurions:
R14k8
R2 10k
Ensuite un map cas diviseur la valeur lue par un digitalread / 1024 il suffit par exemple de dire que si nous sommes à une valeur de 512 (milieux de valeur) nous actionnons le buzzer.

Code : Tout sélectionner
int Relay = 2;
int PinHelix = A1; // Broche de la Mesure du RSSI de l'antenne Helix
int PinDipole = A0; // Broche de la Mesure du RSSI de l'antenne Dipole
int PinBat = A3; // Broche de la Mesure de la tension Batterie
int Led_RX1 = 4; // led 1 pour le Dipole omnidirectionnelle
int Led_RX2 = 3; // led 2 pour l'Helix directionnelle
int Buzz = 5; // Broche du Buzzer
int EcartRssi,HelixRssi,DipoleRssi,VBat,MBat,BuzzEtat;
unsigned long Millisec;
unsigned long OldMillisec = 0;
int Seuil = 10; // Seuil de basculement entre récepteur : a régler.
int BatLow = 100; // Niveau batterie faible : a regler
int BatZero = 40; // Niveau batterie HS
void setup() {
pinMode(Led_RX1, OUTPUT);
pinMode(Led_RX2, OUTPUT);
pinMode(PinHelix, INPUT);
pinMode(PinDipole,INPUT);
pinMode(PinBat, INPUT);
pinMode(Relay, OUTPUT);
pinMode(Buzz, OUTPUT);
// initialisation liaison serie pour tester
Serial.begin(9600);
} // End setup()
void loop() {
// Mesure des RSSI
HelixRssi = analogRead(PinHelix);
DipoleRssi = analogRead(PinDipole);
EcartRssi = HelixRssi - DipoleRssi;
Serial.print("Helix: ");
Serial.print(HelixRssi);
Serial.print(" - Dipole: ");
Serial.print(DipoleRssi);
// Pilotage du relai et de Leds suivant les RSSI mesurés
// Si les 2 valeurs sont identique au seuil prés, nous passons sur l'antenne dipole par defaut
// ce qui vas éviter que le relais travail trop dans le cas ou les 2 valeurs sont trop proche.
if ((abs(EcartRssi) < Seuil) || (EcartRssi < 0)) {
// nous nous mettons d'office sur l'antenne dipole
digitalWrite(Relay, LOW);
digitalWrite(Led_RX1, LOW); // la led (helix) est eteinte
digitalWrite(Led_RX2, HIGH); // la led (dipole) est allumée
} else {
digitalWrite(Relay, HIGH); // nous passons sur l'Helix
digitalWrite(Led_RX1, HIGH); // la led (helix) est allumée
digitalWrite(Led_RX2, LOW); // la led (dipole) est eteinte
}
// Mesure de la Batterie
VBat = analogRead(PinBat);
MBat = map(VBat, 0, 1024, 0, 100); // Transforme la valeur mesuré de la batterie (0..1024) en 0..100
Serial.print(" - Batterie: ");
Serial.print(VBat);
Serial.print(" / ");
Serial.println(MBat);
if (MBat < BatLow) { // Batterie faible
VBat = MBat - BatZero; // 20 si batterie faible, 0 si batterie HS
Millisec = millis();
if (Millisec - OldMillisec >= (VBat * 100)) {
OldMillisec = Millisec;
// Clignotement du Buzzer d'autant plus rapide que la batterie est faible
if (BuzzEtat == LOW) {
BuzzEtat = HIGH;
} else {
BuzzEtat = LOW;
}
// SI LE BUZZER EST UN BUZZER ACTIF, c'est a dire qu'il buzze alimenté en 5v
//- Buzzer Actif
digitalWrite(Buzz, BuzzEtat);
// SI LE BUZZER EST UN BUZZER PASSIF (Piezo), c'est a dire qu'il faut lui envoyer la "note"
//- Buzzer Passif
if (BuzzEtat == LOW) {
tone(Buzz,1500,2000)
} else {
noTone(Buzz);
}
}
} else { // (MBat >= BatLow)
//- Buzzer Actif
digitalWrite(Buzz, LOW);
//- Buzzer Passif
noTone(Buzz);
}
delay(200); // nous attendons 500ms (ou autre valeur) avant de boucler. Là aussi le but est de ne pas faire trop travailler le relais.
}// end loop()Code : Tout sélectionner
// SI LE BUZZER EST UN BUZZER ACTIF, c'est a dire qu'il buzze alimenté en 5v
//- Buzzer Actif
digitalWrite(Buzz, BuzzEtat);
// SI LE BUZZER EST UN BUZZER PASSIF (Piezo), c'est a dire qu'il faut lui envoyer la "note"
//- Buzzer Passif
if (BuzzEtat == LOW) {
tone(Buzz,1500,2000)
} else {
noTone(Buzz);
}
}
} else { // (MBat >= BatLow)
//- Buzzer Actif
digitalWrite(Buzz, LOW);
//- Buzzer Passif
noTone(Buzz);
}
delay(200); // nous attendons 500ms (ou autre valeur) avant de boucler. Là aussi le but est de ne pas faire trop travailler le relais.
}// end loop()Code : Tout sélectionner
if (BuzzEtat == LOW) {
tone(Buzz,1500,2000)
} else {
noTone(Buzz);
}Code : Tout sélectionner
error: expected ';' before '}' token
expected ';' before '}' token
sur le ligne: } else {et donc si tu regarde bien ton code il te manque effectivement un ; sur une ligne.;(error: expected ';' before '})