Fahrpult 146 Schülerptojekt

Da immer mehr Zusi User von einem 1:1 Führerstand mit träumen, soll es zumindest an Datenaustausch nicht hapern.
Antworten
Nachricht
Autor
Gero
Beiträge: 71
Registriert: 30.04.2014 12:49:56
Aktuelle Projekte: Fahrpult Wittenberger / IC Steuerwagen

Fahrpult 146 Schülerptojekt

#1 Beitrag von Gero »

Hallo,

ich habe mir einen Arduino Leonardo zugelegt, habe ihn mit einer 9V Stromversorgung und dem USB Kabel mit meinem PC verbunden, um ihn als Gamepad zu funktionieren. Ich weiß, dass ich das Teil nun Programmieren muss, jedoch möchte ich es erstmal verbinden und da fängt mein Problem an - Ich kann den Leonardo zwar als Board festlegen, jedoch kann ich keinen Port auswählen, beim Versuch, ein fertiges Programm zu installieren, wurde ich darauf hingewiesen, dass auf dem Port "COM 1" sich kein Leonardo befinfet.

Warscheinlich facepalmen grade welche, aber ich verstehe es nicht.

Gruß Gero.
Zuletzt geändert von Gero am 17.05.2014 23:12:36, insgesamt 3-mal geändert.

Gero
Beiträge: 71
Registriert: 30.04.2014 12:49:56
Aktuelle Projekte: Fahrpult Wittenberger / IC Steuerwagen

Wie kann ich HID aus einer Variable machen?

#2 Beitrag von Gero »

Die Probleme sind behoben, ich habe auch schon geschafft einen Wert aus den Potis zu lesen, jedoch weiß ich nicht, wie man jetzt einen Wert von der Variable in die HID Gamecontroller-basis schnickt.
Gruß Gero

Benutzeravatar
Arne aus dem Norden
Beiträge: 721
Registriert: 25.12.2011 14:28:21
Aktuelle Projekte: Fahrpult VT628/VS928 - Versuch eines Nachbaus
Wohnort: Str.Km "6,8" der Kiel-Schönberger Eisenbahn (DB-Str. 9107)

Re: Ardunio Leonardo Programmieren

#3 Beitrag von Arne aus dem Norden »

Gero hat geschrieben:ich habe mir einen Arduino Leonardo zugelegt, habe ihn mit einer 9V Stromversorgung und dem USB Kabel mit meinem PC verbunden
Moin,

das ist eigentlich unsinnig mit den 9V, weil sich der Arduino bei Anschluß über USB den Strom eigentlich über letzteren holt. Wenn man das Teil direkt am Rechner oder einem Hub hat und nicht z.B. an der Tastatur ist das mit der Stromversorgung über USB normal auch völlig ausreichend...
Mein Baubericht von der echten Bahn zum Schönberger Strand:
https://www.facebook.com/Hein-Sch%C3%B6 ... 601976323/

Benutzeravatar
Arne aus dem Norden
Beiträge: 721
Registriert: 25.12.2011 14:28:21
Aktuelle Projekte: Fahrpult VT628/VS928 - Versuch eines Nachbaus
Wohnort: Str.Km "6,8" der Kiel-Schönberger Eisenbahn (DB-Str. 9107)

Re: Wie kann ich HID aus einer Variable machen?

#4 Beitrag von Arne aus dem Norden »

Gero hat geschrieben:Die Probleme sind behoben, ich habe auch schon geschafft einen Wert aus den Potis zu lesen, jedoch weiß ich nicht, wie man jetzt einen Wert von der Variable in die HID Gamecontroller-basis schnickt.
Ich hab ehrlich gesagt noch nie einen Gamecontroller benutzt oder gehabt -vielleicht ist es auch eine Wissenslücke bei mir- aber ich wüßte eigentlich auch nicht, das der Leonardo als solcher erkannt werden würde/könnte...

Die mir bekannten HID-Fähigkeiten des Leo beruhen lediglich auf einigen Maus und Tastaturemulationen.
Ich programmiere jedenfalls meine Leos immer so, das sie die typischen Tastaturkürzel an Zusi senden, also eine 8 für Fahrschalter auf oder eine 2 für FS ab.

Wie das genau geht ist hier ja im Nachbarthread mit einigen Beispielen recht ausführlich dargestellt.

Viele Grüße, Arne
Mein Baubericht von der echten Bahn zum Schönberger Strand:
https://www.facebook.com/Hein-Sch%C3%B6 ... 601976323/

Gero
Beiträge: 71
Registriert: 30.04.2014 12:49:56
Aktuelle Projekte: Fahrpult Wittenberger / IC Steuerwagen

Re: Ardunio Leonardo Programmieren

#5 Beitrag von Gero »

Hallo,
ich habe hinbekommen, dass der Arduino wie ein HID Controller erkannt wird, nun habe ich noch das Problem, dass die Analogeingänge zufällige Werte liefern, wenn ich nichts anschließe, schließe ich mein 10k Poti an, bleiben die Werte gleich, das Passiert ebenfalls, wenn ich die Kabel aneinanderhalte, ich verbinde das eine Kabel mit der Mitte, das andere mit dem Äußeren, ich habe schon beide Ausprobiert, nichts hat sich geändert. Die Tasten funktionieren einwandfrei, die Verbindung zu Windows auch, ich habe sie mit festen Werten getestet. Bin ein 14 Jähriger Schüler, was der Grund für meine schlechten Elektrotechnischen Kenntnisse ist. Bitte helft mir!

Gruß Gero
Zuletzt geändert von Gero am 10.05.2014 10:50:37, insgesamt 1-mal geändert.

Gero
Beiträge: 71
Registriert: 30.04.2014 12:49:56
Aktuelle Projekte: Fahrpult Wittenberger / IC Steuerwagen

Re: Ardunio Leonardo Programmieren

#6 Beitrag von Gero »

Nun habe ich alles noch einmal ausprobiert, leider besteht das Problem mit den Potis immer noch, muss ich einstellen, welchen Widerstand das Poti hat?

Danke

Benutzeravatar
Carsten Hölscher
Administrator
Beiträge: 33432
Registriert: 04.07.2002 00:14:42
Wohnort: Braunschweig
Kontaktdaten:

Re: Arduino Leonardo - Analogeingänge Funktionieren nicht

#7 Beitrag von Carsten Hölscher »

Vielleicht zeigst Du mal, was genau Du gemacht hast. Also z.B. Code im Arduino und ein Foto des Aufbaus.

Carsten

Gero
Beiträge: 71
Registriert: 30.04.2014 12:49:56
Aktuelle Projekte: Fahrpult Wittenberger / IC Steuerwagen

Re: Arduino Leonardo - Analogeingänge Funktionieren nicht

#8 Beitrag von Gero »

Hallo,

Hier der Code:

Code: Alles auswählen

/*
  LeoJoy Sample Code
  Alan Chatham - 2013
  unojoy.com
  
  Hardware - Attach buttons to any of the pins 2-12, A4 and A5
             to ground, and see different controller buttons
             be pressed.
             Analog stick controls can be enabled by removing
             some comments at the bottom, since it's way
             easier to test just with some wire and not have
             to go drag out some pots.
      
 
 This code is in the public domain
 */

