#define clockPinX 8
  #define clockPinY 9
  #define clockPinZ 10
  #define dataPinX 2
  #define dataPinY 3
  #define dataPinZ 4
  #define myDigitalRead(pin)  (pin>13 ? bitRead(PINC,pin-14):\
                              pin>7 ? bitRead(PINB,pin-8) :\
                              bitRead(PIND,pin))   
   
  #define myDigitalWrite(pin,level)  (pin>13 ? bitWrite(PORTC,pin-14,level):\
                             pin>7 ? bitWrite(PORTB,pin-8,level) :\ 
                             bitWrite(PORTD,pin,level))
  

 
volatile int bitCount = 0;
volatile  uint32_t dataX=0;
volatile  uint32_t dataY=0;
volatile  uint32_t dataZ=0;

void setup() {
  pinMode(clockPinX,INPUT);
  pinMode(clockPinY,INPUT);
  pinMode(clockPinZ,INPUT);
  pinMode(dataPinX, INPUT);
  pinMode(dataPinY, INPUT);
  pinMode(dataPinZ, INPUT);
 
 
  // Activer l'interruption sur changement d'état
  PCICR |= (1 << PCIE2);  // Activer PCIE2 (groupes de broches de D0 à D7)
  PCMSK2 |= (1 << PCINT20);  // Activer l'interruption sur PCINT20 (broche 4)

 Serial.begin(9600);
 
 delay(1000);
}



void loop() {
  if (bitCount >= 24) {
    Serial.print("Donnée reçue: ");
    Serial.println(dataX, BIN);
    bitCount = 0;
    dataX = 0;
  }
}

// Routine d'interruption Pin Change
ISR(PCINT2_vect) {
  if (myDigitalRead(clockPinX) == HIGH) {  // Si le front est montant
    dataX <<= 1;
    if (myDigitalRead(dataPinX) == HIGH) {
      dataX |= 1;
    }
    bitCount++;
  }

  if (bitCount >= 24) {
    // Vous pouvez désactiver l'interruption ici si nécessaire
  }
}
Loading chip...chip-scope
Loading chip...chip-pwm
Loading chip...chip-pwm