qui peut m expliquer ce code ?

#define digitalPinToPCICR(p) ((((p) >= 8 && (p) <= 11) || ((p) >= 14 && (p) <= 17) || ((p) >= A8 && (p) <= A10)) ? (&PCICR) : ((uint8_t *)0))
#define digitalPinToPCICRbit(p) 0
#define digitalPinToPCMSK(p) ((((p) >= 8 && (p) <= 11) || ((p) >= 14 && (p) <= 17) || ((p) >= A8 && (p) <= A10)) ? (&PCMSK0) : ((uint8_t *)0))
#define digitalPinToPCMSKbit(p) ( ((p) >= 8 && (p) <= 11) ? (p) - 4 : ((p) == 14 ? 3 : ((p) == 15 ? 1 : ((p) == 16 ? 2 : ((p) == 17 ? 0 : (p - A8 + 4)))))) // AVR_ATmega32U4 has an unusual mapping of pins to channels extern const uint8_t PROGMEM analog_pin_to_channel_PGM;
#define analogPinToChannel(P) ( pgm_read_byte( analog_pin_to_channel_PGM + (P) ) )

Glups, plutôt indigeste..........................

PCICR:registre d'interruption
voir page 84 de la data sheet de ATmega32U4:

Pin Change Interrupt Control Register - PCICR
• Bit 0 – PCIE0: Pin Change Interrupt Enable 0
When the PCIE0 bit is set (one) and the I-bit in the Status Register (SREG) is set (one), pin
change interrupt 0 is enabled. Any change on any enabled PCINT7..0 pin will cause an interrupt.
The corresponding interrupt of Pin Change Interrupt Request is executed from the PCI0 Interrupt
Vector. PCINT7..0 pins are enabled individually by the PCMSK0 Register.

et pour PCMSK: voir en page 88
Pin Change Mask Register 0 – PCMSK0
• Bit 7..0 – PCINT7..0: Pin Change Enable Mask 7..0
Each PCINT7..0 bit selects whether pin change interrupt is enabled on the corresponding I/O
pin. If PCINT7..0 is set and the PCIE0 bit in PCICR is set, pin change interrupt is enabled on the
corresponding I/O pin. If PCINT7..0 is cleared, pin change interrupt on the corresponding I/O pin
is disabled

#define digitalPinToPCICR(p) ((((p) >= 8 && (p) <= 11) || ((p) >= 14 && (p) <= 17) || ((p) >= A8 && (p) <= A10)) ? (&PCICR) : ((uint8_t *)0))

C’est une affectation conditionnelle.
Là c’est la condition:
(((p) >= 8 && (p) <= 11) || ((p) >= 14 && (p) <= 17) || ((p) >= A8 && (p) <= A10))

Là c’est la valeur retournée si la condition est vraie:
(&PCICR)

Là c’est la valeur retournée si la condition est fausse:
((uint8_t *)0)

Donc si p (un n° de broche à priori) est compris entre 8 et 11 ou entre 14 et 17 ou entre A8 et A10 la condition est vrai et la valeur retournée est un pointeur su le registre PCICR sinon on retourne un pointeur null.

Les autres define sont batis sur le même modèle.

Commencer par “bonjour” c’est pas mal aussi sinon.

Ensuite poster le code entre balise comme stipulé dans la charte du forum.

Enfin expliquer le contexte parce que la …

:slight_smile: bonjour B@tto et a tout le mode ;

merci a tous pour votre aide ;

j ai un petit projet a realiser , je suis nouveau en arduino , mon objectif est de controler un arduino Robot via une module serial hc06 ,
la diffuculte est qu il n´ya aucun pin rx/tx disponible ,l´ideeest de modifier deux pins afin de realiser une connection serie mais lors de la compilation des errors aparaissent due a la library softserial ,
donc je crois qu il faut modifier pas mal de chose dans les libraries pour que l´Arduino Robot puisse etre controle via bluetooth .

Amarino:
donc je crois qu il faut modifier pas mal de chose dans les libraries pour que l´Arduino Robot puisse etre controle via bluetooth .

bonjour
je crois surtout que la lib softserial n'est pas conçue pour l'arduino robot qui est basé sur du ATmega32u4
edit , je retire ce que j'ai dit
il semblerait que ce soit possible mais avec les limitations suivantes
only the following can be used for RX: 8, 9, 10, 11, 14 (MISO), 15 (SCK), 16 (MOSI).
il faut donc faire un bilan d'occupation actuel des ces pins

Sinon il y a altSerial.h

merci dfgh & fdufnews et a tous ... pour votre aide

Est ce que vous pouvez m`expliquer comment s'etablit une communication entre deux cartes arduino a base

ATmega32U4 (comme celles d Ardurino Robot ) je m'explique :

en fait il y a une nappe de connection rx/tx entre les deux devices , Aduino Robot control et Arduino Motor

mais ces pins ne sont pas disponibles sur les deux cartes .

Donc mon idee est d utilser d'autres pins (miso/mosi ) afin d'etablir une connection rx/tx pour enfin controller

le robot via module bluetooth serial hc06 .

j ai ecris un petir code pour connecter la carte control board via bluetooth

1 / Quand j ai compile le code comme 'carte control board' des erreus aparaissent

2/ je l ai recompile une autre fois mais comme ' arduino leonardo' (ATmega32U4) , ca marche !

une connection s'etablit entre mon application bluetooth et robot control board ¡ je peux controler des pins i/O.

les erreurs qui m'aparaissent lors du mon premier essaie sont du softwareserial.cpp ;sofwareserail.h

Comment faire pour que la 'carte Robot Control' active une interruption sur le pin de 'miso/mosi ' pour

recevoir les Datas du bluetooth puis ensuite elle execute les commande ?