Witam
Chciałbym sobie zrobić "konsolę" do gier na arduino używając LCD Keypad shield. Niestety nie wiem jak połączyć 11 plików/gier (załącznik) w jeden kod, gdzie z poziomu menu wybierałoby się właśnie te gierki.
Z góry dziękuję i pozdrawiam.
Załączniki:
LCDKeypadGames.zip(55.41 KB)
Musisz być zalogowany, aby pobrać ten załącznik.
Koniecznie chcesz zrobić konsole sam? Nie lepiej Ci będzie kupić albo znaleźć gdzieś gotowca?
O ile zmieszczą Ci się wszystkie gierki w pamięci, zrób program który będzie wyświetlał menu a po wybraniu gry będzie inicjalizował daną grę. Z tych plików zamiast funkcji setup i loop nazwij je jakoś inaczej i po wybraniu gry wywołaj tę edytowaną funkcję setup a następnie w głównej funkcji loop wywołuj zmienioną funkcję loop danej gry.
O ile zmieszczą Ci się wszystkie gierki w pamięci, zrób program który będzie wyświetlał menu a po wybraniu gry będzie inicjalizował daną grę. Z tych plików zamiast funkcji setup i loop nazwij je jakoś inaczej i po wybraniu gry wywołaj tę edytowaną funkcję setup a następnie w głównej funkcji loop wywołuj zmienioną funkcję loop danej gry.
Nie ma najmniejszych szans na zmieszczenie tego na Arduino. Maksymalnie zmieści się 1 - 2. Można pokombinować z kodem i trzymać dane na SD ale to też zbyt nie pomoże.
Jakiego Arduino chcesz użyć? Sprawdziłeś czy starczy RAM i flash? Każda gra na swój cel coś rezerwuje w ram, a większość Arduino ma jej bardzo mało. Naturalnie da się to rozwiązać (przydzielać pamięć dynamicznie) ale skoro zadajesz pytanie, to z tym sobie nie poradzisz. Pozostanie problem różnych konfliktów, tez nie do przewalczenia przez początkującego. Najprostsze rozwiązanie to:
- skompilować każdą grę z osobna
- sprawdzić zajętość flash, przez największa grę
- w pozostałym obszarze, nazwijmy go DYSK, umieścić kolejno wszystkie skompilowane wcześniej gry
- napisać własny bootloader, który wyświetli menu, po wybraniu gry, przekopiuje ją z DYSKU do procesora i wystartuje
DYSKIEM raczej nie może być pamięć SD ponieważ jej obsługa zajmuje sporo pamięci i nie zmieści się w obszarze bootloadera.
Rozwiązanie ma wadę, liczba cykli kasowania flash, jest ograniczona (w AVR do zdaje się 10000).
Dodano po 1 [minuty]:
kacpo1 napisał:
Nie ma najmniejszych szans na zmieszczenie tego na Arduino
Arduino na ARM da radę. Nawet na Arduino mega do się to zrobic.
Witam
Gry te chcę umieścić na Arduino MEGA. Znalazłem w internecie kod dla Arduino na MENU (załącznik). Podczas weryfikacji wszystko jest OK, dopóki w np. "Menu A" (tam gdzie jest miejsce na kod) nie umieszczę kodu z grą ("MainMenuDisplay" was/is not declared in this scope.) Może ktoś z Was by wiedział dlaczego jest ten błąd?
Załączniki:
simple_arduino_lcd_menu.cpp(3.6 KB)
Musisz być zalogowany, aby pobrać ten załącznik.
Wow.. Trochę dużo w tym błędów, postaram się wymienić kilka.
1. Dwa razy włączyłeś bibliotekę LCD i ją dwa razy "skonfigurowałeś (?)"
redstonefire napisał:
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
2. Program nie będzie działał tak jak myślisz, wklejasz gotowy kod do kompilacji, do drugiego gotowego kodu. Z tego co widzę, chciałeś wywołać funkcję loop i funkcję setup które są zdefiniowane tylko raz i na jeden kod przypada po jednej.
3. Definicje funkcji użytych w grze powinny być poza funkcją główną gry, czyli - nie możesz zdefiniować funkcji x() w funkcji y()
4. Wydaje mi się, że definicje #define powinny być na początku całego kodu, tak jak zmienne - aby były globalne (chyba, że tego nie potrzebujesz).
Jeśli to poprawisz, zdaje się, że program może działać. Nie wiem jakim sposobem miałeś problem z funkcją "MainMenuDisplay" bo mi po skompilowaniu wyskakuje masa błędów odnośnie tych "definicji funkcji w funkcji"
Moje błędy po kompilacji (jeśli ktoś ciekawy)
Spoiler:
C:\Users\Ja\AppData\Local\Temp\arduino_modified_sketch_710787\sketch_mar19a.ino: In function 'void MenuA()':
sketch_mar19a:167: error: a function-definition is not allowed here before '{' token
{
^
sketch_mar19a:187: error: a function-definition is not allowed here before '{' token
void newWord() {
^
sketch_mar19a:198: error: a function-definition is not allowed here before '{' token
void draw_board() {
^
sketch_mar19a:550: error: expected '}' at end of input
}
^
sketch_mar19a:550: error: expected '}' at end of input
exit status 1
a function-definition is not allowed here before '{' token
Jeśli gdzieś strzeliłem gafę, proszę kolegów o poprawienie.
Ewidentnie porywasz się z motyką na słońce. Zaczynasz programować, ale jednak chcesz zacząć od bardzo skomplikowanego programu, z błędami które nie wiesz jak rozwiązać...
Tak jak większość radziłbym zaczynać od małych rzeczy, nie mówię, że masz przez tydzień pisać program do migającej diody, ale polecam jakieś mniej skomplikowane projekty.
"Zrobiłem" ten kod, ale tylko i wyłącznie dlatego, że wiem jak ciężko jest na początku. Ale zapamiętaj, że ludzie tutaj nie zbyt lubią leniuchowanie i rzadko kiedy zrobią coś za Ciebie.
Kompilator nie wypluwa błędów, ale nie wiem czy sam kod w sobie działa - musisz sprawdzić.
4. Wydaje mi się, że definicje #define powinny być na początku całego kodu, tak jak zmienne - aby były globalne (chyba, że tego nie potrzebujesz).
myślę, że Kolega nie rozumie w pełni C/C++
kacpo1 napisał:
"Zrobiłem" ten kod, ale tylko i wyłącznie dlatego, że wiem jak ciężko jest na początku. Ale zapamiętaj, że ludzie tutaj nie zbyt lubią leniuchowanie i rzadko kiedy zrobią coś za Ciebie.
Sądzisz, że pomogłeś? Toż to konserwacja jakiegoś koszmaru.
Czego pozytywnego, powiem więcej, czego "mniej złego" kol. @redstonefire się nauczy?
ps. projekt aż się prosi o jakiś podział, modularyzację itd ... można by się wykazać C++, ale to nie ten wątek
✨ Użytkownik planuje stworzyć konsolę do gier na bazie Arduino z wykorzystaniem LCD Keypad Shield, jednak napotyka trudności w połączeniu 11 plików gier w jeden kod z menu. Odpowiedzi sugerują, że ze względu na ograniczenia pamięci Arduino, zmieszczenie wszystkich gier w jednym projekcie może być niemożliwe. Proponowane rozwiązania obejmują dynamiczne przydzielanie pamięci, kompilację gier osobno oraz stworzenie bootloadera do zarządzania grami. Użytkownik napotyka błędy kompilacji przy wklejaniu kodu gier do menu, co wskazuje na problemy z definicjami funkcji i organizacją kodu. Wskazówki dotyczące poprawy kodu oraz sugestie dotyczące prostszych projektów są również obecne w dyskusji. Wygenerowane przez model językowy.