Flygsimulatorproblem "Temporärt löst"

C, C++, Pascal, Assembly, Raspberry, Java, Matlab, Python, BASIC, SQL, PHP, etc.
Användarvisningsbild
SeniorLemuren
Inlägg: 8365
Blev medlem: 26 maj 2009, 12:20:37
Ort: Kristinehamn

Flygsimulatorproblem "Temporärt löst"

Inlägg av SeniorLemuren »

Med anledning av att jag eftersökte en person så skrev Klas-Kenny : Gör en tråd på forumet med ditt problem vettja.

Jag skall försöka. Jag har ett flygsimulatorprogram : Flightgear 2020. Försökte köra med musen vilket visade sig omöjligt. Jag tänkte då att jag slänger ihop en ratt och fotpedaler lite snabbt och använder en Arduino som skckar data till simulatorprogrammet. Det är ju en baggis när man har CNC fräs och 3D-skrivare och massor av tid tänker jag.

Jag börjar kolla på Youtube efter mjukvara (gratis förstås) och det finns en del. Jag fastnade för en beskrivning gjord av en person jag eftersöket tidigare. Det skulle fungera med att man körde ett program; DCS-bios som i bakgrunden läser den port som Arduinon är ansluten till via USB och skickar den lästa datan till Flygsimulatorprogrammet. Arduinon har en sketch som innehåller ett bibliotek för att sända data via USB-porten. Allt exakt så som det är beskrivet i videon. .

Jag har inte fått det att fungera. Dos-programmet låser porten men inget händer. Det är helt fruset. Jag hittade en annan lösning som var intressant och den gick ut på att använda en Arduino DUO som jag hade liggandes. Den kan emulera tangentbordet via en Native USB-port. Man skickar alltså till exempel nr 6 för att svänga åt ena hållet och nummer 4 för andra hållet, o.s.v. En mycket enkel lösning visade det sig. Alla funktioner i Flygsimulatorn som kan utföras från tangenbordet kan alltså styras från Arduinon ansluten till olika reglage.

Jag har nu testat det och det blev inte helt Ok. det funkar bra på knappar och vred men ratten tar för stora steg. Med musen (eller med en potentiometer) kan man få mycket finare upplösning. Med tangentbordet vrider sig rodren i för stora steg. Annars hade det varit en perfekt lösning.

Så nu är jag på ruta ett igen. Hade det gått att korta ner stegningen vid knapptryckningen så hade det varit perfekt.
Senast redigerad av SeniorLemuren 20 juni 2024, 13:56:54, redigerad totalt 1 gång.
Fortran
EF Sponsor
Inlägg: 1492
Blev medlem: 5 december 2011, 04:18:29
Ort: Åland

Re: Flygsimulatorproblem

Inlägg av Fortran »

Googla arduino MouseController.
Ska finnas i DUO.
Användarvisningsbild
SeniorLemuren
Inlägg: 8365
Blev medlem: 26 maj 2009, 12:20:37
Ort: Kristinehamn

Re: Flygsimulatorproblem

Inlägg av SeniorLemuren »

Så här ser det ut så långt. Fattas fler knappar och vred m.m. Det blev den enklaste lösningen just nu. Får se längre fram om det skall ändras till bättre upplösning. Men det gick utmärkt att flyga med denna lösning. Så här ser programmet ut i sin enkelhet. Inga dos program behövdes, bara ett tangentsbords bibliotek till DUO.
Länk till video

Kod: Markera allt

#include "Keyboard.h"
int pushbuttonR1 = 2;
int buttonR1State = 0;
int pushbuttonR2 = 3;
int buttonR2State = 0;
int sensorPin_X = A0; 
int sensorPin_Y = A1; 
int value_X = 0; 
int value_Y = 0; 
int oldValue_X = 0; 
int oldValue_Y = 0;
float sensorValue_X = 0;
float sensorValue_Y = 0; 

void setup() {
  //Serial.begin(9600);  
  pinMode(pushbuttonR1, INPUT_PULLUP);
  pinMode(pushbuttonR2, INPUT_PULLUP);   
}

