// Exemple d'utilisation du shioft register 74HC165N avec 16 bouttons pour controler une manette
// Connection des puces 74HC165 :
// Parrallel Load In
int load = 2; // SH/LD sur la puce (Shift or load input)
// Clock
int clockIn = 3; // CLk sur la puce (Clock Input)
//Q7 Complementary Output
int dataOut = 4; // QH sur la puce (Serial Output)
// Miscellaneaous
int D = 1; // delay
int jButtonDelay = 40; // delay des bouttons du Joystick Virtuel
int j; // cette valeur sert a créer une boucle qui determinera la valeur des bits
int value; // cette valeur sert à stocker la valeur des bits après leur lecture
byte switchVar = 0; // stocke une array de bit pour afficher la valeur des bits dans le Serial.Monitor
// ---------------------------------------------------------------------------------------------------------//
void setup() {
Serial.begin(9600);
pinMode(load,OUTPUT);
pinMode(clockIn,OUTPUT);
pinMode(dataOut,INPUT);
}
//----------------------------------------------------------------------------------------------------------//
void loop() {
// 1 - Récupérations des données par la mémoire à registre
uint16_t dataIn = 0; // marche aussi avec : byte dataIn =0; => mais pas avec + que 8 bits
digitalWrite(load, 0); // mise en marche des entrées parallèles (plutot que de la sortie en série, c'est un selecteur en gros)
digitalWrite(clockIn,0); // coup d'horloge pour le passage des entrées
digitalWrite(clockIn,1); // blocage de l'horloge (les données sont arrivé dans là mémoire à registre)
digitalWrite(load, 1); // On enclenche les sorties en séries plutot que l'entrée en parallèle
// 2 - Récupération des données par la carte Arduino (bit par bit)
for(j = 0; j <16; j++){ //2.1 : chaque bit est récupéré par cette boucle (16 bits max)
value = digitalRead(dataOut);
if (value){ // 2.2 : lorsqu'un bit est récupéré, on stock ça valeur dans l'ordre
int A = (1 << j); // << veut dire Bitshift left , il sert a garder l'odre dans lequel les bit arrive pour ne pas perdre la pos
dataIn = dataIn | A; // |veut dire bitwise OR , il sert a ajouter sans additioner des bits
}
digitalWrite(clockIn, 0); // l'horloge refait un On/OFF après chaque bit pour faire passer le suivant
digitalWrite(clockIn, 1); // ------------------------------------------------------------------------
}
if(switchVar != dataIn){
switchVar = dataIn;
Serial.print("Data In = ");
Serial.print(dataIn, DEC);
Serial.print(" / ");
Serial.println(dataIn, BIN);
}
delay(D);
}