#include <TM1637Display.h>
#define CLK 45//1//3
#define DIO 39////2
TM1637Display display = TM1637Display (CLK, DIO);
int IN22 = 15;
int IN23 = 16;
int IN24 = 0;
signed long count = 1; // Changed to 0 so that COUNTUP starts with 1
enum CountStates {idle, COUNTUP, COUNTDOWN, COUNTUPDEC, COUNTDOWNDEC};
CountStates actState = idle;
CountStates lastState = idle;
unsigned long startTime;
bool holding = false;
bool longPress = false;
int keyHeld;
String msg;
unsigned long startHold = 0;
uint16_t intervalLongPress = 1000;
unsigned long startRepeat = 0;
uint16_t intervalRepeat = 100;
const unsigned long shortWaitTime = 20;
const unsigned long longWaitTime = 150;
struct pressButtonType
{
byte Pin;
unsigned long lastChange;
int lastState;
int state;
boolean pressed();
};
boolean pressButtonType::pressed()
{
int state = digitalRead(pressButtonType::Pin);
if (state != pressButtonType::lastState) {
pressButtonType::lastChange = millis();
pressButtonType::lastState = state;
}
if (state != pressButtonType::state && millis() - pressButtonType::lastChange > 50) {
pressButtonType::state = state;
};
return !pressButtonType::state;
}
signed long StartCountUpDec = 1; // Used by COUNTUPDEC when the counting limit has been reached
signed long StartCountDownDec = 500; // Used by COUNTDOWNDEC when the counting limit has been reached
pressButtonType but22 = {IN22, 0, HIGH};
pressButtonType but23 = {IN23, 0, HIGH};
pressButtonType but24 = {IN24, 0, HIGH};
int buttonValue1;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
Serial.println("Hello, ESP32-C3!");
display.setBrightness(4);
pinMode(22, INPUT_PULLUP);
pinMode(23, INPUT_PULLUP);
pinMode(24, INPUT_PULLUP);
// Serial.println(count);
cntDisplay();
}
String ActStartNo = String(count);
boolean Error = false;
void loop() {
// delay(10); // this speeds up the simulation
// StateMachine ();
}
void StateMachine ()
{
static unsigned long lastActionTime = 0;
static unsigned long WaitTime = longWaitTime;
switch (actState)
{
case idle : if (but22.pressed())
{
actState = COUNTUP;
}
if (but23.pressed())
{
actState = COUNTDOWN;
}
if (but24.pressed() && but22.pressed())
{
actState = COUNTUPDEC;
}
if (but24.pressed() && but23.pressed())
{
actState = COUNTDOWNDEC;
}
WaitTime = longWaitTime;
break;
case COUNTUP :
if (but23.pressed()) WaitTime = shortWaitTime;
else WaitTime = longWaitTime;
if (but22.pressed() && millis() - lastActionTime >= WaitTime) // || case 'C')
{
lastActionTime = millis();
if (count < 500)
{
count = count + 1;
cntDisplay();
}
else
{
count = 1;
cntDisplay();
}
}
if (!but22.pressed() && !but23.pressed()) actState = idle;
break;
case COUNTDOWN :
if (but22.pressed()) WaitTime = shortWaitTime;
else WaitTime = longWaitTime;
if (but23.pressed() && millis() - lastActionTime >= WaitTime)
{
lastActionTime = millis();
if (count > 1)
{
count = count - 1;
cntDisplay();
}
else
{
count = 500;
cntDisplay();
}
}
if (!but22.pressed() && !but23.pressed()) actState = idle;
break;
//*
case COUNTUPDEC :
if (but23.pressed()) WaitTime = shortWaitTime;
else WaitTime = longWaitTime;
if (but22.pressed() && millis() - lastActionTime >= WaitTime)
{
lastActionTime = millis();
//if(count+10<100) // Added (+10) do avoid counting over 100
count = count + 10;
if (count > 500)
{
count = count - 500;
}
cntDisplay();
}
if (!but22.pressed() && !but23.pressed()) actState = idle;
break;
case COUNTDOWNDEC :
if (but22.pressed()) WaitTime = shortWaitTime;
else WaitTime = longWaitTime;
if (but23.pressed() && millis() - lastActionTime >= WaitTime)
{
lastActionTime = millis();
count = count - 10;
if (count < 1)
// if(count>=1)// && count<=444)
{
count = count + 500;
}
cntDisplay();
}
if (!but22.pressed() && !but23.pressed()) actState = idle;
break;
default : actState = idle;
break;
} // END of switch (actState)
}
void cntDisplay()
{
Serial.println(count);
display.showNumberDec(count);
}
Loading
esp32-s2-devkitm-1
esp32-s2-devkitm-1