I am using the 74hc165n one register with a Uno R3 and trying to make one led blink the number of times the pressed .
(ie if button 1 pressed then blink once, if button 2 pressed then blink twice etc).
Could someone assist me with this.
/*
74HC165 Shift Register input 5v
This is for testing 8 buttons
*/
//------------------------------------------------------------------
//------------------------------------------------------------------
// Define Connections to 74HC165
// register PL pin 1
int load = 12;
// register CP pin 2
int clockIn = 11;
// register Q7 pin 7
int dataIn = 9;
// register CE pin 15
int clockEnablePin = 8;
// How many shift register chips are daisy-chained.
#define number_of_Registers 1
// Width of data (how many ext lines)
#define dataWidth number_of_Registers * 8
//------------------------------------------------------------------
//------------------------------------------------------------------
//------------------------SETUP-------------------------------------
void setup()
{
// Setup Serial Monitor
Serial.begin(9600);
// Setup 74HC165 connections
pinMode(load, OUTPUT);
pinMode(clockEnablePin, OUTPUT);
pinMode(clockIn, OUTPUT);
pinMode(dataIn, INPUT);
// Setup LED
// temp remove when finished.
// blinks when btn pressed btn1=1 blin. btn2=2 blink etc.
pinMode(2, OUTPUT);
}
//------------------------------------------------------------------
//------------------------LOOP--------------------------------------
void loop()
{
getData();
}
//------------------------------------------------------------------
//-----------------------165 ROUTINES-------------------------------
void getData()
{
// Write pulse to load pin
digitalWrite(load, LOW);
delayMicroseconds(5);
digitalWrite(load, HIGH);
delayMicroseconds(5);
// Get data from 74HC165
digitalWrite(clockIn, HIGH);
digitalWrite(clockEnablePin, LOW);
byte incoming = shiftIn(dataIn, clockIn, LSBFIRST);
digitalWrite(clockEnablePin, HIGH);
// print2Serial(incoming);
showLED(incoming);
}
void print2Serial(byte incoming)// show the butto state
{
// Print to serial monitor
Serial.print("Pin States:\r\n");
for (int i = 0; i < dataWidth; i++)
{
Serial.print(" Pin-");
Serial.print(i);
Serial.print(": ");
if ((incoming >> i) & 1)
{
Serial.print("LOW");
Serial.print("\r\n");
}
else
{
Serial.print("HIGH");
Serial.print("\r\n");
showLED(incoming);
}
}
}
void showLED(byte incoming)// blink the led
{
for (int i = 0; i < dataWidth; i++)
{
if ((incoming >> i) & 1)
{
digitalWrite(2, HIGH); // turn the LED on
delay(1000); // wait for a second
digitalWrite(2, LOW); // turn the LED off
delay(1000); // wait for a second
}
}
}
//------------------------------------------------------------------
//------------------------------------------------------------------