Wpis z mikrobloga

Potrzebuję pomocy z #arduino Chcę się przesiąść z płytki Arduino Uno na Nano Ever. Program działał na tym pierwszym- chcę tylko zmienić płytkę. Wyrzuca mi błąd podczas kompilacji na Nano. Program nie jest mój a i z IDE niewiele mam do czynienia bo na co dzień nie bawię się Arduino. Doinstalowałem sobie sterowniki i zrobiłem update bibliotek.
Czy to tylko kwestia zmiany pinów czy może innych bibliotek/komend powinienem używać? Nie wiem nawet od czego zacząć. Może ktoś mnie naprowadzić?
Komunikat po kompilacji -> https://pastebin.pl/view/005cfecb
#elektronikadiy #elektronika #arduinoide
  • 13
@To_ja_moze_pozamiatam: nie ma jak teraz dokładniej w to zerknąć, ale problem jest raczej większy (niż mniejszy). Nie wystarczy zmiana pinów, bo po prostu część bibliotek nie była pisana z myślą o tych nowych Arduino. W tym przypadku nie będzie więc idealnej kompatybilności - wybrałeś sobie trochę "za nowe" Arduino, aby poszło tak łatwo.

Oczywiście może to tez dotyczyć samego programu, a nie tylko bibliotek, ale bez wglądu w kod ciężko będzie
@Forbot: @QBA__: Tego się spodziewałem. Bo przejście na zwykłe nano się udało.
Ale czy to możliwe, że zwykłe biblioteki od czytania pinów się aż tak różnią? W programie jest też pseudo wielowątkowość zrobiona na zegarze- z nią się bardziej spodziewałem problemów.
Przy okazji dodatkowe pytanie:
1. Czy w Arduino IDE trzeba będzie teraz jakoś specjalnie zaznaczać którą płytkę się programuje? Będą inne komendy do np. czytania pinów?
2. Czy może
Ale czy to możliwe, że zwykłe biblioteki od czytania pinów się aż tak różnią?


@To_ja_moze_pozamiatam: tak jak wyżej napisał @QBA__ w tych nowych ATmegach nie jest już tak prosto jak było kiedyś.
1) Zawsze wybiera się, którą płytkę się programuje. Jeśli biblioteki są napisane poprawnie to mają w sobie odpowiednie mechanizmy, które sprawiają, że kompilacja dla danej płytki przebiega trochę inaczej (i kończy się sukcesem). Podstawowe elementy języka (takie jak czytanie
Zawsze wybiera się, którą płytkę się programuje. Jeśli biblioteki są napisane poprawnie to mają w sobie odpowiednie mechanizmy,


@Forbot: Ok ale bez względu na płytkę (tzn. do pewnego poziomu jak widać) komendy czytania pinu są takie same. Arduino IDE sam sobie dobierze bibliotekę do tego? Bo o ile pamiętam do takiego podstawowego czytania pinu nie potrzebuję załączać biblioteki. To teraz co- do tej nowej płytki będę musiał? Jeśli nie, to czy
@Forbot: No to właśnie. digitalRead w "starych" Arduino to coś innego niż w tych nowych (przejrzałem na szybko art, przejrzę cały już jutro)? No czemu w moim przypadku kompilator sobie tego samodzielnie nie zamienia? Czy może zamienia ale problem jest z którąś bardziej zaawansowaną funkcją? Jak w takim razie znaleźć jej odpowiednik i czy wklejone komunikaty nie wskazują jednoznacznie czego brakuje?
Edit: Chodzi mi o obsługę tego na wysokim poziomie Arduino
@To_ja_moze_pozamiatam: ciężko powiedzieć coś więcej bez wglądu w kod. Tutaj widać, że program ma problem przy operacjach na rejestrach:

C:\Users\Admin\AppData\Local\Arduino15\packages\arduino\hardware\megaavr\1.8.7\cores\arduino/api/Common.h:64:39: error: no match for 'operator>>' (operand types are 'PORTDClass' and 'int')

#define bitRead(value, bit) (((value) >> (bit)) & 0x01)


Nie mam teraz dostępu do Arduino IDE, więc nie mogę tego sprawdzić, ale dziwne trochę jest to, że w tym Twoim błędzie jest taka informacja: Płytka:"Arduino Nano Every, ATMEGA328". Dziwne, bo
@To_ja_moze_pozamiatam:

No czemu w moim przypadku kompilator sobie tego samodzielnie nie zamienia?


Mireczku widzę że jesteś typowym programistą wysokopoziomowymi i nie wiesz jak to chodzi pod spodem Już Ci wyjaśnię(choć sam na arduino najwyżej coś szybko do testu uruchomię, normalnie piszę w czystym C)
Jest tak:

W jakimś ogólnym arduinowym ogólnym pliku nagłówkowym:
Arduino15\packages\arduino\hardware\megaavr\1.8.7\cores\arduino/api/Common.h

jest zdefiniowane macro:

#define bitRead(value, bit) (((value) >> (bit)) & 0x01)


W starych AVRach rejestr odpowiedzialny za
@QBA__: Dzięki za wyjaśnienie. Ja programowałem czyste Atmegi więc wiem o czym mówisz. Bardziej teraz mnie zastanawia jak to wygląda w Arduino IDE- czemu oni nie mają jeszcze właśnie takiej zamiany albo jeśli mają to jak ona wygląda. No bo teraz by użyć tego bitRead muszę albo dodać sobie nową bibliotekę specjalną dla tej Atmegi albo użyć nowego polecenia bo IDE tego w locie sobie nie zamieni nawet jeśli wybiorę, że
@To_ja_moze_pozamiatam: to jest ewidentnie wina tego kto pisał tę dolną część bibliotek na nową atmegę. Powinni to poprawić pod spodem tak żeby właśnie tak, jak piszesz - dla Ciebie było przezroczyście

PS co do tego define'a to nie wiem czy zadziała, bo nie mam pojęcia czy ta klasa ma taką metodę jak get