// sketch written by SparkFun Electronics
// cek yang 3 register
// https://wokwi.com/projects/307873647881617986
const int keyEn = 6, keyA0 = 7, keyA1 = 8, keyA2 = 9;
//const int pinData = A0, pinC1 = A1, pinC2 = A2;
const int pinFill = 12, pinFind = 11, pinDel = 10, pinRes = 13;
const int keyB[] = {2, 3, 4, 5};
const int sizeCode = 10, totalData = 200, maxLed = 32, jmlBaris = 8;
int fixX, fixY;
int mode = 0, findIndex = 50;
boolean tableBool[maxLed];
String serialCode, dataCode;
String tempCode;
int stateButton = 0, stateEnter = 0, stateBlink = 0;
unsigned long lastPush = 0, duration = 400, lastBlink = 0, durBlink = 200;
char tempChar;
int arrayChar[10][4] = {{'0', 'A', 'K', 'U'},
{'1', 'B', 'L', 'V'},
{'2', 'C', 'M', 'W'},
{'3', 'D', 'N', 'X'},
{'4', 'E', 'O', 'Y'},
{'5', 'F', 'P', 'Z'},
{'6', 'G', 'Q', '.'},
{'7', 'H', 'R', ','},
{'8', 'I', 'S', '_'},
{'9', 'J', 'T', '@'}
};
const int pinData = 21, pinC1 = 23, pinC2 = 22; //22 latch, 23 clock
const int dataPin = 21;
const int clockPin = 23;
const int latchPin = 22;
int numOfRegisters = 4;
byte* registerState;
byte data = 0;
void setup(){
Serial.begin(115200);
Serial.println("Hello, ESP32!");
// Set the three SPI pins to be outputs:
// pinMode(datapin, OUTPUT);
// pinMode(clockpin, OUTPUT);
// pinMode(latchpin, OUTPUT);
// led1(5);
// pinMode(pinFill, INPUT_PULLUP); pinMode(pinFind, INPUT_PULLUP);
// pinMode(pinDel, INPUT_PULLUP); pinMode(pinRes, INPUT_PULLUP);
// pinMode(keyA0, OUTPUT); pinMode(keyA1, OUTPUT); pinMode(keyA2, OUTPUT);
// pinMode(keyEn, OUTPUT); pinMode(pinData, OUTPUT);
pinMode(pinC1, OUTPUT); pinMode(pinC2, OUTPUT);
// for (int i = 0; i < 4; i++)pinMode(keyB[i], INPUT_PULLUP);
pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(dataPin, OUTPUT);
clearLED(); //nyala
delay(1000);
forceLED(); //mati
delay(1000);
clearLED(); //nyala
delay(1000);
for (int i=0;i<=32;i++){
delay(100);
ledOK(i);
}
delay(200);
clearLED(); //nyala
// Serial.println("Init..");
// //Initialize array
// registerState = new byte[numOfRegisters];
// for (size_t i = 0; i < numOfRegisters; i++) {
// registerState[i] = 0;
// }
// for (int i = 0; i < 32; i++)
// regWrite(i, HIGH);
// delay(500);
// on();
// delay(500);
// off();
// delay(500);
// regWrite(1, LOW);
// regWrite(2, LOW);
// regWrite(3, LOW);
// delay(500);
// regWrite(4, HIGH);
// regWrite(5, HIGH);
// regWrite(6, HIGH);
}
void loop(){
}
void on(){
for (int i = 0; i < 32; i+=2){
regWrite(i, LOW);
delay(50);
}
}
void off(){
for (int i = 0; i < 32; i+=2){
regWrite(i, HIGH);
delay(50);
}
}
void regWrite(int pin, bool state){
//Determines register
int reg = pin / 8;
//Determines pin for actual register
int actualPin = pin - (8 * reg);
//Begin session
digitalWrite(latchPin, LOW);
for (int i = 0; i < numOfRegisters; i++){
//Get actual states for register
byte* states = ®isterState[i];
//Update state
if (i == reg){
bitWrite(*states, actualPin, state);
}
//Write
shiftOut(dataPin, clockPin, MSBFIRST, *states);
//Serial.print(actualPin);
}
}
void forceLED() {
for (int y = 0; y < 32; y++) {
tableBool[y] = true; //isi 32 data untuk nyalakan led
}
turnLED();
}
void turnLED1() {
for (int i = 31; i >= 0; i--) {
// if (tableBool[i] == 1)digitalWrite(pinData, LOW);
// else digitalWrite(pinData, HIGH);
digitalWrite(pinData,!tableBool[i]);
delayMicroseconds(5);
digitalWrite(pinC1, HIGH); delayMicroseconds(50); digitalWrite(pinC1, LOW); delayMicroseconds(50);
digitalWrite(pinC2, HIGH); delayMicroseconds(50); digitalWrite(pinC2, LOW); delayMicroseconds(50);
}
}
void turnLED() {
digitalWrite(pinC2, HIGH);
for (int i = 31; i >= 0; i--) {
// if (tableBool[i] == 1)digitalWrite(pinData, LOW);
// else digitalWrite(pinData, HIGH);
digitalWrite(pinC1, HIGH);
digitalWrite(pinData,!tableBool[i]);
delayMicroseconds(50);
digitalWrite(pinC1, LOW);
}
digitalWrite(pinC2, LOW);
}
void ledFault() {
bool tableBoola[] = { 0, 1, 1, 0, 0, 1, 1, 0,
0, 0, 0, 1, 1, 0, 0, 0,
0, 0, 0, 1, 1, 0, 0, 0,
0, 1, 1, 0, 0, 1, 1, 0
};
bool tableBoolb[] = { 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0
};
for (int z = 0; z <= 3; z++) {
for (int y = 0; y < 32; y++) {
tableBool[y] = tableBoola[y];
}
turnLED();
delay(200);
for (int y = 0; y < 32; y++) {
tableBool[y] = tableBoolb[y];
}
turnLED();
delay(200);
}
}
void flipLED() {
bool tableBoola[] = { 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0
};
bool tableBoolb[] = { 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1
};
for (int z = 0; z <= 5; z++) {
for (int y = 0; y < 32; y++) {
tableBool[y] = tableBoola[y];
}
turnLED();
delay(200);
for (int y = 0; y < 32; y++) {
tableBool[y] = tableBoolb[y];
}
turnLED();
delay(200);
}
}
void clearLED() {
for (int y = 0; y < 32; y++) {
tableBool[y] = false; //isi dulu 32 data baru kirim ke LED
}
turnLED();
}
void ledOK(int i) {
//i = ((i/50)*8)+(i%50)-1;
tableBool[i] = 1;
turnLED();
}