0x01<<PINB0 ? A quoi ça correspond ?

Bonjour ,

Dans le bout de code suivant l'on declare les PINs de l'arduino , mais j'aimerais avoir plus détails sur le fonctionnement de ce code.
A quoi correspond "0x01" et PINB0 , PIND4 , PINC3 etc...qu'elle sont ces PINs ? pourquoi les déclarer de cette façon ?

Merci

#define Fil_A_A1 	(0x01<<PINB0)	
#define Fil_A_A2 	(0x01<<PINB1)	
#define Fil_A_B1 	(0x01<<PINB2)	
#define Fil_A_B2 	(0x01<<PINB3)	

#define Fil_B_A1 	(0x01<<PIND4)	
#define Fil_B_A2 	(0x01<<PIND5)	
#define Fil_B_B1 	(0x01<<PIND6)	
#define Fil_B_B2 	(0x01<<PIND7)

#define Fil_C_A1 	(0x01<<PINC0)	
#define Fil_C_A2 	(0x01<<PINC1)	
#define Fil_C_B1 	(0x01<<PINC2)	
#define Fil_C_B2 	(0x01<<PINC3)

C'est du bitwise : [Tuto] Le « bitwise  pour les nuls | «Skyduino - Le DIY à la française

0x01 vaut en binaire 0000 0001
L'opérateur >> (Shift right) décale les bits vers la droite
par exemple 0110 0101>> 4 retourne 0000 0110

L'oppérateur << (Shift left) décale les bits vers la gauche
par exemple 0110 0101 << 4 retourne 0101 0000

#define Fil_A_B1 (0x01<<PINB2)
avec par exemple PINB2 = 4

0x01 << 4 vaut 0000 0001 << 4 et retourne 0001 0000

Sans le reste du code c'est difficile de savoir à quoi ça va servir.

PINB0 etc .... Ce sont des masques pour manipuler les registres (enfin pas sur à 100% vu que je code pas en dur chez Atmel)

Bonjour ,

legolas95:
Dans le bout de code suivant l'on declare les PINs de l'arduino , mais j'aimerais avoir plus détails sur le fonctionnement de ce code.
A quoi correspond "0x01" et PINB0 , PIND4 , PINC3 etc...qu'elle sont ces PINs ? pourquoi les déclarer de cette façon ?

0x01 = valeur 1 en notation hexadécimal

PINB0, PIND4 , PINC3, ... = équivaut à des numéro de broche et de port du microcontrôleur
PINB0 = 0
PINB1 = 1
PINB2 = 2
PINB3 = 4
...
C'est juste des mémo pour faire de la manipulation de port direct.
(personnellement je trouve ces mémo inutiles mais bon ...)

Dans tout les cas je ne vois pas pourquoi tu part dans l'exploration de code d'un niveau déjà relativement élevé (et bas niveau) sans connaitre les bases tel que l'hexadécimal :wink:

Edit :
Grosse remarque à noter : ceci n'est pas vraiment du domaine de l'Arduino mais du domaine de la programmation AVR "de base".

ceci n'est pas vraiment du domaine de l'Arduino mais du domaine de la programmation AVR "de base"

C'est pas interdit ? :grin: :grin:

68tjs:
C'est pas interdit ? :grin: :grin:

Quoi ? La prog Arduino ou la prog AVR ?
:grin:

skywodd:
tu part dans l'exploration de code d'un niveau déjà relativement élevé (et bas niveau)

Il faut avoir un haut niveau pour programmer en bas niveau.
c'est de la logique d'informaticien :grin:

Christian_R:

skywodd:
tu part dans l'exploration de code d'un niveau déjà relativement élevé (et bas niveau)

Il faut avoir un haut niveau pour programmer en bas niveau.
c'est de la logique d'informaticien :grin:

La vie est une perpétuelle contradiction, et comme l'informatique c'est la vie ... CQFD 8)