Bonsoir,
je ne comprends pas:
j'ai fais un programme d'alarme et je bute sur une boucle pour définir une durée.
J'ai réalisé la partie avec "if" que voici et qui fonctionne:et c'est cette version que j'aimerai inclure car quand elle est lancée elle ne s'arrête normalement qu'au bout de 10 secondes,Code:///////////////////////////////////////////////////////////////////////////////////////////////////////// #include <12F629.h> #use delay(clock=4000000) #fuses WDT,INTRC_IO,NOCPD,NOPROTECT,NOMCLR,NOPUT,NOBROWNOUT #define GP0 PIN_A0 #define GP1 PIN_A1 #define GP2 PIN_A2 #define GP3 PIN_A3 #define GP4 PIN_A4 #define GP5 PIN_A5 #use fast_io(A) #BYTE TRIS = 0x85 void enclenchement_relais(void); byte duree_alarme=10; // 10 secondes byte etape=1; void main() { debut: output_low (GP0); output_low (GP1); // Led output_low (GP2); output_low (GP3); output_low (GP4); output_low (GP5); // départ signal relais setup_wdt(WDT_1152MS); // watchdog = 1152mS TRIS=0x1D; ///////////////////////////// >>>> Gestion de la sortie ///////////////////////// if (etape==0) { output_high (GP1); // allume une led rouge } if (etape==1) { enclenchement_relais(); } goto debut; } ////////////////////////////////////// Sous-programmes /////////////////////////////////////////// void enclenchement_relais(void) { if (duree_alarme>0) // ouverture d'un relais pendant 10 secondes { output_high (GP5); delay_ms(1000); duree_alarme-=1; } if (duree_alarme==0) { etape=0; } } /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// et la même partie avec "while" qui ne fonctionne pas: ///////////////////////////////////////////////////////////////////////////////////////////////////////// #include <12F629.h> #use delay(clock=4000000) #fuses WDT,INTRC_IO,NOCPD,NOPROTECT,NOMCLR,NOPUT,NOBROWNOUT #define GP0 PIN_A0 #define GP1 PIN_A1 #define GP2 PIN_A2 #define GP3 PIN_A3 #define GP4 PIN_A4 #define GP5 PIN_A5 #use fast_io(A) #BYTE TRIS = 0x85 void enclenchement_relais(void); int duree; byte etape=1; void main() { debut: output_low (GP0); output_low (GP1); // Led rouge output_low (GP2); output_low (GP3); output_low (GP4); output_low (GP5); // départ signal relais setup_wdt(WDT_1152MS); // watchdog = 1152mS TRIS=0x1D; ///////////////////////////// >>>> Gestion de la sortie ///////////////////////// if (etape==0) { output_high (GP1); // allume une led rouge } if (etape==1) { enclenchement_relais(); } sleep(); goto debut; } ////////////////////////////////////// Sous-programmes /////////////////////////////////////////// void enclenchement_relais(void) { duree=0; while(duree<10) // ouverture d'un relais pendant 10 secondes { output_high (GP5); delay_ms(1000); duree++; } etape=0; } ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
or dans l'état actuel, elle ne s'arrête pas.
merci d'avance pour votre aide,
michel
-----