// MACRO-START * MACRO-START * MACRO-START * MACRO-START * MACRO-START * MACRO-START *
// a detailed explanation how these macros work is given in this tutorial
// https://forum.arduino.cc/t/comfortable-serial-debug-output-short-to-write-fixed-text-name-and-content-of-any-variable-code-example/888298
#define dbg(myFixedText, variableName) \
Serial.print( F(#myFixedText " " #variableName"=") ); \
Serial.println(variableName);
#define dbgi(myFixedText, variableName,timeInterval) \
{ \
static unsigned long intervalStartTime; \
if ( millis() - intervalStartTime >= timeInterval ){ \
intervalStartTime = millis(); \
Serial.print( F(#myFixedText " " #variableName"=") ); \
Serial.println(variableName); \
} \
}
#define dbgc(myFixedText, variableName) \
{ \
static long lastState; \
if ( lastState != variableName ){ \
Serial.print( F(#myFixedText " " #variableName" changed from ") ); \
Serial.print(lastState); \
Serial.print( F(" to ") ); \
Serial.println(variableName); \
lastState = variableName; \
} \
}
#define dbgcf(myFixedText, variableName) \
{ \
static float lastState; \
if ( lastState != variableName ){ \
Serial.print( F(#myFixedText " " #variableName" changed from ") ); \
Serial.print(lastState); \
Serial.print( F(" to ") ); \
Serial.println(variableName); \
lastState = variableName; \
} \
}
// MACRO-END * MACRO-END * MACRO-END * MACRO-END * MACRO-END * MACRO-END * MACRO-END *
// C++ code
int ON = 0;
int START = 0;
int STOP = 0;
int TIME = 0;
int SEC = 0;
float SEC_LEFT = 0;
int TONE = 0;
float BEEP = 0.20;
#define bz1 3
#define bt1 4
#define bt2 5
#define bt3 10
#define lEDG1 6
#define lEDG2 7
#define lEDG3 8
#define lEDP1 9
//-----------------------------------------------------------------------
void setup(){
pinMode(lEDG1, OUTPUT);
pinMode(bz1, OUTPUT);
pinMode(lEDP1, OUTPUT);
pinMode(bt2, INPUT);
Serial.begin(9600);
pinMode(lEDG3, OUTPUT);
pinMode(lEDG3, OUTPUT);
pinMode(bt3, INPUT);
pinMode(bt1, INPUT);
ON = 0;
TIME = 1;
SEC = 15;
digitalWrite(lEDG1, HIGH);
}
//-----------------------------------------------------------------------
void loop(){
TONE = 1;
SEC_LEFT = SEC;
while (ON == 1) {
analogWrite(bz1, TONE);
delay(300); // Wait for 300 millisecond(s)
analogWrite(bz1, TONE);
delay(500); // Wait for 500 millisecond(s)
//Serial.println(BEEP,2);
dbgcf("whileOn",BEEP);
while (BEEP > 0.15) {
dbgi("whileBeep",BEEP,500);
SEC_LEFT += -1.0;
BEEP = (0.1 * (0.9 * (SEC_LEFT / SEC)));
dbgcf("whileBeep",BEEP);
//Serial.println(BEEP,2);
analogWrite(bz1, TONE);
digitalWrite(lEDP1, HIGH);
delay(1000); // Wait for 1000 millisecond(s)
analogWrite(bz1, 0);
digitalWrite(lEDP1, LOW);
ON = 0;
BEEP = 0.20;
}
}
if (digitalRead(bt2) == HIGH) { // START OF CYCLE THROUGH TIME
Serial.println("activate bt2" );
if (TIME == 4) {
Serial.println(TIME);
TIME = 0;
SEC = 15;
digitalWrite(lEDG1, HIGH);
digitalWrite(lEDP1, LOW);
digitalWrite(lEDG3, LOW);
}
if (TIME == 1) {
SEC = 15;
digitalWrite(lEDG1, HIGH);
digitalWrite(lEDP1, LOW);
digitalWrite(lEDG3, LOW);
}
if (TIME == 2) {
SEC = 15;
digitalWrite(lEDP1, HIGH);
digitalWrite(lEDG1, LOW);
digitalWrite(lEDG3, LOW);
}
if (TIME == 3) {
SEC = 15;
digitalWrite(lEDG3, HIGH);
digitalWrite(lEDP1, LOW);
digitalWrite(lEDG1, LOW);
}
// END OF CYCLE THROUGH TIME
delay(500); // Wait for 500 millisecond(s)
TIME += 1;
}
dbgc("T1",TIME);
if (digitalRead(bt3) == HIGH) { // START OF START BUTTON
Serial.println("activate bt3");
ON = 1;
// END OF START BUTTON
delay(500); // Wait for 500 millisecond(s)
}
if (digitalRead(bt1) == HIGH) { // START OF STOP BUTTON
Serial.println("activate bt1");
ON = 0;
digitalWrite(lEDP1, LOW);
// END OF STOP BUTTON
delay(500); // Wait for 500 millisecond(s)
}
dbgc("BoL",ON);
}