#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
}
}
nano:12
nano:11
nano:10
nano:9
nano:8
nano:7
nano:6
nano:5
nano:4
nano:3
nano:2
nano:GND.2
nano:RESET.2
nano:0
nano:1
nano:13
nano:3.3V
nano:AREF
nano:A0
nano:A1
nano:A2
nano:A3
nano:A4
nano:A5
nano:A6
nano:A7
nano:5V
nano:RESET
nano:GND.1
nano:VIN
nano:12.2
nano:5V.2
nano:13.2
nano:11.2
nano:RESET.3
nano:GND.3
and1:A
and1:B
and1:OUT
scope1:D0
scope1:D1
scope1:D2
scope1:D3
scope1:A3
scope1:A2
scope1:A1
scope1:A0
btn1:1.l
btn1:2.l
btn1:1.r
btn1:2.r
btn2:1.l
btn2:2.l
btn2:1.r
btn2:2.r
pwm1:OUT
pwm2:OUT