/* Usage of LeoJoy
  The dataForController_t struct is the core of the library.
  You'll create an instance of that and manipulate it,
   then use the Joystick.setControllerData function to send that data out.
   
  The two main functions that LeoJoy! adds are
   - Joystick.setControllerData(dataForController_t)
      This actually updates the USB controller. Edit the dataForController_t struct
       as much as you like before pushing it out the USB interface with this function.
   
   - getBlankDataForController()
      This utility function returns a dataForController_t object, with no buttons pressed
       and both of the analog sticks centered. Handy!
  
  So, basically, you'll do something like this:
  
  void loop(void){
    // Set up an empty controller data struct
    dataForController_t joystickData = getBlankDataForController();
    // Set some of the buttons
    joystickData.squareOn = someBooleanInput();
    // Send the data over USB to the PC
    Joystick.setControllerData(joystickData);
  }
  
  The fields of the dataForController_t stuct are below.
  The struct is hard-coded into the USB communications library of LeoJoy,
   so it's not designed to be changed.

typedef struct dataForController_t
{
  uint8_t triangleOn : 1;  // Each of these member variables
  uint8_t circleOn : 1;    //  control if a button is off or on
  uint8_t squareOn : 1;    // For the buttons, 
  uint8_t crossOn : 1;     //  0 is off
  uint8_t l1On : 1;        //  1 is on
  uint8_t l2On : 1;        
  uint8_t l3On : 1;        // The : 1 here just tells the compiler
  uint8_t r1On : 1;        //  to only have 1 bit for each variable.
                   //  This saves a lot of space for our type!
  uint8_t r2On : 1;
  uint8_t r3On : 1;
  uint8_t selectOn : 1;
  uint8_t startOn : 1;
  uint8_t homeOn : 1;
  uint8_t dpadLeftOn : 1;
  uint8_t dpadUpOn : 1;
  uint8_t dpadRightOn : 1;

  uint8_t dpadDownOn : 1;
  uint8_t padding : 7;     // We end with 7 bytes of padding to make sure we get our data aligned in bytes
                   
  uint8_t leftStickX : 8;  // Each of the analog stick values can range from 0 to 255
  uint8_t leftStickY : 8;  //  0 is fully left or up
  uint8_t rightStickX : 8; //  255 is fully right or down 
  uint8_t rightStickY : 8; //  128 is centered.
                   // Important - analogRead(pin) returns a 10 bit value, so if you're getting strange
                   //  results from analogRead, you may need to do (analogRead(pin) >> 2) to get good data
} dataForController_t;
    

*/
void setup(){
  setupPins();
}

void loop(){
  // Always be getting fresh data
  dataForController_t controllerData = getControllerData();
  // Then send out the data over the USB connection
  // Joystick.set(controllerData) also works.
  Joystick.setControllerData(controllerData);
}

void setupPins(void){
  // Set all the digital pins as inputs
  // with the pull-up enabled, except for the 
  // two serial line pins
  for (int i = 2; i <= 12; i++){
    pinMode(i, INPUT);
    digitalWrite(i, HIGH);
  }
  pinMode(A4, INPUT);
  digitalWrite(A4, HIGH);
  pinMode(A5, INPUT);
  digitalWrite(A5, HIGH);
}



dataForController_t getControllerData(void){  
  // Set up a place for our controller data
  //  Use the getBlankDataForController() function, since
  //  just declaring a fresh dataForController_t tends
  //  to get you one filled with junk from other, random
  //  values that were in those memory locations before
  dataForController_t controllerData = getBlankDataForController();
  // Since our buttons are all held high and
  //  pulled low when pressed, we use the "!"
  //  operator to invert the readings from the pins
  controllerData.triangleOn = !digitalRead(2);
  controllerData.circleOn = !digitalRead(3);
  controllerData.squareOn = !digitalRead(4);
  controllerData.crossOn = !digitalRead(5);
  controllerData.dpadUpOn = !digitalRead(6);
  controllerData.dpadDownOn = !digitalRead(7);
  controllerData.dpadLeftOn = !digitalRead(8);
  controllerData.dpadRightOn = !digitalRead(9);
  controllerData.l1On = !digitalRead(10);
  controllerData.r1On = !digitalRead(11);
  controllerData.selectOn = !digitalRead(12);
  controllerData.startOn = !digitalRead(A4);
  controllerData.homeOn = !digitalRead(A5);
  
  // Set the analog sticks
  //  Since analogRead(pin) returns a 10 bit value,
  //  we need to perform a bit shift operation to
  //  lose the 2 least significant bits and get an
  //  8 bit number that we can use  
  controllerData.leftStickX = analogRead(A0);// analogRead(A0) >> 2;
  controllerData.leftStickY = analogRead(A1);//analogRead(A1) >> 2;
  controllerData.rightStickX = analogRead(A2);//analogRead(A2) >> 2;
  controllerData.rightStickY = analogRead(A3);//analogRead(A3) >> 2;
  // And return the data!
  return controllerData;
}
Das Ganze ist mit dem LeoJoy Treiber verbunden, was bei den Knöpfen bereits Funktioniert.

