Wpis z mikrobloga

Trochę rozwinąłem mój ostatni projekt i osiągnął on już prawie kres możliwości Arduino w związku z tym dziele się z wami efektami a sam zabiorę się za co innego :) I kodem źródłowym jakby ktoś chciał się samu pobawić albo rozwinąć to dalej ( ͡° ͜ʖ ͡°)

Film:
https://gfycat.com/BriskFinishedCommabutterfly

Wersja wcześniejsza:
https://gfycat.com/ScornfulSinfulCock

Co zmieniłem:
Przepisałem kod programu w C++ od nowa, napisałem małą klasę do ułatwienia pracy z procesami na Windowsie. Kilka wariantów otwierania procesów, przez pid, nazwe procesu, odszukanie pid procesu przez jego nazwę, odszukanie adresu bazowego aplikacji, znalezienie uchwytu do okna głównego aplikacji mając pid. Myślę, że może się przydać komuś ( ͡° ͜ʖ ͡°)

Zmieniłem też "protokół" przesyłania danych do Arduino. Prędkość wysyłana jest w formacie SDJ (setki, dziesiątki, jedności), jeżeli prędkość jest mniejsza to wypełnia wcześniejsze cyfry spacją. Po cyfrach wysyłam znak '#' informujący Arduino o końcu przesyłania prędkości. No i prędkość wysyłana jest tylko wtedy kiedy uległa zmianie więc zmniejszyły się opóźnianie związane z tym, że Arduino musiało przetwarzać taką ilość danych.

Na Arduino zmieniłem bibliotekę na U8glib co zminimalizowało miganie wyświetlacza i zmieniłem sposób odczytu danych z portu szeregowego, odczytuje do bufora do momentu natrafienia na znak '#' co też zoptymalizowało cały proces odbioru danych.

Myślałem jeszcze nad przesyłaniem innych danych z gry np. ilości obrotów jednak wyszukanie adresu tej wartości przerasta możliwości mojego komputera, na dysku SSD mam wolnych ze 30GB, kilka wyszukań nieznanej wartości początkowej dla wszystkich typów, później wartość większa/mniejsza i już mam cały dysk zapchany plikami tymczasowymi :D

main.cpp
http://pastebin.com/Uf6zFJnp

pstools.h (może wymagać dopisania -lpsapi do linkera, nie wiem czy w ostateczności wykorzystałem coś z tej biblioteki)
http://pastebin.com/YwFNwMuU

Arduino
http://pastebin.com/XD6Djiz8

Link do wyświetlacza:
http://www.ebay.com/itm/blue-0-96-I2C-IIC-128X64-OLED-LCD-LED-Display-Module-Board-SSD1306-For-Arduino-/221957276858?hash=item33adaf44ba:g:XWIAAOSwp5JWXr6R

Trochę podrożał, ja kupiłem go za 2-3$ taniej.

#programowanie #arduino #hacking #gry #elektronika
M.....l - Trochę rozwinąłem mój ostatni projekt i osiągnął on już prawie kres możliwo...

źródło: comment_EeKVgUwYTnPhJcIMMGHxprzPL2mmEeOA.jpg

Pobierz
  • 24
@MrOsamaful: do tego, że ostatni raz jak odpaliłem to niedawno po kilku latach na PS2, to przeżyłem szok. Bo wyglądała jak gówno w porównaniu z tym jak ją zapamiętałem. A tutaj wygląda całkiem nieźle, czy to wersja PC vs PS2 miała aż taką różnicę w grafice?
@qlimax3: Myślę właśnie, że taka może być różnica między wersjami. Gra wygląda całkiem fajnie jak na 12 lat, wgrałem tylko mod na to, żeby działa na ekranach 16:9 bo oryginalnie tylko na 4:3 a tak to bez żadnych modyfikacji.

@zaqwsxdsa: Prędkość przetwarzania danych + prędkość wysyłania danych do wyświetlacza sprawia, że widać artefakty na wyświetlaczu. Gdybym chciał wysyłać jeszcze np wartość prędkościomierza, kasę i bieg to wtedy wyglądałoby to dużo
@MrOsamaful: hm, w takim razie wydaje mi się, że robisz coś źle. Generalnie takiego ekranu nie używałem, ale przewinęły się różne, łącznie z dotykowym kolorowym 640x360 i nie miałem problemów z szybkością przetwarzania, nawet w przypadku dużo bardziej skomplikowanego kodu.

Może za często odświeżasz cały ekran zamiast samej wartości prędkości?
@MrOsamaful: jak mój samochód będzie musiał iść na szrot to wezmę z niego zegary i zrobię coś takiego :P Ale ogólnie odradzam Arduino, jakbyś zrobił to samo w czystym C działałoby naprawdę szybciej i bez problemów. Sama operacja zmiana stanu z 0 na 1 na GPIO w Arduino zajmuje kilkadziesiąt razy dłużej niż to samo napisane w zwykłym C :/
@MrOsamaful: no to do AVR są gotowe biblioteki do obsługi I2C, kwestia tylko znalezienia noty tego kontrolera wyświetlacza i listy komend :) Na przykład te wyświetlacze od Nokii 3310 obsługuje się przez SPI, i samo wyświetlanie obrazu to wysłanie adresu segmentu wyświetlacza i potem bajtu które z 8 pikseli w segmencie mają być zapalone