Skocz do zawartości

Dlaczego nie działa ten prosty kod na arduino leonardo


Pomocna odpowiedź

Napisano

Witam

Próbuję podłączyć do arduino czujkę ruchu.

Zadaniem kodu jest wyświetlenie w monitorze portu informacji brak ruchu lub wykryty ruch.

Kod uprościłem maksymalnie jak się da a wyskakuje mi błąd

Problem jest z tym if ale nie mam pojęcia dlaczego.

Kod jest wklejony cały na obrazku. Pierwszej linijki której nie widać to komentarz i ostatniej linijki którą widać do połowy to zamknięcie funkcji loop. Więcej kodu nie ma. Zaczynam przygodę z Arduino a programowanie studiowałem 5 lat wiec mnie to bardzo dziwi o co chodzi.

Nadepnąłęś na znaną przypadłość toolchaina Arduino. W zależności od wersji program ld czasem oddaje kod błędu bez uzasadnionych przyczyn w kodzie i (chyba) bez oczywistego związku z treścią programu. Poczytaj o tym pytając o "arduino ld returned error". U mnie też się to czasem zdarza i za pierwszym razem straciłem trochę czasu. Teraz zmieniam kod usuwając lub dopisując jakąś jedną linijkę i najczęściej zaczyna działać. Na szczęście nie muszę tego środowiska często używać..

Gratuluję studiów, ale to niestety nie pomaga. Po pierwsze, z obrazka dość ciężko jest skopiować kod, żeby móc go sprawdzić u siebie i zobaczyć szczegółowy komunikat o błędzie, którego na obrazku też nie widać. Po drugie, skąd mamy wiedzieć czy to, czego nie widać na obrazku nie jest właśnie przyczyną błędu? Jak chcesz żeby ci pomóc, to daj nam szansę, a nie każ bawić się w zgadywanki. Odrobinę szacunku dla cudzego czasu.

Z tego, co widać na obrazku, to masz błąd linkera, czyli prawdopodobnie kompilator nie mógł znaleźć jakiejś nazwy, do której się odwołujesz. Dlaczego nie może znaleźć -- możemy sobie z fusów wróżyć.

// the setup function runs once when you press reset or power the board
int val = 0;
void setup() {
 // initialize digital pin 13 as an output.
 pinMode(13, OUTPUT);
 pinMode(2, INPUT);

 Serial.begin(9600);
 }

void loop() {
 if(val == 0)
 {
   Serial.println("Wykryto ruch");
 }
 digitalWrite(13, HIGH);   // turn the LED on (HIGH is the voltage level)
 delay(1000);              // wait for a second
 digitalWrite(13, LOW);    // turn the LED off by making the voltage LOW
 delay(1000);              // wait for a second
}
Sketch uses 2,430 bytes (7%) of program storage space. Maximum is 30,720 bytes.
Global variables use 198 bytes (9%) of dynamic memory, leaving 1,850 bytes for local variables. Maximum is 2,048 bytes.

Czyli kod jest OK, sprawdź swoją instalację IDE.

[ Dodano: 20-12-2015, 13:47 ]

Tak mi przyszło do głowy -- na pewno masz wybraną właściwą płytkę itd. w menu?

Płytkę mam dobrą ustawioną. Wydaje mi się że jest to kwestia systemu operacyjnego lub samej czujki ruchu. Dotychczas pracowałem na win xp, po zmianie komputera na wyższym systemie ten sam kod ruszył bez problemu. Dziwny jest dla mnie też fakt że rzeczywiście np na win xp po dopisaniu jakiegoś nieznaczącego wiersza za którymś razem udaje się to skompilować i wgrać. Dziwna przypadłość.

Możliwe że mam podłączoną tą czujkę i ona powoduje takie dziwne rzeczy. Próbuję jakoś sprawdzić czy ta czujka rzeczywiście działa prawidłowo bo coś mi się wydaje że przysłano mi ją uszkodzoną.

Dziękuję za pomoc.

Zapewniam, że czujka, jak i cała reszta podłączonej elektroniki, nie mają absolutnie żadnego wpływu na proces kompilacji. Możesz całość odłączyć, kliknąć "verify" i skompiluje się dokładnie tak samo.

Ja próbowałem na Arduino IDE 1.6.7 na Ubuntu, nie spotkałem nigdy takich problemów, więc chyba rzeczywiście stawiałbym na bug w windowsowej wersji IDE.

Sprawdziłem powyższy kod na Win 8.1 i wszystko zrobiło się poprawnie. Wersja IDE to 1.6.6 (robiłem to nawet bez podłączonej płytki)

Proponował bym odinstalować i zainstalować IDE na nowo.

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