Measure the battery voltage for Arduino Zero with SAMD21G microcontroller.
VBAT is connected to the battery or voltage source you wish to measure the voltage of.
#define VBATPIN 6
void setup() {
  pinMode(LED_BUILTIN, OUTPUT);
  SerialUSB.begin(9600);
  while (!SerialUSB) {}
  delay(1000);
  SerialUSB.println("Start battery voltage measurement!");
}
void loop() {
  // SerialUSB.println("HIGH");
  digitalWrite(LED_BUILTIN, HIGH);
  delay(200);
  // SerialUSB.println("LOW");
  digitalWrite(LED_BUILTIN, LOW);
  delay(200);
  float measuredvbat = analogRead(VBATPIN);
  for (int i = 0; i < 10; i++) {
    measuredvbat += analogRead(VBATPIN);
    delay(10);
  }
  measuredvbat /= 10;
  measuredvbat *= 2;
  measuredvbat *= 4.5;  // Or the reference voltage E.g. 2.8V, 3.3V
  measuredvbat /= 1024;
  SerialUSB.print("VBat: ");
  SerialUSB.print(measuredvbat);
  SerialUSB.println("V");
}BOARD?=arduino:samd:arduino_zero_native
PORT := $(shell ls /dev/cu.usbmodem*)
.PHONY: default lint all flash clean
default: lint all flash clean
lint:
	cpplint --extensions=ino --filter=-legal/copyright,-whitespace/line_length,-readability/casting,-readability/todo *.ino
all:
	# This custom PCB does not have a crytal on pins PA00 and PA01
	# Hence, use -DCRYSTALLESS to replace the extra_flags in boards.txt
	arduino-cli compile --fqbn $(BOARD) --build-properties build.extra_flags="-DCRYSTALLESS -D__SAMD21G18A__ {build.usb_flags}" ./
flash:
	arduino-cli upload -p $(PORT) --fqbn $(BOARD)
clean:
	rm -r build