Проблема решена !!!См. Ниже решение
Я собирался опубликовать этот вопрос и решил еще раз проверить сеть.Этот сайт https://www.freepascal.org/docs-html/prog/progsu40.html имеет следующее утверждение: директива {$ I filename} или {$ INCLUDE filename} указывает компилятору читать дополнительные операторы из имени файла файла.Считанные там операторы будут вставлены так, как будто они встречаются в текущем файле.Это именно то, что я хочу сделать с Arduino.Как мне это сделать?
Мой набор навыков: написание кода с 1967 года. Да, я пережил 2000 год, что было настоящей вещью;так что я не новичок в программировании / отладке.Мэйнфреймы и компьютеры.Очень твердые навыки COBOL и SAS.Хорошие навыки с Borland / Lazarus Object Pascal.Слабые навыки C / C ++.
Справочная информация: у меня есть две рабочие программы Arduino, которые используются на модельной железной дороге.Prog1 использует инфракрасные датчики для освещения светодиодов, которые указывают положение поезда в туннеле.Я создал класс IRSensor для обработки одного датчика.Prog2 использует кнопки для установки маршрута через несколько трековых переключателей.Каждый трек-переключатель устанавливается через сервопривод.Я расширил класс Servo до TOServo, который заключает в себе большую часть общности в каждом переключателе трека.
Сейчас я работаю на другой модели железной дороги и мне нужно объединить Prog1 и Prog2 в одну программу.Сборка Prog3 с помощью копирования / вставки из программ 1 и 2. оказалась громоздкой.
Проблема:
Как мне сказать препроцессору / компилятору Arduino «вставлять здесь имя файла; не компилировать, не компилироватьили иначе обработать имя файла, если оно не обернуто вокруг файла с запросом на вставку "?
То, что я пробовал: я построил Prog3, разделив код для Prog2 на 3 раздела - Основное хранилище и код программы и 2 оператора включения (Определения хранилища и исполняемый код для TOServo).К ним относятся операторы, извлекающие код, который определяет или обращается к массиву TOServo.Я использовал несколько суффиксов (.h / .ino и .h / .cpp и .c / .c), и все они генерируют ошибки «не объявлено в этой области».
Наконец: Спасибо за вашеhelp.
РЕШЕНИЕ Мой файл .ino стал большим и громоздким.«Решением» было переместить большой сегмент кода и соответствующих объявлений во внешние файлы .h / .cpp и получить доступ к этим файлам с помощью операторов #include.Программа не будет компилироваться (неопределенные переменные);на самом деле они были определены, но компилятор не смог их найти.После многих попыток исправить или изменить код, меня осенило две вещи.
1) Прекомпилятор Arduino изменяет (переставляет?) Мой код, чтобы C ++ и процессор Arduino могли работать вместе.Это означает, что код, который я вижу, не всегда тот код, который видит компилятор.
2) Мои файлы .h / .cpp определяют и управляют массивом сервообъектов.Я мог бы преобразовать эти файлы в объект, к которому у меня есть доступ из основного файла .ino.
Итак, я решил свою проблему.Спасибо всем, кто писал на многих форумах / сайтах, особенно Тарику Веллингу, который остался со мной до конца.