wtorek, 25 lipca 2023
Czy jestem pełnoletni?
Zamówiłem piwo bezalkoholowe(!) z Liska. Dostawca chciał zobaczyć mój dowód żeby sprawdzić czy mam 18 lat. A jakieś dwa miesiące temu taksówkarz zapytał mnie kiedy idę na emeryturę.
sobota, 15 lipca 2023
Panel do gry SimRail (aktualizacja: 20.02.2025)
Od kilku miesięcy gram w polski symulator kolejowy SimRail. Niedawno na forum gry trafiłem na post pokazujący panel sterowniczy zrobione przez jednego z użytkowników. Natchnął mnie on do zrobienia podobnego. Postanowiłem zastosować Arduino Due - ma ono dwie wady - cenę i wielkość, ale ma też kilka zalet:
- ma dużo wyprowadzeń, a przycisków do obsługi jest stosunkowo dużo
- może emulować klawiaturę bez wgrywania dodatkowych zewnętrznych plików
- oprogramowanie jest bardzo proste
- elektryczne połączenia również są bardzo proste
Powoli dodaję kolejne przyciski, więc przyjemność gry z nowym panelem wciąż wzrasta.
Sprzęt:
- Arduino Due
- nakładka na Arduino Mega DFRobot DFR0921
- skrzynka narzędziowa Patrol Tandem B 400
- różne przełączniki monostabilne
Kod programu:
#include <Keyboard.h>
int i = 0;
int j = 0;
int stanKlawisza[54] = {};
void setup() {
 for (int i = 2; i < 55; i++) {
  if (stanKlawisza[i] == NULL) {
   stanKlawisza[i] = HIGH;
  }
  pinMode(i, INPUT_PULLUP);
 }
 Keyboard.begin();
 pinMode(49, OUTPUT);
}
// https://www.arduino.cc/reference/en/language/functions/usb/keyboard/keyboardmodifiers/
void loop() {
 i = 23; // otwarcie drzwi lewych
 j = 31; // otwarcie drzwi prawych
 if (digitalRead(i) == LOW || digitalRead(j) == LOW) {
  Keyboard.press('g');
  delay(250);
  Keyboard.release('g');
  digitalWrite(49, HIGH); // zaświecenie kontrolki
 }
 i = 47; // zamknięcie drzwi
 if (digitalRead(i) == LOW) {
  digitalWrite(49, LOW); // wygaszenie kontrolki
  Keyboard.press(178);
  delay(1000);
  Keyboard.release(178);
  Keyboard.press('o');
  delay(50);
  Keyboard.release('o');
  Keyboard.press('k');
  delay(50);
  Keyboard.release('k');
  stanKlawisza[i] = HIGH;
 }
 klawisz(2, '=');
 klawisz(3, '1');
 klawisz(9, 179);  // Tab
 //klawisz(9, 178); // BACKSPACE
 klawisz(22, '-');
 klawisz(37, '\\');
 
 klawisz(28, 220); // NUM /
 klawisz(52, 218); // UP ARROW
 klawisz(29, 217); // DOWN ARROW
 klawisz(36, 221); // NUM *
 klawisz(44, 235); // NUM .
 klawisz(51, 226); // NUM 2
 klawisz(30, 230); // NUM 6
 klawisz(43, 232); // NUM 8
 
 klawisz(39, 'h');
 klawisz(23, 'i');
 klawisz(53, 'j');
 //klawisz(47, 'o');
 klawisz(31, 'p');
 klawisz(46, 'z');
 klawisz(27, 'A');
 klawisz(35, 'C');
 i = 45; // radio
 if (digitalRead(i) == LOW && stanKlawisza[i] == LOW) {
  // nadawanie
  Keyboard.press('`');
  delay(50);
 } else if (digitalRead(i) == LOW && stanKlawisza[i] == HIGH) {
  // poczatek nadawania
  Keyboard.press(128);
  delay(50);
  Keyboard.press('M');
  delay(50);
  Keyboard.release('M');
  delay(50);
  Keyboard.release(128);
  delay(50);
  Keyboard.press('`');
  delay(50);
  stanKlawisza[i] = LOW;
 } else if (digitalRead(i) == HIGH && stanKlawisza[i] == LOW) {
  // koniec nadawania
  Keyboard.release('`');
  delay(50);
  Keyboard.press(128);
  delay(50);
  Keyboard.press('M');
  delay(50);
  Keyboard.release('M');
  delay(50);
  Keyboard.release(128);
  delay(50);
  stanKlawisza[i] = HIGH;
 }
 /*
 i = 45; // hamulec - nastawnik czy nastawnik - hamulec
 if ((digitalRead(i) == LOW && stanKlawisza[i] == HIGH) || (digitalRead(i) == HIGH && stanKlawisza[i] == LOW)) {
  klawisz(4, 227); // NUM 3
  klawisz(5, 233); // NUM 9
  klawisz(7, 222); // NUM -
  klawisz(8, 223); // NUM +
  stanKlawisza[i] = LOW;
 }
 else if ((digitalRead(i) == LOW && stanKlawisza[i] == LOW) || (stanKlawisza[i] == HIGH)) {
*/
 klawisz(4, 222); // NUM -
 klawisz(5, 223); // NUM +
 klawisz(7, 227); // NUM 3
 klawisz(8, 233); // NUM 9
/*
  stanKlawisza[i] = HIGH;
 }
*/
 i = 38; // wesołe Pendolino
 if (digitalRead(i) == LOW && stanKlawisza[i] == HIGH) {
  Keyboard.press('h');
  delay(750);
  Keyboard.release('h');
  delay(250);
  Keyboard.press('j');
  delay(600);
  Keyboard.release('j');
  delay(300);
  Keyboard.press('h');
  delay(250);
  Keyboard.release('h');
  stanKlawisza[i] = HIGH;
 }
}
void klawisz(int i, int l) {
 if (digitalRead(i) == LOW && stanKlawisza[i] == HIGH) {
  Keyboard.press(l);
  delay(50);
  stanKlawisza[i] = LOW;
 }
 if (digitalRead(i) == HIGH && stanKlawisza[i] == LOW) {
  Keyboard.release(l);
  delay(50);
  stanKlawisza[i] = HIGH;
 }
}
Subskrybuj:
Komentarze
                                      (
                                      Atom
                                      )
                                    
 
%20sjs%202023-07-15%2017.14.12%20crop.jpg)
