Skip to content

Instantly share code, notes, and snippets.

@randomtestfive
Created March 22, 2022 00:22
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save randomtestfive/0e6e60f144e859a1639948b7dca9bdb7 to your computer and use it in GitHub Desktop.
Save randomtestfive/0e6e60f144e859a1639948b7dca9bdb7 to your computer and use it in GitHub Desktop.
red alert 1741 light boys
#include "Keypad.h"
#include "EEPROM.h"
const byte col = 4;
const byte row = 4;
char keys[row][col] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
byte rowpins[row]={9,8,7,6};
byte colpins[col]={5,4,3,2};
Keypad key = Keypad(makeKeymap(keys),rowpins,colpins,row,col);
byte digitMap[] = {
0b00111111,
0b00000110,
0b01011011,
0b01001111,
0b01100110,
0b01101101,
0b01111101,
0b00000111,
0b01111111,
0b01101111};
byte mode;
byte current;
void draw(byte in) {
Serial.print("draw: ");
Serial.println(in, DEC);
digitalWrite(14, (in&0b1)==0?LOW:HIGH);
digitalWrite(15, (in&0b10)==0?LOW:HIGH);
digitalWrite(16, (in&0b100)==0?LOW:HIGH);
digitalWrite(17, (in&0b1000)==0?LOW:HIGH);
digitalWrite(19, (in&0b10000)==0?LOW:HIGH);
digitalWrite(12, (in&0b100000)==0?LOW:HIGH);
digitalWrite(13, (in&0b1000000)==0?LOW:HIGH);
current = in;
}
void setup() {
Serial.begin(9600);
pinMode(12, OUTPUT);
pinMode(13, OUTPUT);
pinMode(14, OUTPUT);
pinMode(15, OUTPUT);
pinMode(16, OUTPUT);
pinMode(17, OUTPUT);
pinMode(19, OUTPUT);
mode = 0;
current = 0;
}
void readWrite(byte addr) {
if(mode==1) {
current = EEPROM.read(addr);
} else {
EEPROM.write(addr,current);
mode = 1;
}
}
void loop() {
char k = key.getKey();
if(k!=NO_KEY) {
if(mode==0) {
if(k>='0'&&k<='9') {
draw(digitMap[k-'0']);
} else if(k=='*') {
mode = 1;
} else {
draw(0);
}
} else if(mode>0) {
switch(k) {
case '4':
current ^= 0b100000;
break;
case '5':
current ^= 0b1;
break;
case '6':
current ^= 0b10;
break;
case '7':
current ^= 0b10000;
break;
case '8':
current ^= 0b1000000;
break;
case '9':
current ^= 0b100;
break;
case '0':
current ^= 0b1000;
break;
case '#':
mode = 0;
break;
case '*':
mode = 2;
break;
case '1':
readWrite(0);
break;
case '2':
readWrite(1);
break;
case '3':
readWrite(2);
break;
case 'A':
readWrite(3);
break;
case 'B':
readWrite(4);
break;
case 'C':
readWrite(5);
break;
case 'D':
readWrite(6);
break;
}
draw(current);
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment