В чем ошибка? помогите

Тема в разделе "Arduino & Shields", создана пользователем Nigga, 24 мар 2015.

  1. Nigga

    Nigga Нуб

    выдает вот это, помогите

    This report would have more information with
    "Show verbose output during compilation"
    enabled in File > Preferences.
    Arduino: 1.0.6 (Windows 7), Board: "Arduino Uno"
    Servo\Servo.cpp.o: In function `__vector_11':
    D:\Arduino\libraries\Servo/Servo.cpp:103: multiple definition of `__vector_11'
    VirtualWire\VirtualWire.cpp.o:C:\Users\Моя собственность\Documents\Arduino\libraries\VirtualWire/VirtualWire.cpp:588: first defined here
    Код (Text):

    /*машина управляемая всем подряд ver:1.0.0
    1 ультрозвукоывой дальнометр
    2 пульт радуоуправления
    3 ик пульт */
    #include <IRremote.h>
    #include <IRremoteInt.h>
    #include <Ultrasonic.h>
    #include <Servo.h>
    #include <VirtualWire.h>
    //----------------------------------------------------------------
    // набор данных для ultrasonik, тоесть для самоуправления
    #define D1 2 // Направление вращение двигателя 1
    #define M1 3 // ШИМ вывод для управления двигателем 1
    #define D2 4 // Направление вращение двигателя 2
    #define M2 5 // ШИМ вывод для управления двигателем 2
    #define forward {digitalWrite(D1, 0); digitalWrite(D2, 0); digitalWrite(M1, 1); digitalWrite(M2, 1);} //прямо
    #define ago {digitalWrite(D1, 1);  digitalWrite(D2, 1); digitalWrite(M1, 0); digitalWrite(M2, 0); }//назад
    #define right {digitalWrite(D1, 0);  digitalWrite(D2, 1); digitalWrite(M1, 1);digitalWrite(M2, 0); } //вправо
    #define left {digitalWrite(D1, 1); digitalWrite(D2, 0); digitalWrite(M1, 0); digitalWrite(M2, 1);} //влево
    #define stope {digitalWrite(D1, 0);digitalWrite(D2, 0);digitalWrite(M1, 0);digitalWrite(M2, 0); } // остановиться

    #define btn 7
    int butn = 0;

    Servo myservo;//объект для сервопривода
    const int servo_array[7]={0,30,60,90,120,150,180}; //масив с углами для сервопривода
    int HC_SR04_array[7]; //масив для максимальных переменых
    unsigned int time_us=0; //какая-то ненужная фигня
    unsigned int distance_sm=0;// тоже
    const int mindistance = 18;// минмальная дистанция
    // Переменные для цикла поиска максимального значения в массивах
    int maxarrayindex_int;
    int maxarrayvalue_int;
    int servo_int;//переменая для перебора значений
    Ultrasonic ultrasonic(12, 13); //контакты дальномера
    int mode;
    //----------------------------------------------------------------------------------------------
    // управление с помощью ИК-пульта
    int RECV_PIN = 11;
    IRrecv irrecv(RECV_PIN);
    decode_results results;
    //--------------
    //управление с помощью радиопульта
    byte message[VW_MAX_MESSAGE_LEN]; // какая то фигня
    byte messageLength = VW_MAX_MESSAGE_LEN; // тоже
    //-----------------

    void setup() {
    pinMode (btn, INPUT);
    digitalWrite(btn, HIGH);
    pinMode(8, OUTPUT);
    pinMode(9, OUTPUT);
    pinMode(10, OUTPUT);
    pinMode(11, OUTPUT);
    //-----------
      // Выбираем пин к которому подключен сервопривод
      myservo.attach(10);
      // Поворачиваем сервопривод в положение 90 градусов при каждом включении
      myservo.write(90);
      Serial.begin(9600);
      pinMode(D1, OUTPUT);
      pinMode(D2, OUTPUT);
    //---------------
      Serial.begin(9600);
      irrecv.enableIRIn(); // Start the receiver
    //---------------
      vw_setup(2000); // Bits per sec
      vw_rx_start(); // Start the receiver
    //---------------
    }
    //-------
    void ultrasonik(){
      myservo.write(90);              
      delay(200);
      ultrasonic.Ranging(CM);
    if ( ultrasonic.Ranging(CM)< mindistance){ stope // если показания меньше минимальной дистанции то
      for (servo_int = 0; servo_int < 7; servo_int++) { //перебираем значенй и крутим серву
          myservo.write(servo_array[servo_int]);
          delay(200);
          HC_SR04_array[servo_int] = ultrasonic.Ranging(CM); }//и записываем значения с разных углов в масив
      myservo.write(90); //опять 90 градусов
      delay(500);
        maxarrayindex_int = 0;
        maxarrayvalue_int = 0;
    for (servo_int = 0; servo_int < 7; servo_int++) {  
          if (HC_SR04_array[servo_int] > maxarrayvalue_int) {
            maxarrayindex_int = servo_int;
            maxarrayvalue_int = HC_SR04_array[servo_int];
          } }
    //---------------------
    if (HC_SR04_array[maxarrayindex_int] < mindistance) ago //если растояние меньше всего этого то едим назад, иначе прямо
    if (maxarrayindex_int < 4) right // если меньше 4 то едем влево, иначе вправо
    else left}
    else forward}
    //-------------
    void IR(){
      if (irrecv.decode(&results)) {
      Serial.println(results.value);
    if (results.value==0xFF18E7) forward else stope//кнопка 2 вперёд
    if (results.value==0xFF4AB5) ago else stope//кнопка 8 назад

    if (results.value==0xFF10EF) left else stope//кнопка 4 лево
    if (results.value==0xFF5AA5) right else stope//кнопка 6 право
    irrecv.resume(); // Receive the next value
    }
    }
    //----------
    void radio(){
      if (vw_get_message(message, &messageLength)) // Non-blocking
      {
      for (int i = 0; i < messageLength; i++)
      { char c = message[i];
          char L = 'L';
          char R = 'R';
          char N = 'N';
          char V = 'V';
          char Z = 'Z';
          char X = 'X';
      if(c == L) left else stope
      if(c == R) right else stope
      if(c == N) ago else stope
      if(c == V) forward else stope
      if(c == Z) stope}}}
    //------------

    void loop(){
    int x = digitalRead(btn);
    if (x == 0 && butn == 0)
    { ultrasonik;
      butn = 1;
      digitalWrite(8, HIGH);}
    if (x == 0 && butn == 1){
      IR;
      butn = 2;
      digitalWrite(9, HIGH);}
    if (x == 0 && butn == 2){
      radio;
      butn = 0;
      digitalWrite(10, HIGH);}}
     
     
  2. Kopilov

    Kopilov Гик

    Вольный перевод:
    Итого, в двух библиотеках определена одна и та же служебная функция, попадающая в общее пространство имён. С большой вероятностью, следствие копипастинга.

    Чтобы убрать ошибку, надо или убрать одну из библиотек вместе с функцией, или глобально переименовать функцию в одной из них (наверно, самое простое), или скрыть из глобального пространства имён в namespace.

    Можно написать багрепорт разработчикам VirtualWire (как я понимаю, это нестандартная библиотека, в отличие от Servo).
     
  3. Kopilov

    Kopilov Гик

    Похоже, проблема глубже.
    Тут возникла похожая ошибка.