Correspondance entre PORTx et pin des cartes Arduino

Petite confusion cette correspondance n'est pas dans le fichier io*.h mais dans le fichier Arduino.h
Le fichier io*.h définie les "paramètres" pour Atmel et Atmel n'a rien à faire d'arduino.

Ce que tu cherches sont des macros qui sont définies dans le fichier Arduino.h

#define digitalPinToPort(P) ( pgm_read_byte( digital_pin_to_port_PGM + (P) ) )
#define digitalPinToBitMask(P) ( pgm_read_byte( digital_pin_to_bit_mask_PGM + (P) ) )
#define digitalPinToTimer(P) ( pgm_read_byte( digital_pin_to_timer_PGM + (P) ) )
#define analogInPinToBit(P) (P)
#define portOutputRegister(P) ( (volatile uint8_t *)( pgm_read_word( port_to_output_PGM + (P))) )
#define portInputRegister(P) ( (volatile uint8_t *)( pgm_read_word( port_to_input_PGM + (P))) )
#define portModeRegister(P) ( (volatile uint8_t *)( pgm_read_word( port_to_mode_PGM + (P))) )

Le fichier Arduino.h est ici :
arduino-1.8.x/hardware/arduino/avr/cores/arduino

Les fichier io*.h provenant d'Atmel sont ici :
arduino-1.8.x/hardware/tools/avr/avr/include/avr

Si tu cherches à lire les I/O de manière rapide en utilisant l'accés aux PORT tout en conservant la numérotation arduino je te conseille de regarder la bibliothèque pour le DHT22 de Rob Tilaart.
Tu aura un exemple d'utilisation de ces macros. Un bon exemple vaut mieux qu'un long discours.

Note quand même que même si c'est plus rapide que digitalRead(), "en virons" 65 cycles horloge, cela reste plus long que l'accès direct aux registres. La "perte" se situe dans le traitement des macro.
DigitalRead() "en virons" 65 cycles horloge (plus si la sortie peut faire de la PWM, pourquoi ?)
Macros arduino "en virons" 30 cycles horloge
Registres direct "en virons" 8 cycles horloge.

J'utilise le "viron" comme unité depuis que je me suis rendu compte que les résultats changent avec la version du compilateur.