Skocz do zawartości

Plik na karcie SD zawierający program, który wykonuje Arduino.


Szmyterling

Pomocna odpowiedź

Witam! Wpadłem ostatnio na pomysł, aby Arduino wykonało kod zawarty w pliku zapisanym na karcie SD. Chciałbym móc zapisywać np. jakąś prostą gierkę na SD. Coś na kształt cartridge do gier. Moje pytanie brzmi: Jak to zrobić? Czy wgl da się to zrobić? A jak się nie da to propozycje innego rozwiązania mile widziane 😁

Z góry dziękuję za pomoc. Miłego dnia!

Edytowano przez Szmyterling
Link do komentarza
Share on other sites

@Szmyterling witam na forum 🙂 Akurat Arduino i "grafika" to czasami sprzeczne kwestie (ze względu na wydajność). Oczywiście da się to zrobić, ale daj znać jaki efekt chcesz uzyskać? Co tak naprawdę chcesz zapisać i co chcesz z tymi danymi później zrobić?

  • Lubię! 1
  • Pomogłeś! 1
Link do komentarza
Share on other sites

Cześć,

nie wiem, czy to zadziała, ale teoretycznie można znaleźć Bootloader, który jest w stanie załadować do pamięci Flash program w postaci binarnej (hex) z karty SD. Zobacz te linki:

https://forum.arduino.cc/index.php?topic=505195.0

https://github.com/zevero/avr_boot

Nie testowałem tego bootloadera'a - tak więc jeśli Cię to interesuje to musisz sam z nim poeksperymentować.

Pozdrawiam

  • Pomogłeś! 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

@Treker Plan był taki, aby na SD był zapisany cały kod programu, np. snake. Natomiast na Arduino tylko program, który by sczytywał snakea z SD i wykonywał kod, czyli uruchomił snake :-). Nie zależy mi na zapisywanie postępów, czy rekordów "gracza" na karcie, więc byłaby ona tylko do odczytu. Po odłączeniu karty SD ze snakem od Arduino i podłączeniu innej karty SD z np. Space Invaders to płytka by uruchamiała Space Invaders.

Link do komentarza
Share on other sites

  1. Zamiast Arduino wybrałbym raczej ESP albo STM, najprawdopodobniej te drugie, chociaż te pierwsze też się nadaje. Alternatywnie może to też być RP2040, ale tego MCU nie dostaniesz tak łatwo (poza Pi Pico).
  2. Każdy z powyższych MCU obsługuje pamięć QSPI Flash - więc technicznie mógłbyś zflashować dane na taką pamięć i zrobić jakieś płytki w formie kartridży podłączane do urządzenia, ale to było poza pytaniem.
  3. Jeżeli koniecznie chcesz, by była to karta SD to pozostają dwie opcje:
    1. bootloader z karty SD
    2. własny język programowania, który jest interpretowany przez mikrokontroler

Najłatwiejsza jest opcja 3.1 lub 2. Osobiście lubię QSPI Flash, więc wybrałbym własne kartridże z taką pamięcią, ale względem tematu to raczej wybór pada na 3.1;
Teoretycznie da się to też zaimplementować na Arduino, ale po co przepłacać za AVR, kiedy można mieć dużo szybsze STM w podobnej cenie?

  • Pomogłeś! 1
Link do komentarza
Share on other sites

@Treker Dzień dobry.

wczoraj nabyłem pierwszą płytkę Arduino Uno i jestem kompletnie początkujący. Nie znam też języka programowania. Do Uno mam wyświetlacz 2x16 lcd oraz czytnik kard SD. Na razie używam gotowych bibliotek.

Mam pytanie. Czy da się wgrać na kartę kilka tych samych bibliotek do tekstu, lekko zmodyfikowanych i wyświetlać z karty dzięki przyciskom?

Drugie pytanie. Ile wyświetlaczy jednocześnie można podpiąć do Uno i wyświetlać różne komunikaty?

Z zamiłowania jestem modelarzem i chcę zrobić na makiecie kolejowej coś a'la wyświetlacze peronowe z rozkładem jazdy.

Z góry dziękuję za pomoc

pozdrawiam

Adam

Link do komentarza
Share on other sites

@prezesedi witam na forum 🙂 Nie rozumiem co dokładnie masz na myśli pisząc o wgraniu na kartę SD kilku bibliotek tekstu. Co dokładnie chciałbyś osiągnąć? jeśli zależy Ci na obsłudze wielu wyświetlaczy tekstowych to najlepiej zainteresować się wyświetlaczami działającymi przez I2C. Wtedy będziesz mógł za pomocą jednej magistrali podłączyć wiele wyświetlaczy do jednego sterownika.

Link do komentarza
Share on other sites

Witam,

Weźmy na tapetę jedną z najprostszych bibliotek dostępnych w programie:

// include the library code:
#include <LiquidCrystal.h>

// initialize the library by associating any needed LCD interface pin
// with the arduino pin number it is connected to
const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);

void setup() {
  // set up the LCD's number of columns and rows:
  lcd.begin(16, 2);
  // Print a message to the LCD.
  lcd.print("hello, world!");
}

void loop() {
  // Turn off the display:
  lcd.noDisplay();
  delay(500);
  // Turn on the display:
  lcd.display();
  delay(500);
}

 

 

po wgraniu wyświetla się tekst "hello, world!"

 

i teraz zamiast za każdym razem podpinać UNO do komputera i wgrywać nową bibliotekę (modyfikować), to mieć kilka stworzonych wcześniej ("hello world"; "hello kitty" iitp - w moim przypadku akurat "poc. osobowy do Gliwic"; "poc. pośpieszny do Gdyni").

Wgrywanie za pomocą dołączonych do całości przycisków typu switch

