Здравствуйте! Я разрабатываю программу управления роботом на основе Arduino Uno с использованием Motor Shield. Для этого я создал библиотеку с описанием класса Motor, управляющего двумя двигателями робота посредством Motor Shield. При компиляции кода в среде Arduino v1.8.9 (программатор AVRISP mkII) компилятор выдаёт следующие ошибки: К сообщению прилагаю код: Файл .h библиотеки: Код (C++): /*************************************************************************** * * Заголовочный фаил с описанием классов, моделирующих робота * ***************************************************************************/ #ifndef Lib #define Lib #include "Arduino.h" class Motor { // описание класса управления двигателями public: Motor (int, int, int, int); // конструктор void forward (int); // движение вперёд void back (int); // движение назад void left (int); // движение налево void right (int); // движение направо void stop (); // остановка private: int Left_Dir_Pin; // направление движения левого двигателя int Left_Speed; // скорость левого двигателя (0 -- 255) int Right_Dir_Pin; // направление движения правого двигателя int Right_Speed; // скорость правого двигателя (0 -- 255) void go (int); // движение }; #endif Файл cpp библиотеки: Код (C++): /************************************************************************** * * Описание функций, определённых в файле Lib.h * **************************************************************************/ #include "Arduino.h" #include "D:\Kirill\Programings\amperka\projects\Bot\Robot_Lib\Lib.h" // функции класса Motor // конструктор Motor::Motor(int l_d, int l_s, int r_d, int r_s){ Left_Dir_Pin = l_d; Left_Speed = l_s; Right_Dir_Pin = r_d; Right_Speed = r_s; // определение пинов pinMode (Left_Dir_Pin, OUTPUT); pinMode (Left_Speed, OUTPUT); pinMode (Right_Dir_Pin, OUTPUT); pinMode (Right_Speed, OUTPUT); // инициализация пинов } // функция движения void Motor::go (int Speed){ if (Speed < 0) Speed = 0; if (Speed > 255) Speed = 255; // защита от принижений/повышений скорости analogWrite (Left_Speed, Speed); analogWrite (Right_Speed, Speed); // регулирование скорости движения } // функция движения вперёд void Motor::forward(int Speed){ digitalWrite (Left_Dir_Pin, HIGH); digitalWrite (Right_Dir_Pin, HIGH); go (Speed); } // функция остановки void Motor::stop(){ go (0); } // функция движения назад void Motor::back(int Speed){ digitalWrite (Left_Dir_Pin, LOW); digitalWrite (Right_Dir_Pin, LOW); go (Speed); } // функция поворота налево void Motor::left(int Speed){ digitalWrite (Left_Dir_Pin, LOW); digitalWrite (Right_Dir_Pin, HIGH); go (Speed); } // функция поворота направо void Motor::right(int Speed){ digitalWrite (Left_Dir_Pin, HIGH); digitalWrite (Right_Dir_Pin, LOW); go (Speed); } Скетч самого ардуино: Код (C++): #include "D:\Kirill\Programings\amperka\projects\Bot\Robot_Lib\Lib.h" Motor m (4, 5, 7, 6); void setup() { // put your setup code here, to run once: } void loop() { // put your main code here, to run repeatedly: m.forward (255); delay (5000); m.stop (); m.back (255); delay (5000); m.stop (); m.left (255); delay (5000); m.stop (); m.right (255); delay (5000); m.stop (); }
ПРОБЛЕМА РЕШИЛАСЬ! Папку с библиотекой добавил в C:\Program Files\Arduino\libraries. В скетче написал #include <Lib.h>
Во всяком случае при компиляции на Dev c++ v5.11 других программ (без участия ардуино) всё отлично работает
Это всегда было на усмотрение реализации. Где-то распространялось, где-то - нет. А вот сдвоенная работала всегда и везде.
Да это-то ладно, просто повторяется типичный путь новичка: - Памагити! - Попробуй так - Всё, решилось, ура! - Мож чему-нибудь научишься, заодно? - Нафига? Проблема же решена, а больше мне это не пригодится. - после некоторой паузы, переход к п.1 И так вечно. Круговорот.