come funziona void

Esempio concreto:

void flashLed(int flash, byte ledPin) {
  for (int i = 0; i < flash; i++) {
    digitalWrite(ledPin, 1);
    delay(50);
    digitalWrite(ledPin, 0);
    delay(50);
  }
}

Hai una funzione che accetta dei parametri, fa "qualcosa" e non ti restituisce nulla indietro. Semplice e pulita.
Mettiamo invece ora che tu debba sapere dopo l'attivazione di un relé che accende un dispositivo, la lettura di una tensione che ti indicherà un qualcosa.

boolean accendiDevice() {
  digitalWrite(pin, HIGH);
  delay(500);
  if (analogRead(sensorPin) < 250) { //errore
    return false;
  } else { //tutto OK
    return true;
  }
}

Questa funzione "fa qualcosa" ma non solo, ti dice anche com'è andata l'operazione.
Se tu ad esempio nel codice scrivi qualcosa del tipo:

if (accendiDevice() == FALSE) {
    Serial.println("ERRORE");
}

La "risposta" della funzione diventa l'elemento di test dell'if.