Skip to content

Instantly share code, notes, and snippets.

@Skymetal
Last active August 18, 2016 10:40
Show Gist options
  • Save Skymetal/81c6c77be3afe810132ad8b70e50f836 to your computer and use it in GitHub Desktop.
Save Skymetal/81c6c77be3afe810132ad8b70e50f836 to your computer and use it in GitHub Desktop.
Arduino: 1337 7segment
// CONST's
int DS_pin = 8;
int STCP_pin = 9;
int SHCP_pin = 10;
int C1_pin = 1;
int C2_pin = 2;
int C3_pin = 3;
int C4_pin = 4;
// 8 LED Registers
boolean registers[8];
int DELAY = 300;
// VALUES {0,1,2,3,4,5,6,7,8,9}
int numbers[] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7C, 0x07, 0x7F, 0x67};
int char_a = 0x77;
int char_b = 0x7C;
int char_c = 0x39;
int char_d = 0x5E;
int char_e = 0x79;
int char_f = 0x71;
int char_g = 0x6F;
int char_h = 0x36;
int char_i = 0x06;
int char_j = 0x0E;
// int char_k = 0x00;
int char_l = 0x38;
// int char_m = 0x00;
int char_n = 0x54;
int char_o = 0x5C;
int char_p = 0x73;
int char_q = 0xE7;
int char_r = 0x50;
int char_s = 0x6D;
int char_t = 0x70;
int char_u = 0x3E;
// int char_v = 0x00;
// int char_w = 0x00;
// int char_x = 0x00;
int char_y = 0x6E;
int char_z = 0x5B;
int symb_qm = 0x53;
int symb_dot = 0x80;
int symb_space = 0x00;
int counter = -1;
int segmentgroups[] = {C1_pin, C2_pin, C3_pin, C4_pin};
int currentsegment = 0;
void setup()
{
// Configure output pins
pinMode(DS_pin,OUTPUT);
pinMode(STCP_pin,OUTPUT);
pinMode(SHCP_pin,OUTPUT);
pinMode(C1_pin, OUTPUT);
pinMode(C2_pin, OUTPUT);
pinMode(C3_pin, OUTPUT);
pinMode(C4_pin, OUTPUT);
Serial.begin(9600);
prepareMessage("bong!");
digitalWrite(segmentgroups[currentsegment], HIGH);
writereg();
}
// Writes the LED registers to the Shift-register
void writereg()
{
// Prepare to write new data
digitalWrite(STCP_pin, LOW);
for (int i = 7; i>=0; i--)
{
// Prepare for bit
digitalWrite(SHCP_pin, LOW);
// Write bit
digitalWrite(DS_pin, registers[i] );
// Done writing bit
digitalWrite(SHCP_pin, HIGH);
}
// Done writing new data
digitalWrite(STCP_pin, HIGH);
}
void fillreg(int hexcode)
{
//Convert Hex to Binary & populate registers[] with Binary
for(int i = 0; i < 8; i++){
registers[i] = !bitRead(hexcode, i);
}
}
void writetopanel(int character, int panel)
{
fillreg(character);
digitalWrite(panel, HIGH);
writereg();
delay(5);
digitalWrite(panel, LOW);
}
void write_word(int char_1, int char_2, int char_3, int char_4){
writetopanel(char_1 , C1_pin);
writetopanel(char_2 , C2_pin);
writetopanel(char_3 , C3_pin);
writetopanel(char_4 , C4_pin);
}
void delayWord(int char_1, int char_2, int char_3, int char_4, int interval){
for(int i = 0; i < interval; i++){
write_word(char_1, char_2, char_3, char_4);
}
}
void scrollWord(int char_1, int char_2, int char_3, int char_4, int delayInterval){
delayWord(char_1 , char_2, char_3, char_4, delayInterval);
delayWord(char_2, char_3, char_4, symb_space, delayInterval);
delayWord(char_3, char_4, symb_space, char_1, delayInterval);
delayWord(char_4, symb_space, char_1 , char_2,delayInterval);
delayWord(symb_space, char_1 , char_2, char_3, delayInterval);
}
//Bong -> bong (toLowerCase)
//'bong' -> ['b', 'o', 'n', 'g']
// ['b', 'o', 'n', 'g'] -> [char_b , char_o, char_n, char_g]
const int MAXMESSAGE = 50;
int outputArray[MAXMESSAGE];
void convertToCharArray(String message){
char charBuf[MAXMESSAGE];
message.toCharArray(charBuf, MAXMESSAGE);
for(int i = 0; i<MAXMESSAGE; i++){
char character = charBuf[i];
if(character == '!') return;
outputArray[i] = converttochar(character);
}
}
//void convertToCharArray(char[] *inputArray ){
// int arrayLen = sizeof(charArray) / sizeof(char);
// int[arrayLen] output;
// for (int i = 0; i<arrayLen; i++){
// output[i] = converttochar(charArray[i]);
// }
// return output;
//}
// b -> char_b
int converttochar(char input){
switch(input){
case 'a' : return char_a;
case 'b' : return char_b;
case 'c' : return char_c;
case 'd' : return char_d;
case 'e' : return char_e;
case 'f' : return char_f;
case 'g' : return char_g;
case 'h' : return char_h;
case 'i' : return char_i;
case 'j' : return char_j;
case 'l' : return char_l;
case 'n' : return char_n;
case 'o' : return char_o;
case 'p' : return char_p;
case 'q' : return char_q;
case 'r' : return char_r;
case 's' : return char_s;
case 't' : return char_t;
case 'u' : return char_u;
case 'y' : return char_y;
case 'z' : return char_z;
default: return symb_space;
}
}
char msgBuffer[4];
void prepareMessage(String message){
convertToCharArray(message);
for(int i = 0; i < MAXMESSAGE; i++)
{
int character = outputArray[i];
if(character == NULL) return;
for(int i = 0; i < 4; i++){
msgBuffer[i] = outputArray[i];
}
}
}
int delayInterval = 20;
void loop()
{
scrollWord(msgBuffer[0], msgBuffer[1], msgBuffer[2], msgBuffer[3], delayInterval);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment