выдает вот это, помогите 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);}}
Вольный перевод: Итого, в двух библиотеках определена одна и та же служебная функция, попадающая в общее пространство имён. С большой вероятностью, следствие копипастинга. Чтобы убрать ошибку, надо или убрать одну из библиотек вместе с функцией, или глобально переименовать функцию в одной из них (наверно, самое простое), или скрыть из глобального пространства имён в namespace. Можно написать багрепорт разработчикам VirtualWire (как я понимаю, это нестандартная библиотека, в отличие от Servo).