Skocz do zawartości

Błąd kompilacji dla płytki Arduino Uno


Marek2115

Pomocna odpowiedź

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

Link do komentarza
Share on other sites

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.

Link do komentarza
Share on other sites

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

  • Lubię! 1
Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

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
Link do komentarza
Share on other sites

- 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
Link do komentarza
Share on other sites

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 

Link do komentarza
Share on other sites

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
Link do komentarza
Share on other sites

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 

 

Link do komentarza
Share on other sites

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

up(int lvl)

 

Edytowano przez _LM_
Link do komentarza
Share on other sites

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...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.