-
Posts
174 -
Joined
-
Last visited
-
Days Won
8
Everything posted by Conrad
-
Kontrolery gier
Conrad replied to Piotrek Blaszczak's topic in Sugestie usprawnień [Tryb jednoosobowy]
Świetnie! Też o tym myślałem, ale ciężko się rozdwoić, na razie zabawa oldtimerami EN51, EP07 i ET22 bo są podobnie zbudowane. A taki Trax/Dragon, czy też Elfik z własnymi dashbordami które wyświetlasz na własnych ekranach i masz czysty widok z okna to właśnie taki cel, dlatego idź przodem i toruj nam droge na to rozwiązanie. Ja nie wiem jak jest zbudowany ten nastawnik jazdy, bo to jakieś bardziej skomplikowane rozwiązanie mechaniczne, trzeba będzie poszukać jakiś rysunków i spróbować to odtworzyć w druku 3d. -
Kontrolery gier
Conrad replied to Piotrek Blaszczak's topic in Sugestie usprawnień [Tryb jednoosobowy]
Tak, to tylko takie zabawy zanim coś ludzkiego od devów dostaniemy. Głównie mobilizuje mnie to do pracy nad obudowami i pulpitem, tak żeby później przejść szybko i gładko do finalnego rozwiązania. -
Kontrolery gier
Conrad replied to Piotrek Blaszczak's topic in Sugestie usprawnień [Tryb jednoosobowy]
Jak zasymulować czuwak za pomocą pythona oraz Arduino: Idea jest taka, że za pomocą pythona sprawdzamy kolor pixela i jeżeli jest prawie biały (RGB), to zapalamy za pomocą arduino dany LED i tyle 🙂 1. W Simrail Musimy ustawić sobie widok na stałe, wyłączyć symulowanie przechylania, mnożnik siły odśrodkowej =0, tak żeby ekran pulpitu był statyczny cały czas. 2. Mieć zainstalowanego Pythona 3. Stworzyć sobie plik ze skryptem "czuwak_arduino.py" sprawdzić czy macie i zainstalować brakujące biblioteki jak: pyautgui, serial, time, threading komendy do instalacji: python pip install pyautogui python -m pip install pyserial kod dla pliku "czuwak_arduino.py" - ustawić prawidłowy port COM dla Arduino (tutaj np. mam COM6) - przypisać pozycję pixela (najlepiej tego najjaśniejszego jaki występuje podczas zaplania lampki) dla SHP i Czuwaka dla swojej rozdzielczości i ustawień widoku kokpitu (przycisk 1). Warto sobie zrobić print screena i na spokojnie sprawdzić idealne pozycje dla tych pixeli. - tolerancja koloru pozwala mieć większą czułość reakcji, można to zwiększać wg uznania import pyautogui import serial import time import threading # Ustaw port COM Arduino (sprawdź w Menedżerze urządzeń) arduino_port = 'COM16' # Zmień na odpowiedni port COM baud_rate = 9600 arduino = serial.Serial(arduino_port, baud_rate) # Pozycje pikseli na ekranie pixel_1_x, pixel_1_y = 1141, 1305 # Pozycja 1. piksela pixel_2_x, pixel_2_y = 1238, 1294 # Pozycja 2. piksela # Oczekiwany kolor w RGB expected_color = (180, 180, 180) # Ustaw tolerancję dla każdej składowej koloru tolerance = 30 # Funkcja sprawdzająca, czy kolor jest bliski oczekiwanemu def is_color_close(color, target_color, tolerance): return ( abs(color[0] - target_color[0]) <= tolerance and abs(color[1] - target_color[1]) <= tolerance and abs(color[2] - target_color[2]) <= tolerance ) # Funkcja do sprawdzania kolorów i komunikacji z Arduino def check_colors_and_send(): try: while True: # Pobierz kolor pikseli color_1 = pyautogui.pixel(pixel_1_x, pixel_1_y) color_2 = pyautogui.pixel(pixel_2_x, pixel_2_y) # Zapalanie lampek LED w zależności od warunków if is_color_close(color_1, expected_color, tolerance): arduino.write(b'1') # Zapal LED-y na pinach 2 i 3 else: arduino.write(b'0') # Zgaś LED-y na pinach 2 i 3 if is_color_close(color_2, expected_color, tolerance): arduino.write(b'2') # Zapal LED-y na pinach 5 i 6 else: arduino.write(b'3') # Zgaś LED-y na pinach 5 i 6 time.sleep(0.05) # Zmniejszenie opóźnienia do 0,05 sekundy except KeyboardInterrupt: print("Zatrzymano program.") finally: arduino.close() # Uruchomienie funkcji w osobnym wątku color_thread = threading.Thread(target=check_colors_and_send) color_thread.start() kod dla arduino ledy wpięte w Piny 2,3,5,6 można to zmienić wg uznania, dana para zapala 5 i 6 Czuwak, a 2 i 3 SHP void setup() { pinMode(2, OUTPUT); // LED na pinie 2 pinMode(3, OUTPUT); // LED na pinie 3 pinMode(5, OUTPUT); // LED na pinie 5 pinMode(6, OUTPUT); // LED na pinie 6 Serial.begin(9600); // Komunikacja z komputerem } void loop() { if (Serial.available() > 0) { char command = Serial.read(); // Odczytaj polecenie z komputera if (command == '1') { digitalWrite(2, HIGH); // Zapal LED na pinie 2 digitalWrite(3, HIGH); // Zapal LED na pinie 3 } else if (command == '0') { digitalWrite(2, LOW); // Zgaś LED na pinie 2 digitalWrite(3, LOW); // Zgaś LED na pinie 3 } else if (command == '2') { digitalWrite(5, HIGH); // Zapal LED na pinie 5 digitalWrite(6, HIGH); // Zapal LED na pinie 6 } else if (command == '3') { digitalWrite(5, LOW); // Zgaś LED na pinie 5 digitalWrite(6, LOW); // Zgaś LED na pinie 6 } } } Jak już mamy wszystko odpalamy wiersz poleceń cmd i wpisujemy np. D:\python3 czuwak_arduino.py Uruchamiamy SimRail i powinno działać -
Kontrolery gier
Conrad replied to Piotrek Blaszczak's topic in Sugestie usprawnień [Tryb jednoosobowy]
Jeżeli pytasz o post powyżej to za pomocą Pythona, jutro wkleję kod to inni bedą mogli skorzystać. -
Jestem ciekaw czy ktoś już odpalał Simrail na Intelu Arc B580? I jaka wydajność?
-
SimRail Controller hardware we've built.
Conrad replied to Gazz292's topic in General Discussion [Multiplayer]
I would like to present a working element of the czuwak/shp lamp for EP/EU07. The project runs on python and reads the pixel value and sends it to arduino to control the LED. 3d print Case with acrylic 3mm and led module with dome. How it works 20250126_132514.mp4 -
Kontrolery gier
Conrad replied to Piotrek Blaszczak's topic in Sugestie usprawnień [Tryb jednoosobowy]
Projekt "Czuwak" gotowy. Zczytywanie pixeli z ekranu i sterowanie w ten sposób diodami led przez arduino. Dwa wydruki: całość: - szybka to akryl 3mm przyciemniony - diody to gotowe moduły z kopułką Działanie: 20250126_132514.mp4 -
Beznadziejne dialogi w niektórych scenariuszach.
Conrad replied to Shiway's topic in Dyskusja [Tryb jednoosobowy]
Już wcześniej napisałeś, że jesteś krótkofalarzem. Tylko my tutaj rozmyślamy jak można to łatwo wprowadzić do symulatora, gry SimRail, a nie tworzyć symulacji rozchodzenia się fal radiowych chyba że lubisz czekać ponad rok na nowe ficzery 🙂 -
Beznadziejne dialogi w niektórych scenariuszach.
Conrad replied to Shiway's topic in Dyskusja [Tryb jednoosobowy]
Na radiu jest przycisk szumu, jakby się nakładał na dźwięk radia (kiedy głośnik pracuje) mielibyśmy namiastkę tego co napisałeś. -
Kontrolery gier
Conrad replied to Piotrek Blaszczak's topic in Sugestie usprawnień [Tryb jednoosobowy]
Dzisiaj pobawilem się tą pamiecią, faktycznie da sie znalezc wartosci, np SHP, czy moment zalaczenia dzwieku dla czuwaka itp, ale po ponownym uruchomieniu SR gubi te dane 😕 Na razie testuje rozwiazanie na zczytywaniu danych rgb danego pixela. W weekand jak uruchomie drukarke pokaze dzialajacy element. Na razie mały test: 20250121_221626.mp4 -
Kontrolery gier
Conrad replied to Piotrek Blaszczak's topic in Sugestie usprawnień [Tryb jednoosobowy]
Też się tego obawiałem, że jak się tak stanie to nie ma sensu tego tak prowadzić. Pokazałeś i udostępniłeś alternatywę, więc ukłony, może pogrzebię w tym temacie, ale chłopaki w SimRail niech obiecają rzadkie aktualizacje 😉 albo udostępnią I/O dla nas, prosimy @uetam 🙂 -
Kontrolery gier
Conrad replied to Piotrek Blaszczak's topic in Sugestie usprawnień [Tryb jednoosobowy]
Thx Co do nanometrów to wartość rzeczywista podzielona przez 100 na skali manometrów, czyli 4,19 to wartość 0,419 Nie mam silników krokowych na razie, więc tutaj niepoeksperyemntuje, ale na razie działa to co pokazałeś powyżej. -
Kontrolery gier
Conrad replied to Piotrek Blaszczak's topic in Sugestie usprawnień [Tryb jednoosobowy]
@JarkPomsky właśnie udało mi się przekazać dane z JSON do arduino 🙂 Na razie zrobiłem test zapalania się lampki LED kiedy wartość przekroczy >100 z tego co opublikowałeś Kod dla Arduino Leonardo (8bit) #include <ArduinoJson.h> // Pin dla diody LED const int ledPin = 10; // Zmienna do przechowywania ostatniego czasu unsigned long previousMillis = 0; const long interval = 1000; // Czas oczekiwania w ms void setup() { Serial.begin(9600); // Inicjalizacja portu szeregowego pinMode(ledPin, OUTPUT); // Ustawienie pinu diody LED jako wyjścia digitalWrite(ledPin, LOW); // Wyłączenie diody na start Serial.println("Uruchomiono Arduino."); } void loop() { // Sprawdzanie, czy dostępne są dane na porcie szeregowym if (Serial.available() > 0) { String jsonData = Serial.readString(); // Odczyt danych JSON Serial.print("Odebrane dane: "); Serial.println(jsonData); // Przetwarzanie JSON StaticJsonDocument<1024> doc; DeserializationError error = deserializeJson(doc, jsonData); if (error) { Serial.print("Błąd przetwarzania JSON: "); Serial.println(error.c_str()); return; } // Odczytanie wartości value_1 if (doc.containsKey("value_1")) { float value_1 = doc["value_1"]; Serial.print("Odczytana wartość: "); Serial.println(value_1); // Sterowanie diodą LED w zależności od wartości if (value_1 > 100) { digitalWrite(ledPin, HIGH); // Włącz diodę Serial.println("Dioda WŁĄCZONA"); } else { digitalWrite(ledPin, LOW); // Wyłącz diodę Serial.println("Dioda WYŁĄCZONA"); } } else { Serial.println("Brak klucza 'value_1' w danych JSON."); } } } Jako, że mam Arduino po kablu USB-> to w pythonie zrobilem API do czytania danych import serial import time import requests from requests.adapters import HTTPAdapter from urllib3.util.retry import Retry # Ustawienia portu szeregowego serial_port = "COM11" # Zmień na właściwy port, do którego podłączone jest Arduino baud_rate = 9600 # URL API api_url = "http://192.168.0.66:5000/api/receive_data" # Konfiguracja sesji z ponownymi próbami session = requests.Session() retries = Retry(total=5, backoff_factor=1, status_forcelist=[500, 502, 503, 504]) session.mount("http://", HTTPAdapter(max_retries=retries)) def main(): try: # Inicjalizacja połączenia szeregowego ser = serial.Serial(serial_port, baud_rate, timeout=1) print(f"Połączono z Arduino na {serial_port}") while True: try: # Pobierz dane z API z timeoutem i zamykaniem połączenia with session.get(api_url, timeout=5) as response: if response.status_code == 200: json_data = response.json() # Przetwarzanie odpowiedzi JSON print(f"Otrzymane dane z API: {json_data}") # Wysyłanie danych JSON do Arduino ser.write((str(json_data) + "\n").encode('utf-8')) else: print(f"Błąd API: {response.status_code}") time.sleep(1) # Odczekaj 1 sekundę przed kolejnym żądaniem except requests.exceptions.RequestException as e: print(f"Błąd połączenia z API: {e}") time.sleep(0.01) # Odczekaj przed kolejną próbą except Exception as e: print(f"Wystąpił błąd podczas pętli głównej: {e}") break except KeyboardInterrupt: print("Zakończono działanie.") except Exception as e: print(f"Wystąpił błąd: {e}") finally: if 'ser' in locals() and ser.is_open: ser.close() print("Zamknięto port szeregowy.") if __name__ == "__main__": main() Działa 🙂 edit: dodalem zabezpieczenie do limitu otwartych połączeń sieciowych na określony portm, żeby jego nie zamykał. -
Mnie zainteresowała kwestia testów z grupą 20-30 graczy Steam, przecież to jakiś żart! Każdy z nas po odpaleniu wersji po wyjściu z EA widział dziesiątki błędów. Mam nadzieje, że PlayWay tego wytłumaczenia nie kupił.
-
Kontrolery gier
Conrad replied to Piotrek Blaszczak's topic in Sugestie usprawnień [Tryb jednoosobowy]
W weekand sprobuję to przetestować i dam znać co się udało uzyskać. -
Kontrolery gier
Conrad replied to Piotrek Blaszczak's topic in Sugestie usprawnień [Tryb jednoosobowy]
Niestety tylko na razie tędy droga, ale kolejne elementy pulpitu ożyją. -
Kontrolery gier
Conrad replied to Piotrek Blaszczak's topic in Sugestie usprawnień [Tryb jednoosobowy]
Co do silników krokowych to @Maciej_ZG już wcześniej podpowiedział jakie rozwiązanie się u niego sprawdziło. Tanie i często stosowane silniczki krokowe w projektach diy, często używane przy budowie kokpitów samolotów dla zegarów analogowych. np. do Cessny. Łatwo znaleźć gotowe rozwiązania i tutoriale diy. Co do API od dev to obecnie moja nadzieja szoruje po dnie pustego basenu 🤣 -
Kontrolery gier
Conrad replied to Piotrek Blaszczak's topic in Sugestie usprawnień [Tryb jednoosobowy]
Zazdroszczę! za oryginalny hardware 🙂, spory klamot, ale będzie frajda z tego. -
Kontrolery gier
Conrad replied to Piotrek Blaszczak's topic in Sugestie usprawnień [Tryb jednoosobowy]
Świetnie! Jak rozumiem byłaby szansa na bypass pomiędzy SimRail, a wyjściem na zewnątrz i przekazywaniem stanów na swój hardware!? Do tego się dokopałeś (pod F8) ? Jako, że jesteś ze świata simracingowego, to kuszące byłoby to zrobić finalnie pod dashboard np SimHuba, który ma spore możliwości dalej odnośnie przenoszenia danych stanów na kontrolery np arduino. Byłby to drugi symulator po TS2021 z takim suportem. -
Na to wygląda, że to my jesteśmy testerami
-
-
Magia zamiany nocy na dzień, oraz pogoda
Conrad replied to Quentis's topic in Sugestie usprawnień [Tryb wieloosobowy]
@Lukaszszsz Ty masz na myśli harmonogram wschodów i zachodów Słońca, do ogarniecia w unity. Mam nadzieje, że dev czytają to. Jeżeli mamy pogodę, pory roku to czas i na to. Myślę, że jesteście to wstanie ogarnąć na multi. Kolejny kamyczek do imersji. Tutaj się z tym zgadzam. Jednak do samych aspektów kolorystyki w grze to pozostaje Reshade. Kazdy ma inny monitor, jeden slabo swiecacy, drugi mocno, jeden z HDR drugi nie, jeden na wypalonych ledach, kolejny już na naj owszych OLEDach. Do tego jedni wola soczyste kolory rodem z mediamarktu, a inni zimowe pantone Poland color dark grey. Wszyscy jesteśmy spięci jak guma w majtkach przed świętami. Na forum, na radiu na multi, wiecej luzaków, bo Mikolej nie przyjdzie 😉 -
Magia zamiany nocy na dzień, oraz pogoda
Conrad replied to Quentis's topic in Sugestie usprawnień [Tryb wieloosobowy]
Zawsze można sobie doprawić grafikę za pomocą Reshade i będziesz miał totalny mrok 😉 -
Kontrolery gier
Conrad replied to Piotrek Blaszczak's topic in Sugestie usprawnień [Tryb jednoosobowy]
Super! Gratulacje! i całość ogarnięta, jak rozumiem też pod Maszynę i TD2? -
Kontrolery gier
Conrad replied to Piotrek Blaszczak's topic in Sugestie usprawnień [Tryb jednoosobowy]
a dlaczego nie możesz jak jest wykonana ta gruszka? Przez joytokey sie nie da?