Я помню, что у меня были проблемы при инициализации объектов в конструкторах для объектов, объявленных вне setup (). Я не уверен, почему, я признаю, что не исследовал проблему. Но я согласился с мыслью, что слишком много вещей было инициализировано до запуска программы.
Я не гарантирую, что это решение (и не могу объяснить, почему), но я обошел свою проблему, инициализируя вещи в методах init () для своих объектов вместо их конструкторов. Затем я вызвал методы init () в моей настройке () после настройки объекта Serial. Примерно так:
#include "Motor.h"
#include "Driver.h"
#include "Lichtsensor.h"
#include "Eye.h"
Motor motor1; // I do not use any more my constructor
Motor motor2; // I do not use any more my constructor
Driver driver; // I do not use any more my constructor
Eye eye1; // I do not use any more my constructor
void setup(){
pinMode(13, OUTPUT);
digitalWrite(13, HIGH);
Serial.begin(9600);
Serial.println("#################################################");
Serial.println("# This sketch communicates with the arduino and #");
Serial.println("# makes the robot drive, and react to a sensor. #");
Serial.println("#################################################\n");
motor1.init(5, 4, true); // My object is initialized here
motor2.init(6, 7, false); // My object is initialized here
driver.init(motor1, motor2); // My object is initialized here
eye1.init()
}
Всегда немного странно создавать объект в методе вместо конструктора. Но так как это микроконтроллерное программирование, а не обычная компьютерная программа, я думаю, что использование более функционального подхода иногда бывает самым простым.
Если у вас нет лучшего ответа, вы все равно можете попробовать это. Возможно, этого будет достаточно только для вашей библиотеки Eye, поскольку вы сказали, что у вас нет проблем с классами Motor.