-
-
Save thehig/aa7689260a68c797936c614fb00ad87f to your computer and use it in GitHub Desktop.
Arduino: 1337 7segment
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 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