Verbunden ist das Poti mit A1 und +5V, am Messgerät ist es in Ordnung. Schließe ich es an, zeigt der Eingang einen leicht schwankenden Wert an, stecke ich es aber aus, so werden irgendwelche zufälligen Werte angezeigt.

Meine Frage: Kann man das mit einem Befehl lösen?


Gruß Gero
Zuletzt geändert von Max Senft am 11.05.2014 20:59:42, insgesamt 2-mal geändert.
Grund: Den Code in ein Code-Block gepackt.

Benutzeravatar
nonesense
Beiträge: 506
Registriert: 15.07.2006 12:50:10
Aktuelle Projekte: QDmi
Fahrpult Einheitsführerstand
Ludmilla
Wohnort: Köln
Kontaktdaten:

Re: Arduino Leonardo - Analogeingänge Funktionieren nicht

#9 Beitrag von nonesense »

Moin,

wenn nichts an die Analogeneingänge angeschlossen wird, nehmen die Rauschen auf. Wie eine Antenne.
Deswegen die Zufälligen Werte.

Ich sehe auch keinen Grund, im fertigen Aufbau das Poti abzuklemmen.

Gruß
Jens

Gero
Beiträge: 71
Registriert: 30.04.2014 12:49:56
Aktuelle Projekte: Fahrpult Wittenberger / IC Steuerwagen

Re: Arduino Leonardo - Analogeingänge Funktionieren nicht

#10 Beitrag von Gero »

Das ist mir auch aufgefallen, aber es ist das Problem, dass immer ein gleichbleibender und nur um ca 5-10 Schritte schwankender Wert ausgegeben wird, wenn ich ein Poti anschließe und dran drehe, ich habe auch verschiedene Widerstände ausprobiert, ich habe so ein bisschen das Gefühl, dass der Controller kaputt ist.

Gruß
Gero

Benutzeravatar
Carsten Hölscher
Administrator
Beiträge: 33432
Registriert: 04.07.2002 00:14:42
Wohnort: Braunschweig
Kontaktdaten:

Re: Arduino Leonardo - Analogeingänge Funktionieren nicht

#11 Beitrag von Carsten Hölscher »

Hast Du mal systematisch getestet? 2 Festwiderstände statt Poti usw.?
Carsten

Benutzeravatar
Arne aus dem Norden
Beiträge: 721
Registriert: 25.12.2011 14:28:21
Aktuelle Projekte: Fahrpult VT628/VS928 - Versuch eines Nachbaus
Wohnort: Str.Km "6,8" der Kiel-Schönberger Eisenbahn (DB-Str. 9107)

Re: Arduino Leonardo - Analogeingänge Funktionieren nicht

#12 Beitrag von Arne aus dem Norden »

Gero hat geschrieben:ich habe so ein bisschen das Gefühl, dass der Controller kaputt ist.
Probiers aus. Lade das hier hoch und teste bei geöffnetem Serial Monitor nacheinander mit entsprechend geändertem Pin A0 bis A5 durch.
Außerdem: warum tun sich hier alle bei Problemen immer so schwer, einfach mal ein Handyfoto ihres elektrischen Aufbaus zu zeigen?

Code: Alles auswählen

void setup() 
  {
  Serial.begin(9600);
  }

void loop() 
  {
  int sensorValue = analogRead(A0);
  Serial.println(sensorValue);
  delay(1);
  }
Mein Baubericht von der echten Bahn zum Schönberger Strand:
https://www.facebook.com/Hein-Sch%C3%B6 ... 601976323/

Benutzeravatar
Thomas U.
Beiträge: 3288
Registriert: 15.03.2004 16:39:15
Wohnort: Gelsenkirchen

Re: Arduino Leonardo - Analogeingänge Funktionieren nicht

