Язык C++ допускает использование не обязательных параметров функций по умолчанию. В среде Arduino если вы вызываете функцию с параметрами по умолчанию до её объявления в тексте программы, возникает ошибка.

Например,

void setup() {
  Serial.begin(115200);
}

void loop() {
  fn(7);
}

void fn(int x = 4) {
  Serial.println(x * 2);
}

error: 'fn' was not declared in this scope
   fn(7);
   ^~
exit status 1
'fn' was not declared in this scope

В этой ситуации поможет практика объявления функций до их использования или объявление виртуальных функций.

void fn(int x=4);

void setup() {
  Serial.begin(115200);
}

void loop() {
  fn(7);
}

void fn(int x) {
  Serial.println(x * 2);
}


Скетч использует 1530 байт (4%) памяти устройства. Всего доступно 30720 байт.
Глобальные переменные используют 188 байт (9%) динамической памяти