(ПРОБЛЕМА РЕШИЛАСЬ!) Не понимаю в чём ошибка при компиляции на Arduino

Тема в разделе "Arduino & Shields", создана пользователем Киррилл, 24 авг 2019.

  1. Здравствуйте! Я разрабатываю программу управления роботом на основе 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 ();
    }
     
  2. BAR__MEN

    BAR__MEN Вселенский Няш Администратор

    Што?
     
    Киррилл нравится это.
  3. Полный путь к файлу. Иначе пишет, что библиотека не найдена, компиляция прервана
     
  4. ПРОБЛЕМА РЕШИЛАСЬ! Папку с библиотекой добавил в C:\Program Files\Arduino\libraries. В скетче написал #include <Lib.h>
     
  5. BAR__MEN

    BAR__MEN Вселенский Няш Администратор

    :roflmao:
     
  6. Asper Daffy

    Asper Daffy Гуру

    А ничего, что символ \ внутри кавычек имеет особый смысл, и если уж писать, то \\ ?
     
    BAR__MEN нравится это.
  7. Да оно и с одинарным работает. В cpp подключение .h не менял
     
  8. Asper Daffy

    Asper Daffy Гуру

    Ну-ну.
     
    BAR__MEN нравится это.
  9. SergeiL

    SergeiL Гуру

    Не, помню ещё с юниксов из 90-ых, что на “include” это не распространялось
     
    Киррилл нравится это.
  10. Во всяком случае при компиляции на Dev c++ v5.11 других программ (без участия ардуино) всё отлично работает
     
  11. Asper Daffy

    Asper Daffy Гуру

    Это всегда было на усмотрение реализации. Где-то распространялось, где-то - нет. А вот сдвоенная работала всегда и везде.
     
  12. Asper Daffy

    Asper Daffy Гуру

    Да это-то ладно, просто повторяется типичный путь новичка:

    1. - Памагити!
    2. - Попробуй так
    3. - Всё, решилось, ура!
    4. - Мож чему-нибудь научишься, заодно?
    5. - Нафига? Проблема же решена, а больше мне это не пригодится.
    6. - после некоторой паузы, переход к п.1

    И так вечно. Круговорот.
     
    DetSimen нравится это.
  13. Я не новичок: я 2 года программированием занимаюсь
     
  14. Asper Daffy

    Asper Daffy Гуру

    Ну, тогда понятно.
     
    b707 и Andrey12 нравится это.