// rev 18/05/2024 //C:\MPLABX_Projects\Chaudiere_Controle_18F27K42_2024.X void Affectation_Programme_au_Jour_Semaine(void) { signed char JSel,pS,Dummy1,Dummy2,JStep,bx; int i; // on est venu ici , via appel menu SW4 CPrint("Situation AVANT \r\n"); for (i=0;i<7;i++) { sprintf(CRam1,"indice=%3d @eeprom 0x%04X Prog #%d Name %c <- %s \r\n",i,Org_Sauve_Param_Travail+48+i,Affectation_Hebdo[i],Progr_Name[Affectation_Hebdo[i]],JourSemaine[i] ); Print(CRam1); } // boucle externe sans fin pour test intensif ! // do // { //CPrint("\r\n\r\n SW4: choix du Jour de la Semaine \r\n\r\n"); PIR1bits.INT0IF=0; bx=Bavard; JStep=0; CPrint("JStep=0\r\n"); JSel=0; // 0= lundi Etats_BP=0; PIE1bits.INT0IE=1; Restart_Timeout(); sprintf(CRam1,"Selection jour : %s (par defaut)\r\n",JourSemaine[JSel]); Print(CRam1); pS=Affectation_Hebdo[JSel]; // Lundi par defaut LCD_Cmd(LCD_CLEAR);__delay_ms(100); LCD_Write_CText_At(1,1,"saveS4L Choix Jour "); LCD_Write_CText_At(2,1,"+-S2/S3 "); LCD_Write_CText_At(3,1,"VRAI S1L "); LCD_Write_CText_At(4,1," > Lundi "); LCD_Chr_At(4,1,Progr_Name[pS]); Etats_BP=0; PIE1bits.INT0IE=1; do { if ( Etats_BP==SW2 && Duree_Appui<1000 ) { JSel++; if(JSel>6) JSel=0; PIE1bits.INT0IE=0; } if ( Etats_BP==SW3 && Duree_Appui<1000) { JSel --; if (JSel<0) JSel=6; // 6=dimanche PIE1bits.INT0IE=0; } if ( Etats_BP==SW2 || Etats_BP==SW3) { // JSel de 0 a  9 // JourSemaine contient des pointeurs sur les noms en clair des jour 0-> Lundi 1-> Mardi ... // sprintf(CRam1,"Select. du jour %d = %s\r\n",JSel,JourSemaine[JSel]); Etats_BP=0; sprintf(CRam1,"Select.: %s\r\n",JourSemaine[JSel]); Print(CRam1); // Affectation_Hebdo[] Numero de programme affecte au 7 jours de la semaine ( 0=> Prgr pour Lundi) LCD_Chr_At(4,1,Progr_Name[Affectation_Hebdo[JSel]]);// Progr_name -> 1 Lettre parmi CEDMRAJPTV LCD_Write_CText_At(4,4,JourSemaine[JSel]); // jour en clair Lundi,Mardi ... JStep=1; CPrint("JStep=1\r\n"); Etats_BP=0; Restart_Timeout(); IOCBF=0; PIE1bits.INT0IE=1; } if ( Etats_BP==SW1 && Duree_Appui>1000 ) { Etats_BP=0; PIE1bits.INT0IE=0; Restart_Timeout(); // Dummy2 contient le # de programme du jour selectionné pS=Affectation_Hebdo[JSel]; sprintf(CRam1," Programme #%d (%c) affecte actuellement au jour= %s\r\n",pS,Progr_Name[pS],JourSemaine[JSel]); Print(CRam1); LCD_Chr_At(4,1,Progr_Name[ Affectation_Hebdo[JSel] ] ); LCD_Chr_At(4,2,' '); LCD_Chr_At(4,3,' '); Affiche_Plages_Programme_Horaire(pS); Dummy1=JSel<<1; // divise par 2 , car 2 lettres par jour: All_Jour_Semaine[]="LuMaMeJeVeSaDiEr" LCD_Chr_At(4,4, All_Jour_Semaine[Dummy1]); LCD_Chr_At(4,5, All_Jour_Semaine[Dummy1+1]); LCD_Chr_At(4,6,' '); __delay_xSec(2); JStep=2; CPrint("JStep=2\r\n"); Restart_Timeout(); Etats_BP=0; PIE1bits.INT0IE=1; } if ( Etats_BP==SW0 ) break; if (JStep<2) { // clignote LCD_Chr_At(4,2,' '); LCD_Chr_At(2,8,'*'); __delay_ms(300); LCD_Chr_At(2,8,' '); LCD_Chr_At(4,2,'>'); __delay_ms(300); }else { LCD_Chr_At(2,8,' '); LCD_Chr_At(4,2,' '); __delay_ms(500); } } while( PIR3bits.TMR0IF == 0 && JStep<2 ); if( ( PIR3bits.TMR0IF ==1) || ( Etats_BP==SW0 ) ) { LCD_Write_CText_At(2,11,"TIME OUT! "); CPrint("\r\nTIME OUT!\r\n"); goto Exit1 ; } Etats_BP=0; Restart_Timeout(); //------------- CPrint("\r\n\ Choix du Programme pour le jour choisi : "); CPrint(JourSemaine[JSel]); CRLF1(); LCD_Write_CText_At(1,1,"saveS4L Choix Progr"); LCD_Write_CText_At(2,1,"+-S2/S3 "); Bavard=10; Dummy2=0; JStep=3; CPrint("JStep=3\r\n"); do { if ( Etats_BP==SW2 && Duree_Appui<1000 ) { Dummy2++; if(Dummy2>9) Dummy2=0; PIE1bits.INT0IE=0; } if ( Etats_BP==SW3 && Duree_Appui<1000) { Dummy2 --; if (Dummy2<0) Dummy2=9; PIE1bits.INT0IE=0; } if ( Etats_BP==SW2 || Etats_BP==SW3) { Etats_BP=0; PIE1bits.INT0IE=0; Restart_Timeout(); JStep=4; //CPrint("JStep=4\r\n"); CPrint("JStep=4\t"); // Dummy2 contient le # de programme du jour selectionne //sprintf(CRam1,"pour %s: Choix progr #%d (%c)\r\n",JourSemaine[JSel],Dummy2,Progr_Name[Dummy2]); sprintf(CRam1," progr #%d (%c)\r\n",Dummy2,Progr_Name[Dummy2]); Print(CRam1); // Affiche_Plages_Programme_Horaire(Dummy2); // on ne peut pas utiliser la fonction ci_dessus car calee sur Jour en cours JS // LCD_Chr_At(4,1,' '); LCD_Chr_At(4,2,' ');LCD_Chr_At(4,3,' '); Dummy1=JSel<<1; LCD_Write_CText_At(4,1," AM"); LCD_Chr_At(3,7,'M'); for(i=0;i<12;i++) LCD_Chr_At( 3,9+i, Tables_Programmations_Horaires[Dummy2][i]); for(i=0;i<12;i++) LCD_Chr_At( 4,9+i,Tables_Programmations_Horaires[Dummy2][i+12]); //LCD_Chr_At(4,3, All_Jour_Semaine[Dummy1*2]); //bug car Dummy1 est deja multiplié par 2 LCD_Chr_At(4,3, All_Jour_Semaine[Dummy1]); LCD_Chr_At(4,4, All_Jour_Semaine[Dummy1+1]); LCD_Chr_At(4,1, Progr_Name[ Affectation_Hebdo[Dummy2] ]); //__delay_xSec(1); __delay_ms(250); Restart_Timeout(); Etats_BP=0; IOCBF=0; PIE1bits.INT0IE=1; } else __delay_ms(500); // delay minimum de scrutation if ( Etats_BP==SW4 && Duree_Appui>1000 ) { PIE1bits.INT0IE=0; Affectation_Hebdo[JSel]=Dummy2; sprintf(CRam1," Sauve : Affectation Programme %c -> au Jour %s \r\n",Progr_Name[Dummy2] , JourSemaine[JSel] ); Print(CRam1); Etats_BP=0; JStep=5; CPrint("JStep=5\r\n"); CPrint(" Sauve Affectation_Hebdo en eeprom @ Org_Sauve_Param_Travail+48+ indice\r\n"); // a  verifier CPrint("Situation APRES \r\n"); for (i=0;i<7;i++) { sprintf(CRam1,"indice=%3d @eeprom 0x%04X Prog #%d Name %c <-- %s \r\n",i,Org_Sauve_Param_Travail+48+i,Affectation_Hebdo[i],Progr_Name[Affectation_Hebdo[i]],JourSemaine[i] ); Print(CRam1); } PIE1bits.INT0IE=1; Etats_BP=0; Restart_Timeout(); } if ( Etats_BP==SW0 && Duree_Appui>1000 ) JStep=0; } while (( PIR3bits.TMR0IF == 0) && (JStep>2)&& (JStep<5)); Exit1 : ; if(PIR3bits.TMR0IF==0 && JStep==5) CPrint("\r\nSortie SW4a Normale\r\n"); else CPrint("\r\nSortie ANormale\r\n"); Bavard=bx; Menu=4; Etats_BP=0; Restart_Timeout(); // PIE1bits.INT0IE=0; // __delay_xSec(3); LCD_Cmd(LCD_CLEAR);__delay_ms(100); // __delay_xSec(2); // } // while(1); } // ======================================================== void Modification_Programmation_Horaire(void) { //rev 16/05/ signed char PStep,HStep,Psel,Hsel,Valeur,Dummy1; int i,Destination; Etats_BP=0; IOCBF=0; PIE1bits.INT0IE=0; CPrint("\r\n\r\n Modification_Programmation_Horaire.\r\n\r\n"); // Sauf Exception Progr.#0 CONFORT et Progr. #1 ECO ); Restart_Timeout(); PStep=1; HStep=0; Psel=2; CPrint("PStep=1\r\n"); Etats_BP=0; LCD_Cmd(LCD_CLEAR); LCD_Write_CText_At(1,1,"saveS4L Sauve Progr"); LCD_Write_CText_At(2,1,"+-S2/S3 Selec.Progr"); LCD_Write_CText_At(3,1,"SW1L valid.Sel Progr"); LCD_Chr_At(4,1,Progr_Name[Psel]); Affiche_Plages_Programme_Horaire(Psel); __delay_xSec(4); LCD_Write_CText_At(1,1,"saveS4L "); // LCD_Write_CText_At(1,11,Tables_Programmations_Horaires[Psel][24]); LCD_Write_CText_At(2,1,"+-S2/S3 "); // selection programme entre #2 et #10 Etats_BP=0; IOCBF=0; PIE1bits.INT0IE=1; Restart_Timeout(); do // ---------------- boucle 1 ------------------ { if ( Etats_BP==SW2 && Duree_Appui<1000) { Psel++; if(Psel>10) Psel=2; PIE1bits.INT0IE=0; } if ( Etats_BP==SW3 && Duree_Appui<1000 ) { Psel--; if(Psel<2) Psel=10; PIE1bits.INT0IE=0; } if ( Etats_BP==SW2 || Etats_BP==SW3) { sprintf(CRam1,"Select. Progr. #%d => %c %s\r\n",Psel,Progr_Name[Psel],Tables_Programmations_Horaires[Psel][24]); Print(CRam1); Etats_BP=0; // Affiche_Plages_Programme_Horaire(Psel); Restart_Timeout(); PIE1bits.INT0IE=1; PStep=2; CPrint("PStep=2\r\n"); } LCD_Chr_At(3,7,'M'); for (i=0;i<12;i++) LCD_Chr_At( 3,9+i,Tables_Programmations_Horaires[Psel][ i]); LCD_Write_CText_At(4,6,"AM"); for (i=0;i<12;i++) LCD_Chr_At( 4,9+i,Tables_Programmations_Horaires[Psel][i+12]); LCD_Chr_At(4,1,Progr_Name[Psel]); __delay_ms(250); LCD_Chr_At(4,1,' '); __delay_ms(250); LCD_Chr_At(4,1,Progr_Name[Psel]); if ( Etats_BP==SW1 && Duree_Appui>1000 ) { PStep=3; sprintf(CRam1," Modif. Programe #%d =>(%c) %s\r\n",Psel,Progr_Name[Psel],Tables_Programmations_Horaires[Psel]); Print(CRam1); CRLF1(); Etats_BP=0; Restart_Timeout(); PIE1bits.INT0IE=0; } if ( Etats_BP==SW0 ) PStep=0; } while( (PIR3bits.TMR0IF == 0) && (PStep<3) && (PStep>0) ) ; //------------------------ PIE1bits.INT0IE=0; Etats_BP=0; Restart_Timeout(); CPrint(" Charge Table Progr selectionnee dans Table Progr.Provisoire\r\n"); LCD_Cmd(LCD_CLEAR); LCD_Write_CText_At(1,1,"Modifie Prog.Horaire"); LCD_Write_CText_At(2,1,"+-S2/S3 Sel.Heure ."); // LCD_Write_CText_At(2,12,Tables_Programmations_Horaires[Psel][24]); LCD_Write_CText_At(3,1,"SW1 Change val Progr"); __delay_xSec(3); Restart_Timeout(); LCD_Chr_At(4,1,Progr_Name[Psel]); // Affiche_Plages_Programme_Horaire(Psel); // __delay_xSec(3); Restart_Timeout(); //LCD_Write_CText_At(1,1,"saveS4L "); LCD_Write_CText_At(1,12,Tables_Programmations_Horaires[Psel][24]); LCD_Write_CText_At(2,9,"de 00h a 01h"); LCD_Chr_At(3,7,'M'); for (i=0;i<12;i++) { Table_Progr_Horaire_Provisoire[i]= Tables_Programmations_Horaires[Psel][i]; LCD_Chr_At( 3,9+i,Table_Progr_Horaire_Provisoire[ i]); } LCD_Write_CText_At(4,6,"AM"); for (i=0;i<12;i++) { Table_Progr_Horaire_Provisoire[i+12]= Tables_Programmations_Horaires[Psel][i+12]; LCD_Chr_At( 4,9+i,Table_Progr_Horaire_Provisoire[ i+12]); } for (i=24;i<32;i++) { Table_Progr_Horaire_Provisoire[i]= Tables_Programmations_Horaires[Psel][i]; } __delay_xSec(3); // choix plage horaire 0 a 23H HStep=1; CPrint("HStep=1\r\n"); Hsel=0; IOCBF=0; INT0IF=0; PIE1bits.INT0IE=1; Etats_BP=0; Restart_Timeout(); //------------- boucle 2 -------------------------- do { Dummy1=Table_Progr_Horaire_Provisoire[ Hsel]; LCD_Chr_At(2,12,Hsel/10+48); LCD_Chr_At(2,13,Hsel%10 +48); LCD_Chr_At(2,18,(Hsel+1)/10+48); LCD_Chr_At(2,19,(Hsel+1)%10 +48); if ( Etats_BP==SW2 && Duree_Appui<1000) { Hsel ++; if ( Hsel > 23) Hsel =0; PIE1bits.INT0IE=0; } if ( Etats_BP==SW3 && Duree_Appui<1000 ) { Hsel --; if(Hsel <0) Hsel = 23; PIE1bits.INT0IE=0; } if ( Etats_BP==SW2 || Etats_BP==SW3 ) { Etats_BP=0; Restart_Timeout(); sprintf(CRam1," Hsel=%d\r\n",Hsel); Print(CRam1); Etats_BP=0; Restart_Timeout(); INT0IF=0; PIE1bits.INT0IE=1; } // clignote heureselectionnee if(Hsel<12) { Dummy1=Table_Progr_Horaire_Provisoire[ Hsel]; LCD_Chr_At(3,Hsel+9,Dummy1); __delay_ms(100); LCD_Chr_At(3,Hsel+9,' '); __delay_ms(200); LCD_Chr_At(3,Hsel+9,Dummy1); } else { // PHeur >12H00 Dummy1=Table_Progr_Horaire_Provisoire[ Hsel]; LCD_Chr_At(4,Hsel-3,Dummy1); // -3 car -12+9 __delay_ms(100); LCD_Chr_At(4,Hsel-3,' '); __delay_ms(200); LCD_Chr_At(4,Hsel-3,Dummy1); } if ( HStep>0 && Etats_BP==SW1 && Duree_Appui<1000 ) { PIE1bits.INT0IE=0; LCD_Write_CText_At(1,1,"saveS4L "); CPrint("\r\nSW1 modif \t"); LCD_Write_CText_At(3,1,"SW1 M "); Dummy1++; if (Dummy1>3) Dummy1=0; Table_Progr_Horaire_Provisoire[ Hsel ]=Dummy1; sprintf(CRam1," Heure %d progr=%d\r\n",Hsel,Dummy1); Print(CRam1); Etats_BP=0; Restart_Timeout(); HStep=2; PIE1bits.INT0IE=1; } if ( HStep==2 && Etats_BP==SW4 && Duree_Appui>1000) { PIE1bits.INT0IE=0; Etats_BP=0; Restart_Timeout(); LCD_Cmd(LCD_CLEAR); LCD_Write_CText_At(1,1,"save modif Program."); CPrint(" Sauve Table Programmation_Horaire "); Print(Table_Progr_Horaire_Provisoire[24]); CRLF1(); Destination =Psel; Destination = (Destination << 6 ) + 0x00A0; sprintf(CRam1,"Prg:%c @Eeprom 0x%4X ",Progr_Name[Psel],Destination); Print(CRam1); LCD_Write_Text_At(2,1,CRam1); CRLF1(); __delay_xSec(3); for (i=0;i<32;i++) { Dummy1=Table_Progr_Horaire_Provisoire[i]; Tables_Programmations_Horaires[Psel][i]=Dummy1; sprintf(CRam1,"i=%d @Eeprom 0x%4X -> %d\r\n",i,Destination,Tables_Programmations_Horaires[Psel][i]); Print(CRam1); Table_Progr_Horaire_utilisee[i]=Dummy; Destination++; //__delay_ms(20); // DATAEE_WriteByte(Destination,Dummy1); __delay_ms(20); } LCD_Write_CText_At(3,1,"Prg saved to Eprom"); LCD_Chr_At(3,5,Progr_Name[Psel]); __delay_xSec(3); Etats_BP=0; Restart_Timeout(); HStep=3; } if ( Etats_BP==SW0 ) HStep=0; }while (PIR3bits.TMR0IF ==0 && HStep>0 && HStep<3); // terminaison if(PIR3bits.TMR0IF == 0 && HStep==3 ) LCD_Write_CText_At(1,1,"sortie Menu 4b ..OK "); else LCD_Write_CText_At(1,1,"Exit Menu4 / TimeOut"); __delay_xSec(2); LCD_Cmd(LCD_CLEAR);__delay_ms(100); Menu=4; Etats_BP=0; Restart_Timeout(); }