// start of macros dbg and dbgi
#define dbg(myFixedText, variableName) \
Serial.print( F(#myFixedText " " #variableName"=") ); \
Serial.println(variableName);
// usage: dbg("1:my fixed text",myVariable);
// myVariable can be any variable or expression that is defined in scope
#define dbgi(myFixedText, variableName,timeInterval) \
do { \
static unsigned long intervalStartTime; \
if ( millis() - intervalStartTime >= timeInterval ){ \
intervalStartTime = millis(); \
Serial.print( F(#myFixedText " " #variableName"=") ); \
Serial.println(variableName); \
} \
} while (false);
// end of macros dbg and dbgi
const byte row1 = 12;
const byte row2 = 11;
const byte row3 = 10;
const byte row4 = 9;
const byte row5 = 8;
#define OFF LOW
#define ON HIGH
unsigned long myFastCounter;
unsigned long MyTestTimer = 0; // variables MUST be of type unsigned long
//helper-function for non-blocking timing
boolean TimePeriodIsOver (unsigned long &periodStartTime, unsigned long TimePeriod) {
unsigned long currentMillis = millis();
if ( currentMillis - periodStartTime >= TimePeriod )
{
periodStartTime = currentMillis; // set new expireTime
return true; // more time than TimePeriod) has elapsed since last time if-condition was true
}
else return false; // not expired
}
int blinkState;
void setup() {
Serial.begin(115200);
Serial.print( F("\n Setup-Start \n") );
pinMode(row1,OUTPUT);
pinMode(row2,OUTPUT);
pinMode(row3,OUTPUT);
pinMode(row4,OUTPUT);
pinMode(row5,OUTPUT);
digitalWrite(row1,OFF);
digitalWrite(row2,OFF);
digitalWrite(row3,OFF);
digitalWrite(row4,OFF);
digitalWrite(row5,OFF);
blinkState = 1;
}
void loop() {
myFastCounter++;
// loop is running fast but only once per second (1000 milliseconds)
// the value myFastCounter is printed to the serial monitor
dbgi("dbgi-demo",myFastCounter,1000);
// non-blocking timing-function
// evaluates true only if milliseconds given as the second parameter
// have passed by
if (TimePeriodIsOver (MyTestTimer,500) ) {
blinkState++;
if (blinkState > 5) {
blinkState = 1;
}
dbg("dbg-Demo",blinkState);
}
switch (blinkState) {
case 1: {
digitalWrite(row1,ON);
digitalWrite(row2,OFF);
digitalWrite(row3,OFF);
digitalWrite(row4,OFF);
digitalWrite(row5,OFF);
break;
}
case 2: {
digitalWrite(row1,OFF);
digitalWrite(row2,ON);
digitalWrite(row3,OFF);
digitalWrite(row4,OFF);
digitalWrite(row5,OFF);
break;
}
case 3: {
digitalWrite(row1,OFF);
digitalWrite(row2,OFF);
digitalWrite(row3,ON);
digitalWrite(row4,OFF);
digitalWrite(row5,OFF);
break;
}
case 4: {
digitalWrite(row1,OFF);
digitalWrite(row2,OFF);
digitalWrite(row3,OFF);
digitalWrite(row4,ON);
digitalWrite(row5,OFF);
break;
}
case 5: {
digitalWrite(row1,OFF);
digitalWrite(row2,OFF);
digitalWrite(row3,OFF);
digitalWrite(row4,OFF);
digitalWrite(row5,ON);
break;
}
}
}