/*
#define dataPin = 13; // Data pin of 74HC595 is connected to Digital pin 13 (SER, chip pin 14)
#define latchPin = 14; // Latch pin of 74HC595 is connected to Digital pin 14 (RCLK, chip pin 12)
#define clockPin = 27; // Clock pin of 74HC595 is connected to Digital pin 27 (SRCLK, chip pin 11)
#define oePin = 4; // Output enable pin
*/
//Constants
#define number_of_74hc595s 3
#define numOfRegisterPins number_of_74hc595s * 8
#define dataPin 13
#define latchPin 14
#define clockPin 27
#define oePin 4
//PUSHBUTTONS
#define KEY1 18
#define KEY2 19
#define KEY3 21
#define KEY4 23
//Variables
boolean registers [numOfRegisterPins];
boolean saved_registers [numOfRegisterPins];
uint8_t SEG8Code[] =
{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x58,0x5e,0x79,0x71,0x76,0x74,0x38,0x54,0x37,0x5c,0x73,0x50,0x78,0x3e,0x40,0x00};//Common cathode Digital Tube Character Gallery
void setup(){
//Init Serial USB
Serial.begin(115200);
Serial.println(F("Initialize System"));
//Init register
pinMode(dataPin, OUTPUT);
pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(oePin, OUTPUT);
digitalWrite(oePin, HIGH);
clearRegisters();
writeRegisters();
digitalWrite(oePin, LOW);
delay(500000);
}
void clearRegisters(){/* function clearRegisters */
//// Clear registers variables
for(int i = numOfRegisterPins-1; i >= 0; i--){
registers[i] = HIGH;//LOW;
writeRegisters();
}
}
void writeRegisters(){/* function writeRegisters */
//// Write register after being set
digitalWrite(latchPin, LOW);
for(int i = numOfRegisterPins-1; i >= 0; i--){
digitalWrite(clockPin, LOW);
int val = registers[i];
digitalWrite(dataPin, val);
digitalWrite(clockPin, HIGH);
}
digitalWrite(latchPin, HIGH);
//for(int i=0; i<=numOfRegisterPins-1; i++) {
// printf("%i",registers[i]);
//}
//printf("\n");
}
void setRegisterPin(int index,int value){/* function setRegisterPin */
for(int i = numOfRegisterPins-1; i >= 0; i--){
//saved_registers[i]=registers[i];
if(registers[i])
{
printf("1");
} else {
printf("0");
}
}
printf("\n");
////Set register variable to HIGH or LOW
registers[index] = value;
}
void writeGrpRelay(){/* function writeGrpRelay */
for(int i = numOfRegisterPins-1; i >= 8; i--){
//Serial.print(F("Relay "));Serial.print(i);Serial.println(F(" HIGH"));
setRegisterPin(i, LOW);
writeRegisters();
delay(100);
//Serial.print(F("Relay "));Serial.print(i);Serial.println(F(" LOW"));
setRegisterPin(i, HIGH);
writeRegisters();
delay(1);
}
}
void relayOn(int relay) {
//Serial.print("Relay ");Serial.print(relay);Serial.println(" on");
int registernum=relay+16;
setRegisterPin(registernum, LOW);
writeRegisters();
}
void relayOff(int relay) {
//Serial.print("Relay ");Serial.print(relay);Serial.println(" off");
int registernum=relay+16;
setRegisterPin(registernum, HIGH);
writeRegisters();
}
void digitOn(int digit) {
//Serial.print("Digit ");Serial.print(digit);Serial.println(" on");
int registernum=digit+8;
setRegisterPin(registernum, LOW);
writeRegisters();
}
void digitOff(int digit) {
//Serial.print("Digit ");Serial.print(digit);Serial.println(" off");
int registernum=digit+8;
setRegisterPin(registernum, HIGH);
writeRegisters();
}
void writeCharacter(int seg8code_index) {
int dat=SEG8Code[seg8code_index];
printf("%x\n",dat);
for(int i=7; i>=0; i--){
if(dat & 0x80) {
setRegisterPin(i, HIGH);
writeRegisters();
} else {
setRegisterPin(i,LOW);
writeRegisters();
}
dat <<= 1;
}
}
void loop(){
//writeGrpRelay();
//clearRegisters();
int i;
for(i=0; i<=7; i++) {
relayOn(i);
delay(500);
relayOff(i);
}
digitOn(0);
writeCharacter(1);
delay(500);
digitOn(1);
writeCharacter(2);
delay(500);
digitOn(2);
writeCharacter(3);
delay(500);
digitOn(3);
writeCharacter(4);
delay(500);
for(int digitnum=0; digitnum<=3; digitnum++) {
for(int i=0; i<=16; i++) {
digitOn(digitnum);
writeCharacter(i);
delay(200);
digitOff(digitnum);
}
}
}