Здесь debounce - имя функции, выбираемое пользователем, а last - формальный параметр функции, в теле которой определено как использовать этот параметр, передаваемый функции при её вызове (в данном случае из функции loop()). Оба этих имени по желанию программиста можно заменить "одной буквой" в Вашей терминологии. Стоит-ли так делать вопрос отдельный.debounce(boolean last) - ? Что здесь важное функциональное слово, а что можно заменить например одной буквой?
В этой фразе помимо имени функции и её формального параметра определяется тип параметров функции и тип её возвращаемого значения. Это нужно компилятору для проверки правильности использования этой функции при вызове.Вот что есть что вот в этой фразе коварной b]boolean debounce(boolean last)[/b] ?
Здесь last - параметр переданный функции из loop(), а current - определён в первой строке тела функции (boolean current = digitalRead(BUTTON);), в данном случае текущее состояние кнопки.В строке №16 фраза: if (last != current). Как программа понимает, что есть last , а что есть current?
Содержательно, в эта функция используется для борьбы с дребезгом маханических кнопок. В функции debounce проверяется текущее состояние кнопки с таковым во время предыдущего вызова этой функции. В случае неравенства делается вывод, что состояние кнопки изменилось в промежутке между вызовами. В этом случае состояние кнопки считывается ещё раз спустя 5мс (при этом предполагается, что в течении этого промежутка времени дребезг закончится и пин кнопки перейдёт в устойчивое состояние). Это не слишком надёжный алгоритм, но для начала сойдёт.
Далее, в функции loop() при соблюдении условия if (lastButton == LOW && currentButton == HIGH) делается вывод, что произошло нажатие кнопки и инвертируется состояние светодиода.