// 20-05-2025 //rev 18/06/2025 void Dialogue_Operateur (void) { // traitement commande via YAT Terminal if(Flag_Buffer1==1) { CPrint("\r\n Recu :"); Print(Buffer1); CRLF1(); p0=&Buffer1[0]; if ( (*(p0)=='H') && (*(p0+1)=='e') && ( *(p0+2)=='l') && ( *(p0+3)=='p') ) { CPrint("Help\r\n"); CPrint(" MA=1 ou 0 1=Marche ou 0=Arret PWM \r\n"); CPrint(" PWM1=XXXX avec XXX de 0000 a1000 pour RC2 de 0% a100% \r\n"); CPrint(" PWM2=XXXX avec XXX de 0000 a1000 pour RC1 de 0% a100% \r\n"); // CPrint(" PWM3=XXXX avec XXX de 0000 à 1000 pour RB5 de 0% à 100% \r\n"); // CPrint(" PWM4=XXXX avec XXX de 0000 à 1000 pour RB0 de 0% à 100% \r\n"); CPrint(" Test sortie MCP Flash avec FL=1 ou FL=0\r\n"); CPrint(" Test sortie MCP Sirene avec SI=2 ou SI=0\r\n"); CPrint(" Test sortie Buzzer avec BU=4 ou BU=0\r\n"); CPrint(" usage Clignotement individuel avec toggle CL=1,2,4 ou CL=0\r\n"); CPrint(" Seuil d'ALERT SL=0.1 a SL=0.8 Amp avec ce petit moteur\r\n"); p0=0; } // Restart if( (*(p0)=='R') & (*(p0+1)=='e') & (*(p0+5)=='r') & ( *(p0+6)=='t') ) { AFF_Flag=0; IBT2_Enable=1; CPrint("\r\n RAZ alarme ,Restart\r\n"); Led_Rouge=1; //eteinte p0=0; } if ( (*(p0)=='P') && (*(p0+1)=='W') && ( *(p0+2)=='M') && ( *(p0+4)=='=') ) { cx=*(p0+3); m=0; if( (isdigit(cx) & (cx>48) & (cx< 51)) ) // 1 a  2 seulement { m++; if (isdigit(*(p0+5))) { k= (*(p0+5)-48)*1000; m++; } if (isdigit(*(p0+6))) { k=k+(*(p0+6)-48)*100; m++; } if (isdigit(*(p0+7))) { k=k+(*(p0+7)-48)*10; m++; } if (isdigit(*(p0+8))) { k=k+(*(p0+8)-48)*1; m++; } if ( (m==5) && (k<1016)) { #ifdef With_SQA_Analyser SQA=1; #endif switch (cx) { case '1': CPrint(" Saisie OK "); k1_PWM=k; F1=(double)k/10.2; #ifdef With_LCD sprintf(CRam1,"PWM1-RC2 %4d %3.1f%c",k1_PWM,F1,'%'); LCD_Write_Text_At(1,1,CRam1); #else sprintf(CRam1," Saisie OK PWM (CCP1 output RC2 ) = %5d soit %3.2f%c\r\n",k,F1,'%'); #endif PWM1_LoadDutyValue(k1_PWM); break; case '2': k2_PWM=k; F2=(double)k/10.2; #ifdef With_LCD sprintf(CRam1,"PMW2-RC1 %4d %3.1f%c",k2_PWM,F2,'%'); LCD_Write_Text_At(2,1,CRam1); #else sprintf(CRam1," Saisie OK PWM (CCP2 output RC1 ) = %5d soit %3.2f%c\r\n",k,F2,'%'); #endif PWM2_LoadDutyValue(k2_PWM); break; default : cx=0; CPrint(" Erreur cx\r\n"); break; } if(cx>0) { Print(CRam1);CRLF1(); __delay_ms(10); } #ifdef With_SQA_Analyser SQA=0; #endif } else { sprintf(CRam1," Erreur de Saisie choix CCP %c valeur PWM %5d\r\n",cx,k); Print(CRam1); // CPrint(" Rappel : cde PMWy=XXXX avec y=choix PMW 1 a 4 et xxxx valeur duty 0000 a 1015\r\n" ); CPrint(" Rappel : cde PMWy=XXXX avec y=choix PMW 1 ou 2 et xxxx valeur duty 0000 a 1015\r\n" ); } } p0=0; } if ( (*(p0)=='M') && (*(p0+1)=='A') && ( *(p0+2)=='=') ) { cx=*(p0+3); if (cx=='1') { IBT2_Enable=1; CPrint(" ITB2 Marche\r\n" ); } else { CPrint(" ITB2 Arret\r\n" ); IBT2_Enable=0; Led_Rouge=1; //eteinte } p0=0; } if ( (*(p0)=='F') && (*(p0+1)=='L') && ( *(p0+2)=='=') ) { cx=*(p0+3); if (cx=='1') { Flash_Out=1; CPrint(" Flash Out=1\r\n" ); } else { Flash_Out=0; CPrint(" Flash Out=0\r\n" ); } p0=0; } if ( (*(p0)=='S') && (*(p0+1)=='I') && ( *(p0+2)=='=') ) { cx=*(p0+3); if (cx=='1') { Sirene_Out=1; CPrint(" Sirene=1\r\n" ); } else { Sirene_Out=0; CPrint(" Sirene=0\r\n" ); } p0=0; } if ( (*(p0)=='B') && (*(p0+1)=='U') && ( *(p0+2)=='=') ) { cx=*(p0+3); if (cx=='1') { Buzzer_Out=1; CPrint(" Buzzer=1\r\n" ); } else { Buzzer_Out=0; CPrint(" Buzzer=0\r\n" ); } p0=0; } if ( (*(p0)=='C') && (*(p0+1)=='L') && ( *(p0+2)=='=') ) { cx=*(p0+3); if ( (cx<'5') & (cx!='3')) { Clignote= Clignote ^ (cx-48); // inverse le bit CPrint(" Clignote= "); PrintChar((char)Clignote+48); } else { Clignote=0; CPrint(" Erreur parametre\r\n" ); } if(cx=='0') Clignote=0; CRLF1(); p0=0; } // seuil 0.1 à 0.8 if ( (*(p0)=='S') && (*(p0+1)=='L') && ( *(p0+2)=='=') & ( *(p0+3)=='0') & ( *(p0+4)=='.') ) { cx=*(p0+5); if ( (cx>'0') & (cx<'9')) { CPrint(" Nouveau Seuil=0."); PrintChar(cx); cx=cx-48; // Alert MASK_EN_REG register 07h <- 2400 pour 0.6 A // 2400 pour 0.6Amps k=(uint8_t)cx*400; tmp[0]=INA226_ALERT_LIMIT_REG; tmp[1]=(k >> 8); tmp[2]=(uint8_t)(k & 0x00FF); Addr=INA226_ADDR; p1=&tmp[0]; cx=3; I2C1_WriteNBytes(Addr, p1, cx); Addr= INA226_ADDR; tmp[0]=0; tmp[1]=0; p1=&tmp[0]; I2C1_ReadDataBlock(Addr, INA226_ALERT_LIMIT_REG, p1,3); k=(tmp[0]<<8) + tmp[1]; //Seuil_Alerte= 8.192 * (double)k / 32768.0; Seuil_Alerte= (double)k / 4000.0; sprintf(CRam1," Seuil d'alerte %3.3f Amperes\r\n",Seuil_Alerte); Print(CRam1); } else { CPrint(" Erreur parametre\r\n" ); } if(cx=='0') Clignote=0; CRLF1(); p0=0; } if ( (i = strcmp(p0, "SET INA1 ALERT"))==0 ) { // Alert MASK_EN_REG register 07h <- 2400 pour 0.6 A // 2400 pour 0.6Amps k=EA3 /2 ; // 0 à 2048 soit 0.5A tmp[0]=INA226_ALERT_LIMIT_REG; tmp[1]=(k >> 8); tmp[2]=(uint8_t)(k & 0x00FF); Addr=INA226_ADDR; p1=&tmp[0]; cx=3; I2C1_WriteNBytes(Addr, p1, cx); Addr= INA226_ADDR; tmp[0]=0; tmp[1]=0; p1=&tmp[0]; I2C1_ReadDataBlock(Addr, INA226_ALERT_LIMIT_REG, p1,3); k=(tmp[0]<<8) + tmp[1]; //Seuil_Alerte= 8.192 * (double)k / 32768.0; Seuil_Alerte= (double)k / 4000.0; sprintf(CRam1," Seuil Alerte INA1 %3.3f Amperes\r\n",Seuil_Alerte); Print(CRam1); CRLF1(); p0=0; } } Flag_Buffer1=0; }