/*! \file lib_io_tp.cpp \brief Premier TD pour le CESI. \author Bertrand Vandeportaele IUT GEII \date 28/10/2021 */ #include "lib_io_tp.h" //Librairie pour registres à décalage sur Wokwi.com /*mix de https://wokwi.com/arduino/projects/313005664351814210 et de https://wokwi.com/arduino/projects/301188813482361352 */ // Pin definitions: const int datapin_in = 9; /* Q7 */ const int clockpin_in = 8; /* CP */ const int latchpin_in = 4; /* PL */ const int datapin_out = 5; const int clockpin_out = 6; const int latchpin_out = 7; /////////////////////////////////////////////////////// /*! * \brief Fonction d'initialisation des ressources matérielles pour accéder aux ports d'entrée/sortie */ void SetupES(void){ pinMode(datapin_in, INPUT); pinMode(clockpin_in, OUTPUT); pinMode(latchpin_in, OUTPUT); // Set the three SPI pins to be outputs: pinMode(datapin_out, OUTPUT); pinMode(clockpin_out, OUTPUT); pinMode(latchpin_out, OUTPUT); readPort(); writePort(0); } /////////////////////////////////////////////////////// /*! \fn unsigned char readPort(void) \brief Fonction de lecture du port d'entrée \return valeur 8 bits lue sur le port */ unsigned char readPort(void){ unsigned char val=0; // Step 1: Sample digitalWrite(latchpin_in, LOW); digitalWrite(latchpin_in, HIGH); for (int i = 0; i < 8; i++) { int bit = digitalRead(datapin_in); val=(val<<1)|bit; digitalWrite(clockpin_in, HIGH); // Shift out the next bit digitalWrite(clockpin_in, LOW); } return val; } /////////////////////////////////////////////////////// /*! * \brief Fonction d'écriture vers le port de sortie * @param value valeur 8 bits à écrire sur le port */ void writePort(unsigned char value){ shiftOut(datapin_out, clockpin_out, MSBFIRST, value); //Send "data" to the shift register //Toggle the latchpin_out to make "data" appear at the outputs digitalWrite(latchpin_out, HIGH); digitalWrite(latchpin_out, LOW); } ///////////////////////////////////////////////////////