Bonjour,
Voila j’ai creer un programme ou il y a 2 sous programmes activé par un bouton poussoir.
Le problème étant que je suis obligé de rester appuyer sur le bouton pour l’activation de mon sous programme.
Quelqu’un peut il m’aider ?
voila le code
const int led2R = 9 ;
const int led2V = 8 ;
const int led2B = 6 ;
const int led1R = 4 ;
const int led1V = 5 ;
const int led1B = 7 ;
const int bouton = 10;
int memoire_bouton = 0 ;
long selection;
int relais = 2;
//int LedC = 5;
//int LedS = 6;
float VCPOTa=0;//variables pour filtrage entrée analogique A1
float VCPOTb=0;//variables pour filtrage entrée analogique A1
float VCPOT1b=0;//variables pour filtrage entrée analogique A1
float VCPOT1a=0;//variables pour filtrage entrée analogique A1
long tempsReference;
int prelais =0;
int nrelais =0;
int charge = 0;
int top = 0;
long VCPOT = 0;
long VCPOT1 = 0;
unsigned long duree =0;
unsigned long tinit =0;
unsigned long tfin =0;
void setup() {
pinMode (led2R,OUTPUT);
pinMode (led2V,OUTPUT);
pinMode (led2B,OUTPUT);
pinMode (led1R,OUTPUT);
pinMode (led1V,OUTPUT);
pinMode (led1B,OUTPUT);
pinMode(bouton, INPUT);
Serial.begin (9600);
selection = millis();
digitalWrite (led2B,255);
}
void loop() {
digitalRead(memoire_bouton);
//Serial.print(memoire_bouton);
if ((digitalRead (bouton)==1) && (memoire_bouton<2)) {
digitalWrite (led2R,102);
digitalWrite (led2V,0);
digitalWrite (led2B,153);
bigbop ();
memoire_bouton=1;
//Serial.print(memoire_bouton);
}
else
{
digitalRead(memoire_bouton);
if (((millis() - selection) > 10000) && (memoire_bouton==0))
{
digitalWrite (led2R,HIGH);
digitalWrite (led2V,HIGH);
digitalWrite (led2B,0);
minibop ();
memoire_bouton=2;
selection = millis();
}
}
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// BIG BOP PROGRAMME ///
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void bigbop () {
//filtrage de l'entrée analogique A1
VCPOT = (analogRead(A1) * ( 500000 / 1023)/100);// * 6.16);// calculs tension en mV
//float VCPOTb = VCPOTa - (VCPOTa-VCPOT)/1;
//VCPOTa=VCPOTb;
Serial.println("-----------------------------");
Serial.println("Tension Batterie : " + String(VCPOT) + "V");
Serial.println("-----------------------------");
if (VCPOT <=1700 ) {
digitalWrite(relais, HIGH); // la charge demarre
}
nrelais = digitalRead(relais);
Serial.print (prelais);
Serial.println (nrelais);
//digitalWrite(LedS,1-nsw1);
//digitalWrite(LedC,charge);
if (nrelais==0 && prelais==1) { // detection passage relais départ à 1
prelais=nrelais;
charge = 1; // flag depart charge à 1
digitalWrite(led1R,LOW);
digitalWrite(led1V,LOW);
}
//VCPOT1 = (analogRead(A0) * ( 5000 / 1023));// * 6.16); // calculs tension en mV
VCPOT1 = (analogRead(A1) * (500000/1023))/100; // calculs tension en mV
// float VCPOT1b = VCPOT1a - (VCPOT1a-VCPOT1)/1;
//VCPOT1a=VCPOT1b;
Serial.println ("Tension Batterie : " + String(VCPOT1) + "mV");
tinit = millis(); // initialisation chrono
while (charge == 1 && VCPOT1 > 1400 ) { // boucle attente fin de charge
//VCPOT = (analogRead(A0) * ( 5.0 / 1023));// * 6.16);
VCPOT1 = (analogRead(A1) * (500000/1023))/100; // calculs tension en mV
//float VCPOT1b = VCPOT1a - (VCPOT1a-VCPOT1)/1;
//VCPOT1a=VCPOT1b;
Serial.print (" duree : " + String(millis()-tinit));
Serial.println (" aVCPOT : " + String(VCPOT1));
if (VCPOT1 > 4690.00) { // detection fin de charge
prelais=1; // reinitialisation des flags
nrelais=1;
charge=0;
duree = millis()-tinit; // calcul de la durée de charge
Serial.println ("duree de charge: " + String(duree));
if (duree > 16200000) {
digitalWrite(led1V,HIGH);
digitalWrite (led1R,LOW);
}
else {
digitalWrite(led1R,HIGH);
digitalWrite (led1V,LOW);
}
}
}
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// MINI BOP PROGRAMME //
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void minibop (){
//filtrage de l'entrée analogique A1
VCPOT = (analogRead(A1) * ( 500000 / 1023)/100);// * 6.16);// calculs tension en mV
//float VCPOTb = VCPOTa - (VCPOTa-VCPOT)/1;
VCPOTa=VCPOTb;
Serial.println("-----------------------------");
Serial.println("Tension Batterie : " + String(VCPOT) + "V");
Serial.println("-----------------------------");
if (VCPOT <= 1700) {
digitalWrite(relais, HIGH); // la charge demarre
}
nrelais = digitalRead(relais);
Serial.print (prelais);
Serial.println (nrelais);
//digitalWrite(LedS,1-nsw1);
//digitalWrite(LedC,charge);
if (nrelais==1 && prelais==0) { // detection passage relais départ à 1
prelais=nrelais;
charge = 1; // flag depart charge à 1
digitalWrite(led1R,LOW);
digitalWrite(led1V,LOW);
}
//VCPOT1 = (analogRead(A0) * ( 5000 / 1023));// * 6.16); // calculs tension en mV
VCPOT1 = (analogRead(A1) * (500000/1023))/100; // calculs tension en mV
//float VCPOT1b = VCPOT1a - (VCPOT1a-VCPOT1)/1;
//VCPOT1a=VCPOT1b;
Serial.println ("Tension Batterie : " + String(VCPOT1) + "mV");
tinit = millis(); // initialisation chrono
while (charge == 1 && VCPOT1 > 1400 ) { // boucle attente fin de charge
//VCPOT = (analogRead(A0) * ( 5.0 / 1023));// * 6.16);
VCPOT1 = (analogRead(A1) * (500000/1023))/100; // calculs tension en mV
//float VCPOT1b = VCPOT1a - (VCPOT1a-VCPOT1)/1;
//VCPOT1a=VCPOT1b;
Serial.print (" duree : " + String(millis()-tinit));
Serial.println (" aVCPOT : " + String(VCPOT1));
if (VCPOT1 > 4690.00) { // detection fin de charge
prelais=1; // reinitialisation des flags
nrelais=1;
charge=0;
duree = millis()-tinit; // calcul de la durée de charge
Serial.println ("duree de charge: " + String(duree));
if (duree > 9000000) {
digitalWrite(led1V,HIGH);
digitalWrite (led1R,LOW);
}
else {
digitalWrite(led1R,HIGH);
digitalWrite (led1V,LOW);
}
}
}
}
je vous remercie par avance
Fabien