#include <TM1637Display.h>
#define CLK 12
#define DIO 13
#define SwRed A1
#define SwGreen A2
#define SwBlue A3
#define ResetSwPin A5
#define LedPin 8
#define VrPin A4
const uint8_t SegReset[] = {
SEG_G, SEG_G, SEG_G, SEG_G
};
TM1637Display display = TM1637Display(CLK, DIO);
void setup() {
pinMode(SwRed, INPUT);
pinMode(SwGreen, INPUT);
pinMode(SwBlue, INPUT);
pinMode(ResetSwPin, INPUT);
pinMode(LedPin, OUTPUT);
pinMode(VrPin, INPUT);
display.clear();
display.setBrightness(7);
Serial.begin(115200);
digitalWrite(LedPin, 0);
}
String state = "Reset";
bool LedState = false;
int count;
const int Global_Delay = 1000;
// for millis()
unsigned long RedTime;
unsigned long GreenTime;
unsigned long BlueTime;
void loop() {
int RedSw = digitalRead(SwRed);
int BlueSw = digitalRead(SwBlue);
int GreenSw = digitalRead(SwGreen);
int ResetSw = digitalRead(ResetSwPin);
int Vr = analogRead(VrPin);
int mapVr = map(Vr, 0, 1023, 0, 7);
display.setBrightness(mapVr);
// if pass parameter 'true' it'll displayed 0021
// if pass parameter 'false' it'll displayed __21 ("_" == blank)
if (state != "Reset") {
display.showNumberDec(count, false);
}
// if ResetSw is Pressed
if (ResetSw == 0) {
state = "Reset";
}
// if RedSw is Pressed
if (RedSw == 0) {
state = "Red";
count = 0;
LedState = false;
}
// if BlueSw is Pressed
if (BlueSw == 0) {
state = "Blue";
count = 0;
LedState = false;
}
// if GreenSw is Pressed
if (GreenSw == 0) {
state = "Green";
count = 0;
LedState = false;
}
// if state == Reset
if (state == "Reset") {
display.setSegments(SegReset);
LedState = false;
count = 0;
}
// state handle
if (state == "Red") {
if (millis() - RedTime >= Global_Delay) {
RedTime = millis();
count++;
if (count == 18) {
LedState = true;
}
if (count > 18) {
count = 18;
}
}
}
if (state == "Green") {
if (millis() - GreenTime >= Global_Delay) {
GreenTime = millis();
count++;
if (count == 25) {
LedState = true;
}
if (count > 25) {
count = 25;
}
}
}
if (state == "Blue") {
if (millis() - BlueTime >= Global_Delay) {
BlueTime = millis();
count++;
if (count == 47) {
LedState = true;
}
if (count > 47) {
count = 47;
}
}
}
if (LedState) {
digitalWrite(LedPin, 1);
} else {
digitalWrite(LedPin, 0);
}
Serial.print("count : ");
Serial.println(count);
Serial.print("state : ");
Serial.println(state);
}