но в голове крутится мысль о переменной которая используется в разных вкладках, где её описывать ?
все вкладки это файлы цпп и х в одном флаконе как бы, поэтому ты не видиш разницу (для простоты это все и скрыли)
изначально же код делился на файлы
файлы .х это хедеры и там описываются дефайны, прототипы функций (сейчас вроде оно уже и не нужно и довольно идиотское решение вообще было) и сами глобальные переменные
в файлах цпп собственно пишется сам код функций, переменные если там декларируются, то это будут локальные переменные, которые действуют внутри функций во время их выполнения и потом пропадают
в файле цпп в самом начале подключаются файлы хедеров, причем порядок имеет значение
#include <stdint.h>
#include "" // Включаем файл заголовка для нашего модуля
в треугольных скобках это файлы из комплекта компилятора и библиотек, а в кавычках это файлы твоих хедеров
при сборке проекта препроцессор берет файлы хедеров и сует их содержимое в цпп файл сверху, как будто ты и не разносил их
потом берет цпп файлы и компилирует их в промежуточный код для кеширования и если в таких файлах нет изменений, то они не компилируются заново, что экономит время на сборку, а сборка больших проектов занимает много времени
потом линкер берет все скомпилированные цпп файлы и собирает их в один файл и потом превращает в бинарник для конкретного контроллера
по такому принципу работают все компиляторы, просто в ардуиновской иде это все скрыто и упрощено
вот кстати новый урок и там немного рассказано про все это