Gestion d'un signal carré

hello
vous auriez aussi pu faire un générateur de fréquences avec un deuxième arduino. fréquence réglable par potentiomètre.
voici le code
attention, il y a des attributions de pins à respecter pour travailler sur les ports
si questions, n'hésitez pas.

#define BP_forcage A1 //BP sera cablé: GND, BP, D3
#define impulsions_R 2 //entrée interruptible INT0
#define impulsions_F 3 //entrée interruptible INT1
//code pour UNO. 4, 5, 6, 7 impératifs pour les commandes leds/bobines
#define led_1 4 //port C bit 4 cablage obligatoire sur D4 
#define led_2 5 //port C bit 5 cablage obligatoire sur D5 
#define led_3 6 //port C bit 6 cablage obligatoire sur D6 
#define led_4 7 //port C bit 7 cablage obligatoire sur D7 
//code pour UNO. 8,9,10,11 impératifs pour sélecteur
#define selecteur_1  8 //port B bit 0 cablage obligatoire sur D8 sera cablé: GND, sélecteur, D8
#define selecteur_2  9 //port B bit 1 cablage obligatoire sur D9 sera cablé: GND, sélecteur, D9
#define selecteur_3 10 //port B bit 2 cablage obligatoire sur D10 sera cablé: GND, sélecteur, D10
#define selecteur_4 11 //port B bit 3 cablage obligatoire sur D11 sera cablé: GND, sélecteur, D11
#define capteur_analogique A0  //
boolean bridage=false;
int state     = 0;
int val       = 0;
int mode      = 0;        //sera initialisé en fonction sélecteur/sonde analogique
int cpt_state = 0;        //pour le retour à la normale
int volatile comptage_impulsion =  0;
void isr_impulsion_R() {comptage_impulsion++;}//comptage des impulsions
void isr_impulsion_F() {PORTD=PORTD|0b11110000;}//éteindra les leds/bobines
void setup() {
Serial.begin(115200);
DDRB = DDRB &0b11110000;//portB en entrée 3,2,1,0 =0 =entrée
PORTB= PORTB|0b00001111;//1 = PULLUP activées
DDRC = DDRC |0b11110000;//portC en sortie 7,6,5,4 =1 =sortie
PORTC= PORTC&0b00001111;//forçées à LOW
  pinMode(BP_forcage, INPUT_PULLUP); // BP appuyé ramenera GND sur l'entrée
  pinMode(impulsions_R, INPUT);      // voir si c'est INPUT ou INPUT_PULLUP
  pinMode(impulsions_F, INPUT);      // voir si c'est INPUT ou INPUT_PULLUP
  attachInterrupt(0, isr_impulsion_R, RISING); // voir si c'est le bon sens FALLING ou RISING
  attachInterrupt(1, isr_impulsion_F, FALLING);// voir si c'est le bon sens FALLING ou RISING
}

void loop() 
{
  state = comptage_impulsion % 5;     /// Serial.print("state ");Serial.print(state);
  if (!digitalRead(BP_forcage))        // BP pour forcer la limitation d'allumages
  {                                    /// Serial.print("   BP_forcage ");Serial.println(digitalRead(BP_forcage));
    choix_du_mode();                   ///Serial.print("  mode ");Serial.println(mode);
    bridage = true;
    switch (mode)
    {
case 1: {                                                //on ne supprime pas d'allumage
          if (state == 1 )
          {
            comptage_impulsion = 0;                        
            PORTD=PORTD&0b11101111;        /// Serial.println("led 1");                            
          }
        } break;
case 2: {                                                 //on supprime 1 allumages sur 4
          if (state == 2 )                                 
          {
            comptage_impulsion = 0;                        
            PORTD=PORTD&0b11011111;        /// Serial.println("led 2");                          
          }
        } break;
case 3: {                                                  //on supprime 2 allumages sur 4
          if (state == 3 )                                 
          {
            comptage_impulsion = 0;                         
            PORTD=PORTD&0b10111111;          /// Serial.println("led 3");                        
          }
        } break;
case 4: { 
          if (state == 4 ) 
          {  
            comptage_impulsion = 0;                              //on supprime 3 allumages sur 4  
            PORTD=PORTD&0b01111111;/// Serial.println("led 4"); 
          }
        } break;          
 default:{}break;                                         
    }
  }
  else                                    // pas d'appui sur le BP_forcage
  {
                                         /// Serial.print("  mode libre ");Serial.println(mode);
  if(bridage){mode--;}bridage=false;
   switch (mode)
    {
//case 0: {} break;
case 1: {                                  // on ne supprime pas d' allumage
          if (state == 1 )
          {
            comptage_impulsion = 0;                           
            PORTD=PORTD&0b11101111;       /// Serial.println("led 1"); 
          }
        } break;
case 2: {                                  // on supprime 1 allumages sur 4
          if (state == 2 )                                 
          {
            comptage_impulsion = 0;
            PORTD=PORTD&0b11011111;        /// Serial.println("led 2"); 
            cpt_state++;if(cpt_state>10){mode--;cpt_state=0;}                     
          }
        } break;
case 3: {                                   // on supprime 2 allumages sur 4
          if (state == 3 )                                 
          {
            comptage_impulsion = 0;
            PORTD=PORTD&0b10111111;        /// Serial.println("led 3");             
            cpt_state++;if(cpt_state>10){mode--;cpt_state=0;}                    
          }
        } break;
case 4: { 
          if (state == 4 )                  // on supprime 3 allumages sur 4
          {  
            comptage_impulsion = 0;
            PORTD=PORTD&0b01111111;        /// Serial.println("led 4"); 
            cpt_state++;if(cpt_state>10){mode--;cpt_state=0;}
          }
        } break;                           
default:{}break;        
    }
  }
}


void choix_du_mode()
{                                    // Serial.println( PINB&0b00000111); 
    if ((PINB&0b00000111) == 7) 
      {                                
        val = map(analogRead(capteur_analogique), 0, 1023, 0, 30); // capteur analogique >10, >15, >20, >25
        if (val > 20) {mode = 2;}
        else {if (val > 15) {mode = 3;}
          else {if (val > 10) {mode = 4;}
            else {mode = 1;}}}
      }
      else
      {
        mode = PINB & 0b00000111;
      }
}