pod przyciskiem 1 - komunikat A

pod przyciskiem 2 - komunikat B

itd. - powiedzmy 8 komunikatów (albo przynajmniej 4)

 

Odnośnie drugiego tematu, czy przy obsłudze wyświetlacza przez I2C, na wszystkich będzie wyświetlane to samo (klonowanie obrazu) czy każdy może wyświetlać inny tekst?

Dziękuję za pomoc i pozdrawiam

Adam

Edytowano przez prezesedi
Link do komentarza
Share on other sites

5 minut temu, prezesedi napisał:

i teraz zamiast za każdym razem podpinać UNO do komputera i wgrywać nową bibliotekę (modyfikować), to mieć kilka stworzonych wcześniej ("hello world"; "hello kitty" iitp - w moim przypadku akurat "poc. osobowy do Gliwic"; "poc. pośpieszny do Gdyni").

Tak da się 😉 Arduino odczytuje tekst z pliku i wysyła go do wyświetlacza.

5 minut temu, prezesedi napisał:

Odnośnie drugiego tematu, czy przy obsłudze wyświetlacza przez I2C, na wszystkich będzie wyświetlane to samo (klonowanie obrazu) czy każdy może wyświetlać inny tekst?

O ile pamiętam to jest to możliwe, o ile płytka konwertująca sygnał I2C na interfejs wyświetlacza ma możliwość konfigurowania adresu (tego jednak już nie pamiętam, ale raczej powinna mieć zworki do ustawiania).

https://www.banggood.com/IIC-I2C-TWI-SP-Serial-Interface-Port-Module-5V-1602-LCD-Adapter-Geekcreit-for-Arduino-products-that-work-with-official-Arduino-boards-p-80365.html

A0, A1, A2 😉 2^3 = 8 wyświetlaczy

Link do komentarza
Share on other sites

11 minut temu, H1M4W4R1 napisał:

Tak da się 😉 Arduino odczytuje tekst z pliku i wysyła go do wyświetlacza.

Czy mógłbym prosić o jakiś przykład do wykorzystania? Jak wspominałem jestem kompletnie początkujący. Niekoniecznie napisany gotowy kod, bo wiem, że nikt nie chce za kogoś wykonywać pracy - ale coś co mógłbym lekko modyfikując wykorzystać u siebie.

Nie widzę w gotowcach nic do sterowania przyciskami, albo nie wiem jak szukać 🙂

Link do komentarza
Share on other sites

19 minut temu, prezesedi napisał:

Czy mógłbym prosić o jakiś przykład do wykorzystania? Jak wspominałem jestem kompletnie początkujący. Niekoniecznie napisany gotowy kod, bo wiem, że nikt nie chce za kogoś wykonywać pracy - ale coś co mógłbym lekko modyfikując wykorzystać u siebie.

https://docs.arduino.cc/learn/programming/sd-guide

https://create.arduino.cc/projecthub/Arnov_Sharma_makes/lcd-i2c-tutorial-664e5a

Z tych dwóch spokojnie powinieneś złożyć swój program.

Link do komentarza
Share on other sites

Do wszystkiego masz demo w bibliotekach, a połączenie kilku demo nie daje trzeciego programu wynikowego, tylko protezę. Do forum jest elegancki kurs Arduino, przerabiasz i uczysz się programować, każdą lekcje po kolei nawet jeśli Ci się wydaje, że takiego sprzętu używać nie będziesz, bo każda lekcja to jakaś technika programowania przy okazji, na koniec jest poznanie millis i do przerobienia cały kurs od początku bez delay.

Bez umiejętności programowania skopiujesz sobie kilkaset linii kodu, zrobisz jakiś drobny błąd, utnie jakiś nawias i pozostanie siąść i płakać.

W samym flash Arduino jest tyle miejsca by zapisać kilkanaście tysięcy znaków, cały to 32k ale program coś zajmie, zastanów się więc czy warto mieszać do tego kartę SD. Zmiana kodu co prawda wymaga wgrania nowego programu, ale można to robić bezprzewodowo nawet z UNO, można wgrać przez BT modułem HC-05, lub ESP-link przez wirtualny port COM.

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

Pomysł z kartą miał wyeliminować korzystanie z komputera. Chodzi o możliwość zabierania makiety np. na pokazy. Dodatkowy komputer czy nawet laptop jest uciążliwym dodatkiem. Jeśli pamięć UNO jest w stanie pomieścić kilka niezależnych komend lub też osobnych programów to nie ma problemu. Z tego co piszecie to tak właśnie jest.

Cały pomysł opiera się na zasadzie działania układu, który już posiadam. Jest to efekt (odtwarzacz) komunikatów peronowych. Na karcie SD są wgrane ścieżki mp3 z głosem, a konkretne przyciski wywołują konkretne komunikaty. Ten układ oczywiście nie bazuje na Arduino, tylko na mini odtwarzaczu. Nie znalazłem "odtwarzacza" dla tekstu, więc z godzin przeglądaniu google wyszło mi jedno - Arduino. Jednak zasada działania pozostaje analogiczna - wciskam przycisk i dostaję konkretny komunikat, tym razem na wyświetlaczu.

Kurs programowania Arduino brzmi kusząco, bo zapewne można nauczyć się wiele i wykorzystywać sprzęt na milion sposobów, jednak aktualnie przechodzę kurs pisania makr w Excelu i nie wiem czy dwa odrębne kursy programowania to coś na moje lata 🙂

Na początek postaram się coś poskładać, podpytać, poeksperymentować - jak nic z tego nie wyjdzie to albo wezmę się za wspomniany kurs albo zrezygnuję z tej funkcji.

Pozdrawiam

Adam

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.