void loop() {  
  sensorValue_X = analogRead(sensorPin_X);
  sensorValue_Y = analogRead(sensorPin_Y); 
  value_Y = sensorValue_Y / 12,5 - 6,25 ;
  value_X = sensorValue_X / 12,5 - 6,25 ;
  /*Serial.print("X=  ");  
  Serial.print(value_X );  
  Serial.print("    Y= ");
  Serial.println(value_Y );*/

  buttonR1State = digitalRead(pushbuttonR1);
  if (buttonR1State == LOW) {    
    Keyboard.press('v'); // bläddra vy framåt
    delay(200);
    Keyboard.releaseAll();
    }
    
  buttonR2State = digitalRead(pushbuttonR2);
  if (buttonR2State == LOW) {    
    Keyboard.press('Shift-v'); // bläddra vy bakåt
    delay(200);
    Keyboard.releaseAll(); 
    } 

    if (value_Y > oldValue_Y){      
      Keyboard.press('8');      
      oldValue_Y = value_Y ;      
      Keyboard.releaseAll();       
      }

      if (value_Y < oldValue_Y){      
      Keyboard.press('2');      
      oldValue_Y = value_Y ;     
      Keyboard.releaseAll();       
      }

       if (value_X > oldValue_X){      
      Keyboard.press('4');      
      oldValue_X = value_X ;    
      Keyboard.releaseAll();       
      }

      if (value_X < oldValue_X){      
      Keyboard.press('6');      
      oldValue_X = value_X ;     
      Keyboard.releaseAll();       
      }
  }
 
danei
EF Sponsor
Inlägg: 27345
Blev medlem: 2 juni 2003, 14:21:34
Ort: Östergötland
Kontakt:

Re: Flygsimulatorproblem "Temporärt löst"

Inlägg av danei »

Det finns ju färdiga lödningar med joystick implementeringar. Då har man flera ”analoga” kanaler.

Edit: Den här tänker jag på. https://github.com/MHeironimus/ArduinoJoystickLibrary
Användarvisningsbild
SeniorLemuren
Inlägg: 8365
Blev medlem: 26 maj 2009, 12:20:37
Ort: Kristinehamn

Re: Flygsimulatorproblem "Temporärt löst"

Inlägg av SeniorLemuren »

Jag har kollat på det där. Men jag fattar det som att alla exempel bygger på att man har installerat en joystick eller spelkontroll tidigare som innehåller nödvändiga komponenter. I min dator finns inget tidigare installerat eftersom jag bygger min joystick själv.. Jag blir inte klok på detta. Kanske jag behöver hitta installations filer till en joystick först.
danei
EF Sponsor
Inlägg: 27345
Blev medlem: 2 juni 2003, 14:21:34
Ort: Östergötland
Kontakt:

Re: Flygsimulatorproblem "Temporärt löst"

Inlägg av danei »

Den identifierar sig väll som en generisk joystick vad jag förstår. Jag har dock inte provat själv.
Användarvisningsbild
mrfrenzy
Co Admin
Inlägg: 15379
Blev medlem: 16 april 2006, 17:04:10

Re: Flygsimulatorproblem "Temporärt löst"

Inlägg av mrfrenzy »

Det behövs ingen installation eller drivrutiner.
Direkt när du pluggar in arduinon med rätt sketch kommer windows detektera en joystick.
Användarvisningsbild
SeniorLemuren
Inlägg: 8365
Blev medlem: 26 maj 2009, 12:20:37
Ort: Kristinehamn

Re: Flygsimulatorproblem "Temporärt löst"

Inlägg av SeniorLemuren »

Japp, nu funkar det. Jag hade ett felaktigt (äldre) bibliotek som inte fungerade med DUE utan bara med Leonardo och Arduino Micro. Nu hittade jag detta och bytte ut biblioteket så nu hittade windows det. Det gamla och det nya biblioteket hade samma namn så jag var tvungen att deleta det gamla innan det gick att installeras det nya.

Bifogar länken till det fungerande biblioterket ifall fler är intresserade.

This library can be used with Arduino IDE 1.6.6 or above (see Wiki - Testing Details for more information) to add one or more joysticks (or gamepads) to the list of HID devices an Arduino Leonardo or Arduino Micro (or any Arduino clone that is based on the ATmega32u4) can support. This library will also work with the Arduino Due, thanks to @Palakis. A complete list of supported boards can be found in the Wiki - Supported Boards. This will not work with Arduino IDE 1.6.5 (or below) or with non-32u4 based Arduino devices (e.g. Arduino UNO, Arduino MEGA, etc.).
Edit: jag har även beställt ett par Arduino Micro för framtida behov. De är ju avsevärt mycket mindre och smidigare än den gamla DUEN jag hade i skräplådan. :)
Skriv svar