Je viens de tester ça mais sans grand changement. Mis à part que le bug vient plus tardivement.Tu as enlevé le for qui faisait un débordement ?
Sinon tu devrais essayer en enlevant tous les printf().
En ce qui concerne, ton explication sur les tableaux je n'ai pas tout saisi. Je pense que c'est ce que j'ai fait.
Voici mon programme : (le for et les printf sont en commentaires)
Je vais faire un imprime écran du terminal pour mieux montrer ce qui se passe.Code:void main (void) { int i; char num; char inputstr[3]; // Création d'une chaîne de caractères de 10 caractères Init(); // Initialisation des ports Init_leds(); // Inintialisation des leds //printf( "\nLancement process mesures\n" ); num = 0; i=0; inputstr[0]= '0'; inputstr[1]= '0'; inputstr[2]= '0'; while(1) { //for(i=0;i<3;i++) //{ getsUSART( inputstr + num, 1 ); // Lit un seul caractère venant de l'UART num += 1; //printf("%s", inputstr); // Pour le débuggage, permet de lire les valeurs sur inputstr //**************************************************************// // Tests avec lecture caractère après caractère // //**************************************************************// if (num == 3 && inputstr[0] == 'O' && inputstr[1] == 'T' && inputstr[2] == 'R') { // printf( "\nouverture des relais\n" ); // Renvoi "ouverture des relais" leds=0b11110111; //Allumer la led rouge RA3 & Eteindre la led verte RA1 relais = 0b00000000; // Relais ouverts num = 0; inputstr[0]= '0'; // Initialisation du tableau de réception des données inputstr[1]= '0'; inputstr[2]= '0'; } else if (num == 2 && inputstr[0] == 'A' && inputstr[1] == 'M') { // printf( "\nfermeture relais mesure\n" ); // Renvoi "fermeture relais mesure" leds=0b11111101; // Eteindre la led rouge RA3 & allumer la led verte RA1 relais = 0b00000010; // Relais ouverts num = 0; inputstr[0]= '0'; // Initialisation du tableau de réception des données inputstr[1]= '0'; inputstr[2]= '0'; } else if (num == 3 && inputstr[0] == 'F' && inputstr[1] == 'D' && inputstr[2] == '1') { // printf( "\nFermeture relais diel 1\n" ); // Renvoi "Fermeture relais diel 1" relais = 0b01101000; //Fermeture relais Diel à 2000V Delay10KTCYx(100); //Tempo relais = 0b01101100; //Fermeture relais Diel à 2000V + Fermeture Alim diel num = 0; inputstr[0]= '0'; // Initialisation du tableau de réception des données inputstr[1]= '0'; inputstr[2]= '0'; } else if (num == 3 && inputstr[0] == 'F' && inputstr[1] == 'D' && inputstr[2] == '2') { // printf( "\nFermeture relais diel 2\n" ); // Renvoi "Fermeture relais diel 2" relais = 0b00011000; //Fermeture relais Diel à 4000V Delay10KTCYx(100); //Tempo relais = 0b00011100; //Fermeture relais Diel à 4000V + Fermeture Alim diel num = 0; inputstr[0]= '0'; // Initialisation du tableau de réception des données inputstr[1]= '0'; inputstr[2]= '0'; } else if (num == 3 && inputstr[0] == '1' && inputstr[1] == '1' && inputstr[2] == '5') { // printf( "\nChoix du 115V\n" ); // Renvoi "Choix du 115V" alim = 0xFF; //Fermeture relais Choix 115V sur RD0 num = 0; inputstr[0]= '0'; // Initialisation du tableau de réception des données inputstr[1]= '0'; inputstr[2]= '0'; } else if (num == 3 && inputstr[0] == '2' && inputstr[1] == '3' && inputstr[2] == '0') { // printf( "\nChoix du 230V\n" ); // Renvoi "Choix du 115V" alim = 0x00; //Fermeture relais Choix 115V sur RD0 num = 0; inputstr[0]= '0'; // Initialisation du tableau de réception des données inputstr[1]= '0'; inputstr[2]= '0'; } //******************************************************************// // Vérifie si le 1er caractère est correcte // // (Valeurs attendues : "O", "A", "F", "1", "2") // //******************************************************************// else if (num == 1 && inputstr[0] != 'O' && inputstr[0] != 'A' && inputstr[0] != 'F' && inputstr[0] != '1' && inputstr[0] != '2') { // printf("\ninstruction non reconnue\n"); num = 0; // au cas où il y a un problème inputstr[0]= '0'; // Initialisation du tableau de réception des données inputstr[1]= '0'; inputstr[2]= '0'; } //******************************************************************// // Vérifie si le 2nd caractère est correcte // // (Valeurs attendues : "OT", "AM", "FD", "11", "23") // //******************************************************************// else if (num == 2 && inputstr[0] == 'O' && inputstr[1] != 'T') { // printf("\ninstruction non reconnue\n"); num = 0; // au cas où il y a un problème inputstr[0]= '0'; // Initialisation du tableau de réception des données inputstr[1]= '0'; inputstr[2]= '0'; } else if (num == 2 && inputstr[0] == 'A' && inputstr[1] != 'M') { // printf("\ninstruction non reconnue\n"); num = 0; // au cas où il y a un problème inputstr[0]= '0'; // Initialisation du tableau de réception des données inputstr[1]= '0'; inputstr[2]= '0'; } else if (num == 2 && inputstr[0] == 'F' && inputstr[1] != 'D') { // printf("\ninstruction non reconnue\n"); num = 0; // au cas où il y a un problème inputstr[0]= '0'; // Initialisation du tableau de réception des données inputstr[1]= '0'; inputstr[2]= '0'; } else if (num == 2 && inputstr[0] == '1' && inputstr[1] != '1') { // printf("\ninstruction non reconnue\n"); num = 0; // au cas où il y a un problème inputstr[0]= '0'; // Initialisation du tableau de réception des données inputstr[1]= '0'; inputstr[2]= '0'; } else if (num == 2 && inputstr[0] == '2' && inputstr[1] != '3') { // printf("\ninstruction non reconnue\n"); num = 0; // au cas où il y a un problème inputstr[0]= '0'; // Initialisation du tableau de réception des données inputstr[1]= '0'; inputstr[2]= '0'; } //**********************************************************// // Vérifie si le 3ème caractère est correcte // // // //**********************************************************// else if (num == 3) { // printf("\ninstruction non reconnue\n"); num = 0; // au cas où il y a un problème inputstr[0]= '0'; // Initialisation du tableau de réception des données inputstr[1]= '0'; inputstr[2]= '0'; } //} } CloseUSART(); }
-----