int latchPin = 25;
int clockPin = 33;
int dataPin = 32;
const byte seven_segment[] = {0B00100010, 0B01101111, 0B00110100, 0B00101100, 0B01101001, 0B10101000, 0B10100000, 0B00101111, 0B00100000, 0B00101000};
const int ledPin = 18;
const int ledPin2 = 26;
const int ledPin3 = 27;
const int ledPin4 = 13;
int ledState = LOW;
int counter;
bool hold_down = 0;
bool hold_up = 0;
byte btn_B1 = 36;
byte btn_B2 = 39;
byte btn_B3 = 35;
unsigned long cur_time, old_time;
int buttonState_B1 = 0;
int lastButtonState_B1 = 0;
int currentButtonState_B1 = 0;
unsigned long lastDebounceTime_B1 = 0;
int buttonState_B2 = 0;
int lastButtonState_B2 = 0;
int currentButtonState_B2 = 0;
unsigned long lastDebounceTime_B2 = 0;
int buttonState_B3 = 0;
int lastButtonState_B3 = 0;
int currentButtonState_B3 = 0;
unsigned long lastDebounceTime_B3 = 0;
unsigned long debounceDelay = 25;
int flag_B1 = 1;
int flag_B2 = 1;
int flag_B3 = 1;
int flag_set = 0;
int count_B1 = 0;
int count_B2 = 0;
int count_B3 = 0;
void setup() {
//set pins to output because they are addressed in the main loop
pinMode(btn_B1, INPUT);
pinMode(btn_B2, INPUT);
pinMode(btn_B3, INPUT);
pinMode(ledPin, OUTPUT);
pinMode(ledPin2, OUTPUT);
pinMode(ledPin3, OUTPUT);
pinMode(ledPin4, OUTPUT);
Serial.begin(115200);
pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(dataPin, OUTPUT);
dis7(0);
}
void loop() {
//count up routine
currentButtonState_B1 = digitalRead(btn_B1);
currentButtonState_B2 = digitalRead(btn_B2);
currentButtonState_B3 = digitalRead(btn_B3);
if(currentButtonState_B1 == 0 && currentButtonState_B2 == 0){
flag_set = 1; // set wifi
}
if(currentButtonState_B2 == 0 && currentButtonState_B3 == 0){
flag_set = 0; // back to normal
}
if (currentButtonState_B1 != lastButtonState_B1) {
lastDebounceTime_B1 = millis();
}
if ((millis() - lastDebounceTime_B1) > debounceDelay) {
if (currentButtonState_B1 != buttonState_B1) {
buttonState_B1 = currentButtonState_B1;
if (buttonState_B1 == LOW) {
count_B1++;
if(count_B1>9)count_B1=0;
counter = (count_B1 * 100) + (count_B2 * 10) + (count_B3);
Serial.println(counter);
Serial.print("B1: ");
Serial.println(count_B1);
dis7(counter);
}
}
}
lastButtonState_B1 = currentButtonState_B1;
//---------------------------------------------
if (currentButtonState_B2 != lastButtonState_B2) {
lastDebounceTime_B2 = millis();
}
if ((millis() - lastDebounceTime_B2) > debounceDelay) {
if (currentButtonState_B2 != buttonState_B2) {
buttonState_B2 = currentButtonState_B2;
if (buttonState_B2 == LOW) {
count_B2++;
if (count_B2 > 9)count_B2 = 0;
counter = (count_B1 * 100) + (count_B2 * 10) + (count_B3);
Serial.println(counter);
Serial.print("B2: ");
Serial.println(count_B2);
dis7(counter);
}
}
}
lastButtonState_B2 = currentButtonState_B2;
//---------------------------------------------
if (currentButtonState_B3 != lastButtonState_B3) {
lastDebounceTime_B3 = millis();
}
if ((millis() - lastDebounceTime_B3) > debounceDelay) {
if (currentButtonState_B3 != buttonState_B3) {
buttonState_B3 = currentButtonState_B3;
if (buttonState_B3 == LOW) {
count_B3++;
if (count_B3 > 9)count_B3 = 0;
}
counter = (count_B1 * 100) + (count_B2 * 10) + (count_B3);
Serial.println(counter);
Serial.print("B3: ");
Serial.println(count_B3);
dis7(counter);
}
}
lastButtonState_B3 = currentButtonState_B3;
//--------------------------------------------------
cur_time = millis();
if (cur_time - old_time >= 250) {
if (ledState == LOW) {
ledState = HIGH;
} else {
ledState = LOW;
}
digitalWrite(ledPin, ledState);
digitalWrite(ledPin2, ledState);
digitalWrite(ledPin3, ledState);
digitalWrite(ledPin4, ledState);
Serial.print("flag set: ");
Serial.println(flag_set);
old_time = millis();
}
}
void _blink() {
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST , 0x00);
shiftOut(dataPin, clockPin, MSBFIRST , 0x00);
shiftOut(dataPin, clockPin, MSBFIRST , 0x00);
digitalWrite(latchPin, HIGH);
delay(500);
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST , 0xFF);
shiftOut(dataPin, clockPin, MSBFIRST , 0xFF);
shiftOut(dataPin, clockPin, MSBFIRST , 0xFF);
digitalWrite(latchPin, HIGH);
delay(500);
}
void dis7(int data_segment) {
int temp_segment;
int satuan_segment;
int puluhan_segment;
int ratusan_segment;
temp_segment = data_segment;
satuan_segment = temp_segment % 10;
puluhan_segment = (temp_segment / 10) % 10;
ratusan_segment = (temp_segment / 100) % 10;
if (data_segment < 10) {
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST , seven_segment[satuan_segment]);
shiftOut(dataPin, clockPin, MSBFIRST , 0B00100010);
shiftOut(dataPin, clockPin, MSBFIRST , 0B00100010);
digitalWrite(latchPin, HIGH);
}
if (data_segment > 9 && data_segment < 100) {
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST , seven_segment[satuan_segment]);
shiftOut(dataPin, clockPin, MSBFIRST , seven_segment[puluhan_segment]);
shiftOut(dataPin, clockPin, MSBFIRST , 0B00100010);
digitalWrite(latchPin, HIGH);
}
if (data_segment > 100 && data_segment < 1000) {
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST , seven_segment[satuan_segment]);
shiftOut(dataPin, clockPin, MSBFIRST , seven_segment[puluhan_segment]);
shiftOut(dataPin, clockPin, MSBFIRST , seven_segment[ratusan_segment]);
digitalWrite(latchPin, HIGH);
}
}
void run_segment() {
for (int i = 0; i < sizeof(seven_segment); i++) {
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST , seven_segment[i]);
shiftOut(dataPin, clockPin, MSBFIRST , seven_segment[i]);
digitalWrite(latchPin, HIGH);
delay(250);
}
_blink(); _blink(); _blink(); _blink();
}