// Output Pins to Shift Register 74HC595
#define latchOutPin 10 // STCP (pin 12)
#define clockOutPin 12 // SHCP (pin 11)
#define dataOutPin 11 // DS (pin 14)
boolean shiftFlag = false;
char keymapToUse[132];
const char keymap[] = {
'0', '1', '2', '3', '4', '5', '6', '7',
'8', '9', '0', '1', '1', '1', '`', '1',
'1', '1', '1', '1', '2', 'q', '1', '2',
'2', '2', 'z', 's', 'a', 'w', '2', '3',
'3', 'c', 'x', 'd', 'e', '4', '3', '3',
'4', '4', 'v', 'f', 't', 'r', '5', '4',
'4', 'n', 'b', 'h', 'g', 'y', '6', '5',
'5', '5', 'm', 'j', 'u', '7', '8', '6',
'6', ',', 'k', 'i', 'o', '0', '9', '7',
'7', '.', '/', 'l', ';', 'p', '-', '7',
'8', '8', '\'', '8', '[', '=', '8', '8',
'8', '8', '9', ']', '9', '\\', '9', '9',
'9', '\\', '9', '9', '1', '1', '1', '1',
'1', '1', '1', '4', '7', '1', '1', '1',
'0', '.', '2', '5', '6', '8', '1', '1',
'1', '+', '3', '-', '*', '9', '1', '1',
'1', '1', '1', '1'
};
const char keymapShift[] = {
'0', '1', '2', '3', '4', '5', '6', '7',
'8', '9', '0', '1', '1', '1', '`', '1',
'1', '1', '1', '1', '2', 'q', '1', '2',
'2', '2', 'z', 's', 'A', 'w', '2', '3',
'3', 'c', 'x', 'd', 'e', '4', '3', '3',
'4', '4', 'v', 'f', 't', 'r', '5', '4',
'4', 'n', 'b', 'h', 'g', 'y', '6', '5',
'5', '5', 'm', 'j', 'u', '7', '8', '6',
'6', ',', 'k', 'i', 'o', '0', '9', '7',
'7', '.', '/', 'l', ';', 'p', '-', '7',
'8', '8', '\'', '8', '[', '=', '8', '8',
'8', '8', '9', ']', '9', '\\', '9', '9',
'9', '\\', '9', '9', '1', '1', '1', '1',
'1', '1', '1', '4', '7', '1', '1', '1',
'0', '.', '2', '5', '6', '8', '1', '1',
'1', '+', '3', '-', '*', '9', '1', '1',
'1', '1', '1', '1'
};
uint8_t lastscan = 0x1C;
void setup() {
// put your setup code here, to run once:
// key up F0 {1,0,0,0,0,1,1,1,1};
// a 1C {1,0,0,1,1,1,0,0,0};
// special E0 {1,0,0,0,0,0,1,1,1};
// lshfit {1,0,1,0,0,1,0,0,0};
int bits[] = {1,0,0,1,1,1,0,0,0};
Serial.begin(115200);
// Setup 74HC595 connections
pinMode(latchOutPin, OUTPUT);
pinMode(clockOutPin, OUTPUT);
pinMode(dataOutPin, OUTPUT);
uint16_t scanval = 0;
for(int i = 0; i<11; i++) {
scanval |= bits[i] << i;
}
Serial.print("scanval = ");
Serial.println(scanval, BIN);
scanval >>= 1;
Serial.print("scanval >>= 1 = ");
Serial.println(scanval, BIN);
scanval &= 0xFF;
Serial.print("scanval &= 0xFF = ");
Serial.println(scanval, BIN);
Serial.print("scanval HEX = ");
Serial.println(scanval, HEX);
if (lastscan != 0xF0 && scanval != 0xF0) {
if (scanval == 0x12 || scanval == 0x59) {
shiftFlag = true;
} else if (scanval == 0xE0) {
} else {
if (shiftFlag) {
memcpy(keymapToUse, keymapShift, sizeof(keymapShift));
} else {
memcpy(keymapToUse, keymap, sizeof(keymap));
}
Serial.println(keymapToUse[scanval]);
sendOutputByte(keymapToUse[scanval]);
}
} else if (lastscan == 0xF0 && (scanval == 0x12 || scanval == 0x59)) {
shiftFlag = false;
}
lastscan = scanval;
}
void loop() {
// put your main code here, to run repeatedly:
}
void sendOutputByte( byte outputByte ) {
digitalWrite(latchOutPin, LOW);
shiftOut(dataOutPin, clockOutPin, MSBFIRST, outputByte);
digitalWrite(latchOutPin, HIGH);
}
nano:12
nano:11
nano:10
nano:9
nano:8
nano:7
nano:6
nano:5
nano:4
nano:3
nano:2
nano:GND.2
nano:RESET.2
nano:0
nano:1
nano:13
nano:3.3V
nano:AREF
nano:A0
nano:A1
nano:A2
nano:A3
nano:A4
nano:A5
nano:A6
nano:A7
nano:5V
nano:RESET
nano:GND.1
nano:VIN
nano:12.2
nano:5V.2
nano:13.2
nano:11.2
nano:RESET.3
nano:GND.3
bargraph1:A1
bargraph1:A2
bargraph1:A3
bargraph1:A4
bargraph1:A5
bargraph1:A6
bargraph1:A7
bargraph1:A8
bargraph1:A9
bargraph1:A10
bargraph1:C1
bargraph1:C2
bargraph1:C3
bargraph1:C4
bargraph1:C5
bargraph1:C6
bargraph1:C7
bargraph1:C8
bargraph1:C9
bargraph1:C10
sr1:Q1
sr1:Q2
sr1:Q3
sr1:Q4
sr1:Q5
sr1:Q6
sr1:Q7
sr1:GND
sr1:Q7S
sr1:MR
sr1:SHCP
sr1:STCP
sr1:OE
sr1:DS
sr1:Q0
sr1:VCC