This code-version makes visible in the serial monitor what your code is doing and what values your variables have
// MACRO-START * MACRO-START * MACRO-START * MACRO-START * MACRO-START * MACRO-START *
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);
// 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);
// usage: dbgi("2:my fixed text",myVariable,1000);
// myVariable can be any variable or expression that is defined in scope
// third parameter is the time in milliseconds that must pass by until the next time a
// Serial.print is executed
// end of macros dbg and dbgi
// print only once when value has changed
#define dbgc(myFixedText, variableName) \
do { \
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; \
} \
} while (false);
// MACRO-END * MACRO-END * MACRO-END * MACRO-END * MACRO-END * MACRO-END * MACRO-END *
void PrintFileNameDateTime() {
Serial.println( F("Code running comes from file ") );
Serial.println( F(__FILE__) );
Serial.print( F(" compiled ") );
Serial.print( F(__DATE__) );
Serial.print( F(" ") );
Serial.println( F(__TIME__) );
}
// easy to use helper-function for non-blocking timing
boolean TimePeriodIsOver (unsigned long &startOfPeriod, unsigned long TimePeriod) {
unsigned long currentMillis = millis();
if ( currentMillis - startOfPeriod >= TimePeriod ) {
// more time than TimePeriod has elapsed since last time if-condition was true
startOfPeriod = currentMillis; // a new period starts right here so set new starttime
return true;
}
else return false; // actual TimePeriod is NOT yet over
}
unsigned long MyTestTimer = 0; // Timer-variables MUST be of type unsigned long
const byte OnBoard_LED = 13;
void BlinkHeartBeatLED(int IO_Pin, int BlinkPeriod) {
static unsigned long MyBlinkTimer;
pinMode(IO_Pin, OUTPUT);
if ( TimePeriodIsOver(MyBlinkTimer, BlinkPeriod) ) {
digitalWrite(IO_Pin, !digitalRead(IO_Pin) );
}
}
#include <NewPing.h>
const int leftfwd = 7;
const int leftbwd = 6;
const int rightfwd = 4;
const int rightbwd = 5;
const int ena = 11;
const int enb = 10;
#define trig_pin 9
#define echo_pin 8
#define maximum_distance 200
boolean goesForward = false;
int distance = 100;
NewPing sonar(trig_pin, echo_pin, maximum_distance);
void setup() {
Serial.begin(115200);
Serial.println("Setup-Start");
PrintFileNameDateTime();
pinMode(ena, OUTPUT);
pinMode(enb, OUTPUT);
pinMode(leftfwd, OUTPUT);
pinMode(leftbwd, OUTPUT);
pinMode(rightfwd, OUTPUT);
pinMode(rightbwd, OUTPUT);
distance = readPing();
}
void loop() {
BlinkHeartBeatLED(OnBoard_LED,250);
int distanceRight = 0;
int distanceLeft = 0;
delay(50);
dbgi("0:",distance,500);
dbgc("1:",goesForward);
if (distance < 40) {
stagger();
}
else {
backward();
delay(1000);
right();
delay(1200);
}
distance = readPing();
}
int readPing() {
//delay(70);
int cm = sonar.ping_cm();
if (cm == 0) {
cm = 250;
}
return cm;
}
void stagger() {
dbg("entering stagger",goesForward);
if (!goesForward) {
goesForward = true;
digitalWrite(leftfwd, HIGH);
digitalWrite(leftbwd, LOW);
digitalWrite(rightfwd, HIGH);
digitalWrite(rightbwd, LOW);
analogWrite(ena, 255);
analogWrite(enb, 235);
}
dbg("leaving stagger",goesForward);
}
void forward() {
digitalWrite(leftfwd, HIGH);
digitalWrite(leftbwd, LOW);
digitalWrite(rightfwd, HIGH);
digitalWrite(rightbwd, LOW);
analogWrite(ena, 255);
analogWrite(enb, 255);
}
void backward() {
dbg("entering backward",goesForward);
goesForward = false;
digitalWrite(leftfwd, LOW);
digitalWrite(leftbwd, HIGH);
analogWrite(ena, 255);
analogWrite(enb, 255);
digitalWrite(rightfwd, LOW);
digitalWrite(rightbwd, HIGH);
dbg("leaving backward",goesForward);
}
void right() {
dbg("entering right",goesForward);
digitalWrite(leftfwd, LOW);
digitalWrite(leftbwd, HIGH);
digitalWrite(rightfwd, HIGH);
digitalWrite(rightbwd, LOW);
dbg("leaving right",goesForward);
}
void left() {
digitalWrite(leftfwd, HIGH);
digitalWrite(leftbwd, LOW);
digitalWrite(rightfwd, LOW);
digitalWrite(rightbwd, HIGH);
}
void Stop() {
digitalWrite(leftfwd, LOW);
digitalWrite(leftbwd, LOW);
digitalWrite(rightfwd, LOW);
digitalWrite(rightbwd, LOW);
}
best regards Stefan