Здравствуйте. Прошу помощи. Подключил к arduino Uno модуль Troyka IMU-сенсор на 10 степеней свободы; так же подключен 3х фазный бесколлекторный двигатель управляемый ШИМ сигналом с arduino. ШИМ сигнал изменятся в зависимости от показаний акселерометра. Проблема: Система начинает работать только после открытия последовательного порта (в среде разработки) и ввода в него какой нибудь буквы; до того мотор хаотично включается и выключается не реагируя на положение акселерометра. В чем проблема? Спойлер: код Код (C++): // библитоека для работы I²C #include <Wire.h> #include <Servo.h> // библиотека для работы с модулями IMU #include <troyka-imu.h> // создаём объект для работы с акселерометром Accelerometer accel; Servo motor; int ug=0; void setup() { analogReference(DEFAULT); // открываем последовательный порт Serial.begin(9600); motor.attach(12); // пока не появились данные с USB while (!Serial.available()) { // ждём } // выводим сообщение о начале инициализации Serial.println("Begin init..."); // инициализация акселерометра accel.begin(); // выводим сообщение об удачной инициализации Serial.println("Init completed"); // устанавливаем чувствительность accel.setRange(RANGE_2); } void loop() { ug=accel.readX_G(); int ug2=map(ug,10, 0, 90,0); motor.write(ug2); Serial.print(ug2); Serial.println(""); }
Код (C++): // библитоека для работы I²C #include <Wire.h> #include <Servo.h> // библиотека для работы с модулями IMU #include <troyka-imu.h> // создаём объект для работы с акселерометром Accelerometer accel; Servo motor; int ug = 0; void setup() { analogReference(DEFAULT); // открываем последовательный порт Serial.begin(9600); motor.attach(12); // пока не появились данные с USB while (!Serial.available()) { // ждём // мне кажется, что тут надо что-то написать. } // выводим сообщение о начале инициализации Serial.println("Begin init..."); // инициализация акселерометра accel.begin(); // выводим сообщение об удачной инициализации Serial.println("Init completed"); // устанавливаем чувствительность accel.setRange(RANGE_2); } void loop() { ug = accel.readX_G(); int ug2 = map(ug,10, 0, 90,0); motor.write(ug2); Serial.print(ug2); Serial.println(""); } попробуйте
Причина в том, что у Вас код написан так. В скетче Вы явно требуете ожидать чего-либо по USB: Вот тут, Вы же сами комментарий и написали: Код (C++): // пока не появились данные с USB while (!Serial.available()) { // ждём } Дальше программа не выполняется, она стоит тут, ждет любого "сообщения" по USB через Serial. Чтобы у вас программа начала сразу выполнятся и не ждала никаких данных по USB, просто удалите этот кусочек кода (выше). Так же можете удалите все, что связано с Serial, если больше не нужно отслеживать выполнение программы. Максимус-Бог, а что именно Вы изменили в коде?