#13 Beitrag von Thomas U. »

Ich lese nur etwas von Analogeingang, Poti und +5V. Fehlt da nicht ne Masse am dritten Pin des Potis? Oder kann man da auch wieder irgendwelche internen Pulldowns nutzen, deren Aktivierung ich aber nirgends im Quellcode finde?

Gero
Beiträge: 71
Registriert: 30.04.2014 12:49:56
Aktuelle Projekte: Fahrpult Wittenberger / IC Steuerwagen

Re: Arduino Leonardo - Analogeingänge Funktionieren nicht

#14 Beitrag von Gero »

Hallo und erstmal Danke!

Ich habe das Poti mit der Masse verbunden, das Funktioniert nun einwandfrei, vorher habe ich es aber schonmal ausprobiert, damals blieb es ohne Erfolg.

Ich werde wahrscheinlich bald mit neuen Fragen auftauchen, ich baue grob ein Pult der Br146.

Gruß
Gero

Benutzeravatar
nonesense
Beiträge: 506
Registriert: 15.07.2006 12:50:10
Aktuelle Projekte: QDmi
Fahrpult Einheitsführerstand
Ludmilla
Wohnort: Köln
Kontaktdaten:

Re: Arduino Leonardo - Analogeingänge Funktionieren nicht

#15 Beitrag von nonesense »

Thomas U. hat geschrieben:Ich lese nur etwas von Analogeingang, Poti und +5V. Fehlt da nicht ne Masse am dritten Pin des Potis? Oder kann man da auch wieder irgendwelche internen Pulldowns nutzen, deren Aktivierung ich aber nirgends im Quellcode finde?
Google: "arduino interner pulldown"
Im erstes Ergebnis liest, wie das geht:

pinMode(pin, INPUT); // Anschluss als Eingang definieren
digitalWrite(pin, HIGH); // Pull Up Widerstand aktivieren

Gleiches geht auch als Pulldown.
Das funktioniert aber nur mit den digitalen Anschlüssen.

Gruß
Jens

Gero
Beiträge: 71
Registriert: 30.04.2014 12:49:56
Aktuelle Projekte: Fahrpult Wittenberger / IC Steuerwagen

Re: Arduino Leonardo - Analogeingänge Funktionieren nicht

#16 Beitrag von Gero »

Heute habe ich mich an die Taster gewagt. Ich habe drei Schaltbau-Taster/Schalter genommen, die vermutlich aus einer Einheitslok stammen. Habe es ausprobiert und festgestellt, dass ich nun gar nicht mehr die Tastatur benutzen kann, um Eingaben zu machen, ich konnte nur noch mit den Tastern steuern. Weil ich aber aus Kostengründen keine Bügel/Hauptschalter etc. Taster habe möchte, möchte ich noch Eingaben über eine Tastatur machen. Wie kann ich das umsetzen? Gibt es da einen Trick?

Gruß
Gero
Zuletzt geändert von Gero am 20.05.2014 21:03:12, insgesamt 1-mal geändert.

Gero
Beiträge: 71
Registriert: 30.04.2014 12:49:56
Aktuelle Projekte: Fahrpult Wittenberger / IC Steuerwagen

Re: Fahrpult 146 Schülerptojekt

#17 Beitrag von Gero »

Ich bin nun mit dem Elektonischen Teil fast fertig, ich brauche nur noch Maße und die Abstände von den Hebeln. Hat die jemand?
Dann würde ich anfangen, die Hebel zu bauen, hat jemand schon Erfahrung mit Holzgestellen für die Hebel gemacht? Soll ich lieber Metall nehmen? Schonmal Danke im Voraus!

Gruß Gero

Benutzeravatar
Carsten Hölscher
Administrator
Beiträge: 33432
Registriert: 04.07.2002 00:14:42
Wohnort: Braunschweig
Kontaktdaten:

Re: Fahrpult 146 Schülerptojekt

#18 Beitrag von Carsten Hölscher »

Mir ist jetzt nicht ganz klar, was Du brauchst - vielleicht etwas ausführlicher?

Carsten

Antworten