Skocz do zawartości

Identyfikacja wersji Arduino


alarmb

Pomocna odpowiedź

Witam.

Jestem na tym Forum po raz pierwszy. Chciałbym zadać pytanie, czy jest możliwe, aby przy pierwszym uruchomieniu  Arduino "przedstawiło" się w sekcji Setup, informując z jaką wersją Arduino mamy do czynienia tzn. czy jest to Arduino Uno, czy Arduino Mega?

Pozdrawiam.

Link do komentarza
Share on other sites

@alarmb witam na forum 🙂 Przyznam, że trochę nie rozumiem co chciałbyś osiągnąć. Gdzie dokładnie i komu miałaby pojawić się ta informacja? Jeśli piszesz program to możesz w funkcji setup dopisać linijkę, która będzie wyświetlała napis np. "Arduino UNO", ale zakładam, że nie o to Ci chodzi 😉

Link do komentarza
Share on other sites

17 godzin temu, alarmb napisał:

czy jest możliwe, aby przy pierwszym uruchomieniu  Arduino "przedstawiło" się w sekcji Setup,

Jest to możliwe, ale mało efektywne: musiałbyś znać wszystkie możliwe warianty. Przykładowy fragment kodu:

  Serial.println(
#if defined(ARDUINO_AVR_UNO)
  "Arduino UNO"
#elif defined(ARDUINO_AVR_MEGA2560)
  "Arduino Mega 2560"
#elif defined(ARDUINO_AVR_LEONARDO)
  "Arduino Leonardo"
#else
  "Czort wie co to"
#endif
  );

W sumie sprowadza się to do tego, co napisał  @Treker tylko więcej pisania 🙂

Innego sposobu raczej nie ma.

Edytowano przez ethanak
Link do komentarza
Share on other sites

Tylko to nie wyświetli informacji wziętej z fizycznej płytki, tylko informację jaką użytkownik wybrał z menu przed kompilacją. Można na przykład wybrać Pro Mini, wgrać na UNO i będzie się przedstawiać jako Pro Mini, bo "od środka" wszystkie płytki z tym samym mikrokontrolerem wyglądają tak samo.

Tak myślę, że być może w bootloaderze może być zaszyta taka informacja.

Edytowano przez deshipu
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

13 minut temu, deshipu napisał:

Tylko to nie wyświetli informacji wziętej z fizycznej płytki, tylko informację jaką użytkownik wybrał z menu przed kompilacją.

Niestety to prawda - ale większość użytkowników albo nie robi takich kombinacji typu "skompilujemy na UNO a wybierzemy Pro Mini", albo wie z jaką płytka mają do czynienia. Dlatego napisałem że sprowadza się to do "możesz w funkcji setup dopisać linijkę, która będzie wyświetlała napis np. Arduino UNO".

15 minut temu, deshipu napisał:

Tak myślę, że być może w bootloaderze może być zaszyta taka informacja.

Bootloader też można zmienić.

 

Link do komentarza
Share on other sites

19 godzin temu, alarmb napisał:

Chciałbym zadać pytanie, czy jest możliwe, aby przy pierwszym uruchomieniu  Arduino "przedstawiło" się w sekcji Setup, informując z jaką wersją Arduino mamy do czynienia tzn. czy jest to Arduino Uno, czy Arduino Mega?

Tak sobie myślę czy nie można by do tego celu wykorzystać makra digitalPinToPort() ? które zwraca numer portu.

Link do komentarza
Share on other sites

1 minutę temu, slon napisał:

Tak sobie myślę czy nie można by do tego celu wykorzystać makra digitalPinToPort() ? które zwraca numer portu.

Tyle że to makro jest zależne właśnie od tego, co się wybierze przy kompilacji, przy czym np. dla wszystkich 328 będziesz miał to samo (UNO, Pro, Nano itp.). Poza tym nie dla każdej płytki jest zdefiniowane.

 

Link do komentarza
Share on other sites

Dla każdej płytki to na pewno nie zadziała. Sprawdziłem na nano (czyli atmega 328p trzy porty)

Serial.print(digtalPinToPort(0)); // zwraca 4 PORTD
Serial.print(digtalPinToPort(8)); // zwraca 2 PORTB
Serial.print(digtalPinToPort(14));// zwraca 3 PORTC
Serial.print(digtalPinToPort(44)); // zwraca 36 dla arduino mega powinno być chyba 6

 

Link do komentarza
Share on other sites

I tak co byś nie robił wszystko zależy od tego, co dostaje kompilator (np. który plik pins_arduino.h ma być zastosowany), a wszelkie argumenty dla kompilatora wybierane są na podstawie tego, jaką płytkę wybrałeś w czasie kompilacji. Czyli w sumie to samo co pisałem w pierwszym poście, tyle że bardziej naokoło 🙂

Link do komentarza
Share on other sites

3 godziny temu, ethanak napisał:

Bootloader też można zmienić.

Ale, że pozwolę sobie zacytować fragment wypowiedzi kolegi, większość użytkowników nie robi takich kombinacji. Co więcej, o ile złą płytkę można łatwo wybrać przez pomyłkę albo z niewiedzy, to wymiana bootloadera jest jednak dość złożonym procesem, który raczej trzeba zrobić świadomie.

3 godziny temu, alarmb napisał:

Dziękuję wszystkim za zainteresowanie tematem. Tylko jak wyciągnąć  to z bootloadera ?

A może już czas zadać to sakramentalne pytanie: co ty próbujesz osiągnąć?

Link do komentarza
Share on other sites

Bardzo przepraszam, że tak długo nie pisałem na forum. Wiadomo okres przedświąteczny, więc dostałem od żony zlecenie wysprzątania łazienki. Praca została odebrana, więc mam chwilę na zajęcie się bardziej interesującym tematem.

Cytat

A może już czas zadać to sakramentalne pytanie: co ty próbujesz osiągnąć?

Otóż zrobiłem w Delphi program, którego interfejs załączam poniżej

delphi.thumb.jpg.bfe7b9d5abd90ef1bb62c9899fad7a8a.jpg

Jest to program, który steruje poprzez Ethernet wyjścia Arduino (zarówno w sieci wewnętrznej jak i zewnętrznej przez odpowiedni adres IP i port). Jest to program, który w pełni obsługuje Arduino Mega. Lecz są już sterowniki oparte na Arduino Uno, które nie mają tyle portów cyfrowych. Dlatego chciałem, aby w momencie połączenia się z Arduino ,ten wysłał informację jakiego jest typu, aby dostosować program w Delphi do wymagań. Cały czas myślałem, żeby wyciągnąć te informacje bezpośrednio z Arduino. Bardzo pomocna była sugestia Ethanaka, która zmieniła moje podejście do tematu. Przecież do ja wgrywam program przez odpowiedni kompilator i w nim jest zawarta informacja jakiego typu jest Arduino. Tylko odpowiednio trzeba ją wykorzystać. Bardzo dziękuję wszystkim za zainteresowanie tematem.

  • Lubię! 1
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.