/*
74HC165 Shift register input example
https://wokwi.com/arduino/projects/306031380875182657
(C) 2021, Uri Shaked
*/
// register pins:
const int dataPin = 2; /* Q7 */
const int clockPin = 3; /* CP */
const int latchPin = 4; /* PL */
const int numOfRegisters = 2;
const int numBits = 8 * numOfRegisters; /* Set to 8 * number of shift registers */
// pins for joystick:
const int SW_pin = 5; // digital pin connected to switch output
const int X_pin = A1; // analog pin connected to X output
const int Y_pin = A0; // analog pin connected to Y output
const String jsValues[] = {"up", "down", "left", "right"};
String jsPosition;
void setup() {
Serial.begin(115200);
pinMode(dataPin, INPUT);
pinMode(clockPin, OUTPUT);
pinMode(latchPin, OUTPUT);
pinMode(SW_pin, INPUT);
digitalWrite(SW_pin, HIGH);
String jsPosition = "Standing by...";
}
void loop() {
// Step 1: Sample
digitalWrite(latchPin, LOW);
digitalWrite(latchPin, HIGH);
// Step 2: Shift
Serial.print("Bits: ");
for (int i = 0; i < numBits; i++) {
int bit = digitalRead(dataPin);
if (bit == HIGH) {
Serial.print("1");
} else {
Serial.print("0");
}
digitalWrite(clockPin, HIGH); // Shift out the next bit
digitalWrite(clockPin, LOW);
}
Serial.println();
char buffer[30];
int xval = pseudolog(analogRead(X_pin));
int yval = pseudolog(analogRead(Y_pin));
sprintf(buffer, "Switch: %d (%d,%d)\n", digitalRead(SW_pin), xval, yval);
Serial.println(buffer);
joystickPosition(xval, yval);
Serial.print("direction of joystick: ");
Serial.println(jsPosition);
delay(1000);
}
int pseudolog(int val) {
if (val < 1023 / 2) {
return map(val, 0, 1023 / 10, 0, 1023 / 2);
} else {
return map(val, 1023 / 10, 1023, 1023 / 2, 1023);
}
}
String joystickPosition(int x, int y){
if(x == 738 && y == 738){
//do nothing;
}
else if(x == 738 && y == 1023){
jsPosition = jsValues[0];
}
else if(x == 738 && y == 0){
jsPosition = jsValues[1];
}
else if(x == 1023 && y == 738){
jsPosition = jsValues[2];
}
else {
jsPosition = jsValues[3];
}
}