Problème avec la fonction attachInterrupt et la communication série

Bonjour à tous,

J’essaye depuis quelque jours à faire un programme et une application AI2 ( qui est finis ), mais je rencontre quelques petits problème avec le programme. En effet, il y a une interruption dans le programme et lorsque j’execute un Serial.print, il n’y a aucun problème, alors que lorsque je cherche à executer un Serial.read, rien ne se passe. Je ne comprend pas le problème, j’essaye de trouver des alternatives pour éviter ce problème mais rien n’y fait, c’est pour cela que je vient içi pour essayer de comprendre et regler cela au plus vite :slight_smile: . Le bout du code où je crois que ça coince :

     NbTopsFan = 0;   // initialiser NbTopsFan à 0, il est prêt pour les calculs
      sei();           // DEBUT interruption
      delay (500);     // Attendre 0,5 seconde
      cli();           // FIN interruption
      Calc = (NbTopsFan * 60 / 7.5);    

       x = Calc/3600;          
       y = y + x;             
   

     

      
      
       
      
     
    /*   Serial.print("Valeur analogique du potentiometre : ");
       Serial.print(valeurPotentiometre); // afficher la valeur analogique du potentiomètre
       Serial.print("  //  ");
       Serial.print("Nombre de litre utilises :  ");
       Serial.println (y); // afficher le nombre de litre utilisés ( pour faire les tests ) 
       */
   
      
       
         

    // if there's any serial available, read it:
 while (Serial.available() > 0) {
   int index=Serial.read(); // lire un premier caractère

   // controle éventuel : décommenter pour voir ce qui arrive
  // Serial.print("index : "); Serial.println(index);


   // filtrer : il doit etre une lettre minuscule ou majuscule
   if(index >= 'A' && index <= 'z'){
     int valeur = Serial.parseInt();
     
    //  controle eventuel de la valeur
    // Serial.print("valeur : "); Serial.println(valeur);


     // traitement
    switch(index){
    
     case 'a':    
      POS1 = valeur;
      EEPROM.write(1, valeur);
      digitalWrite(LED, HIGH);
     break;


      case 'b':
       POS2 = valeur;
      EEPROM.write(2, valeur);
       digitalWrite(LED, LOW);
      break;


     case 'c':
      POS3 = valeur;
      EEPROM.write(3, valeur); 
     break;



   case 'd':
      POS4 = valeur;
      EEPROM.write(4, valeur);
    break;

     case 'e':
      Serial.println(y);
       break;
    

    }   
     
   }
   }

Si vous avez besoin de plus de code pour comprendre d’où vient le problème ( comme par exemple le void rpm, n’hésitez pas à me demander )

Merci d’avance :wink:

Bonjour,

Dans ton programme tu dévalides les interruptions or je pense que Serial.read utilise les interruptions.

kamill:
Bonjour,

Dans ton programme tu dévalides les interruptions or je pense que Serial.read utilise les interruptions.

C'est à dire je les dévalide ? Vous voulez parler de cli() ?

oui

kamill:
oui

A oui en effet, je vient refaire le test et tout fonctionne. Merci énormement kamill, vous ne savez même pas à quel point vous m'avez aidez sur un problème aussi minime. Encore merci :slight_smile:

Content de t’avoir aidé