Skocz do zawartości

Błąd kompilacji dla płytki Arduino Uno


Pomocna odpowiedź

Napisano

Dzień Dobry

Mam problem z kompilacją wyskakuje mi taki błąd

libraries\VirtualWire\VirtualWire.cpp.o (symbol from plugin): In function `crc16_update(unsigned int, unsigned char)':

(.text+0x0): multiple definition of `__vector_11'

libraries\Servo\avr\Servo.cpp.o (symbol from plugin):(.text+0x0): first defined here

collect2.exe: error: ld returned 1 exit status

exit status 1

Błąd kompilacji dla płytki Arduino Uno.

powodowany jest on przez zainkludowanie biblioteki servo 

mógł by mi go ktoś przetłumaczyć?

oto kod

// receiver
#include <Servo.h>
#include <VirtualWire.h>

Servo myservo;

void setup()
{
    Serial.begin(9600);
    myservo.attach(9);
    vw_set_ptt_inverted(true); 
    vw_setup(2000);	
    vw_rx_start(); 
}

void loop()
{
  
    uint8_t buf[VW_MAX_MESSAGE_LEN];
    uint8_t buflen = VW_MAX_MESSAGE_LEN;
    
    check();
    
    if (vw_get_message(buf, &buflen)) 
    {
     int i;
     int lvl;
        digitalWrite(13, true); 
      	if(buf[0] == 68)
          { 
            up();
          }
          if(buf[0]== 85)
          {
            down();
          }
        digitalWrite(13, false);
     } 
}
void up()
{
  int lvl;
  if(lvl <= 6)
  {
    lvl += 1;
    check(); 
   }
   else
   {
     lvl = 1; 
   }
}
void down()
{
  int lvl;
  if(lvl <= 1)
  {
    lvl -= 1;
    check(); 
   }
   else
   {
     lvl = 6; 
   }
}
void check()
{
  int lvl;
  if (lvl == 1)
  {
    myservo.write(30);
  }
  if (lvl == 2)
  {
    myservo.write(60);
  }
  if (lvl == 3)
  {
    myservo.write(90);
  }
  if (lvl == 4)
  {
    myservo.write(120);
  }
  if (lvl == 5)
  {
    myservo.write(150);
  }
  if (lvl == 6)
  {
    myservo.write(180);
  }
}

gdy nie mam dołączonej biblioteki servo to kompilacja przechodzi

Proszę po pomoc bardziej doświadczonych użytkowników

(edytowany)

Nie znam sie na tych bledach, ale wogole masz zainstalowana biblioteke?? I sprawdz czy sama biblioteka servo przejdzie..

Edytowano przez farmaceuta

Wygląda na to że te biblioteki po prostu gryzą się ze sobą - nie wszystkie można stosować razem, a szczególnie biblioteka servo jest pod tym względem kapryśna.

Multiple definition vector 11 może sugerować że obie biblioteki korzystają z tego samego przerwania. Trzeba by sprawdzić do czego jest vector11 

  • Lubię! 1

Ten program i tak niema szans działać, masz błąd w funkcjach check, up, down skąd niby zmienne lvl mają pobierać jakieś wartości? Toż tam zawsze będzie zero. 

  • Lubię! 1
(edytowany)

- bo int lvl; powinno być globalne a nie lokalne dla podprogramu

- jak byś napisał lvl = lvl +1 a potem Serial.println(lvl);

- to byś widział czy lvl reaguje na zmiany w przebiegu programu zgodne z założeniami

Edytowano przez 99teki
1 godzinę temu, farmaceuta napisał:

Nie znam sie na tych bledach, ale wogole masz zainstalowana biblioteke?? I sprawdz czy sama biblioteka servo przejdzie..

mam zainstalowana bibliotekę servo 

10 minut temu, Elvis napisał:

dlaczego zero?

Racja, ta zmienna będzie miała przypadkową wartość bo nie jest zainicjowana, mój błąd. 

3 minuty temu, 99teki napisał:

bo int lvl; powinno być globalne a nie lokalne dla podprogramu

Powinna być w argumencie funkcji lub static 

  • Lubię! 1
59 minut temu, _LM_ napisał:

Ten program i tak niema szans działać, masz błąd w funkcjach check, up, down skąd niby zmienne lvl mają pobierać jakieś wartości? Toż tam zawsze będzie zero. 

mam plan taki jak kliknę to za kazdym razem przełączam servo od dana ilosc 

 

(edytowany)

Nie rób głupot, weź przerób funckje tak aby dostawały argument. Coś w stylu

up(int lvl)

 

Edytowano przez _LM_

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...