Some patterns for toggling on and off debugging in Arduino firmware.
#define DEBUG  // Comment to turn off debug statements
#include "DebugUtils.h"
void setup() {
  pinMode(LED_BUILTIN, OUTPUT);
  #ifdef DEBUG
  SerialUSB.begin(9600);
  while (!SerialUSB) { }
  delay(100);
  #endif
  DEBUG_PRINT("Start blinking");
}
void loop() {
  DEBUG_PRINT("HIGH");
  digitalWrite(LED_BUILTIN, HIGH);
  delay(500);
  DEBUG_PRINT("LOW");
  digitalWrite(LED_BUILTIN, LOW);
  delay(500);
}BOARD?=arduino:samd:mzero_bl
PORT := $(shell ls /dev/cu.usbmodem*)
.PHONY: default lint all flash clean
default: lint all flash clean
lint:
	cpplint --extensions=ino --filter=-legal/copyright *.ino
all:
	arduino-cli compile --fqbn $(BOARD) ./
flash:
	arduino-cli upload -p $(PORT) --fqbn $(BOARD)
clean:
	rm -r build