Nunchuck VR-controller Deel II

algemene C code
Gebruikers-avatar
Berichten: 18
Geregistreerd: 14 Nov 2016, 22:19
Woonplaats: Groningen

Nunchuck VR-controller Deel II

Berichtdoor Klavkjir » 09 Feb 2017, 17:49

Hallo allen

Al een tijdje ben ik bezig met het programmeren van een Arduino Micro (kleine Leonardo) om mijn Nunchuck als VR controller te kunnen gebruiken.

Ik ben een absolute beginner op het gebied van programmeren, dus ik heb een sketch geschreven op basis van ‘If’ – ‘else’ statements. De nunchuck doet het redelijk goed, maar het probleem is dat ‘shift’ en ‘E’ niet ingedrukt blijven.
Ik heb ‘While’ statements geprobeerd, maar dan kan ik maar één functie tegelijk gebruiken. Wie weet wat hier fout gaat?

Het idee voor de kopconfiguratie is als volgt:

Joystick rechts: D ingedrukt houden
Joystick links: A ingedrukt houden
Joystick boven: W ingedrukt houden
Joystick onder: S ingedrukt houden

Accelerometer (XYZ): linkermuisknop klik

C-knop: E ingedrukt houden
Z-knop: Shift ingedrukt houden
Beide knoppen: linkermuisknop ingedrukt houden


Code: Alles selecteren
#include <Keyboard.h>
#include <Mouse.h>
#include <Wire.h>
#include "ArduinoNunchuk.h"

ArduinoNunchuk nunchuk = ArduinoNunchuk();

void setup()
{
  Serial.begin(19200);
  nunchuk.init();
  Wire.begin();
  Mouse.begin();
  Keyboard.begin();
}

void loop()

//Joystick bewegingen lopen------------------------------------------------------
{
  if (nunchuk.analogX <= 70 || nunchuk.analogX >= 170 || nunchuk.analogY <= 70 || nunchuk.analogY >= 170)
  {
    if (nunchuk.analogX <= 70)           //Bij joystickwaarde gelijk of minder dan 70
    {
      Keyboard.press('A');               //Keyboard emuleert toets 'A'
      nunchuk.update();
    }

    if (nunchuk.analogX >= 170)          //Bij joystickwaarde gelijk of meer dan 170
    {
      Keyboard.press('D');               //Keyboard emuleert toets 'D'
      nunchuk.update();                  //Ververs data
    }

    if (nunchuk.analogY <= 70)           //Bij joystickwaarde gelijk of minder dan 70
    {
      Keyboard.press('S');               //Keyboard emuleert toets 'S'
      nunchuk.update();                  //Ververs data
    }

    if (nunchuk.analogY >= 170)          //Bij joystickwaarde gelijk of meer dan 170
    {
      Keyboard.press('W');               //Keyboard emuleert toets 'W'
      nunchuk.update();                  //Ververs data
     }
    nunchuk.update();
  }
  else {
    Keyboard.releaseAll();
  }

  //C- en Z-knoppen----------------------------------------------------------------

  if (nunchuk.cButton == 1 && nunchuk.zButton == 0 || nunchuk.cButton == 0 && nunchuk.zButton == 1)  //één van beide knoppen ingedrukt
  {
    if (nunchuk.cButton == 1 || nunchuk.zButton == 1)       //Bij of C-knop of Z-knop gelijk aan 1
    {
      if (nunchuk.cButton == 1)               //Bij C-knop gelijk aan 1
      {
        Keyboard.press(129);                 
        nunchuk.update();
       }

      if (nunchuk.zButton == 1)               //Bij Z-knop gelijk aan 1
      {
        Keyboard.press('E');                  //E wordt ingedrukt
        nunchuk.update();                     //Ververs data
        }
      nunchuk.update();
    }
    else {
      Keyboard.releaseAll();
    }
  }


  //Tegelijk indrukken van C- en Z-knoppen------------------------------------------

  if (nunchuk.cButton >= 1 && nunchuk.zButton >= 1)                 //Voert de volgende regels uit als C en Z zijn ingedrukt
  {
    Mouse.press(MOUSE_LEFT);               //linkermuisknop
    nunchuk.update();                  //Ververs data
   }
  else {
    Mouse.release(MOUSE_LEFT);
  }

  //Accelerometers Y en Z---------------------------------------------------------

  if (nunchuk.accelY >= 1000)            //Bij beweging in Y-as met uitslag van meer dan 1000
  {
    Mouse.press(MOUSE_LEFT);           //Linkermuisknop wordt ingedrukt
    delay(250);
  }
  else {
    Mouse.release(MOUSE_LEFT);
  }
  nunchuk.update();                 //Ververs data
 

  if (nunchuk.accelZ >= 1000)            //Bij beweging in Z-as met uitslag van meer dan 1000

  {
    Mouse.press(MOUSE_LEFT);           //Linkermuisknop wordt ingedrukt
    delay(250);
  }
  else {
    Mouse.release(MOUSE_LEFT);
  }
  nunchuk.update();                 //Ververs data
 

  //-------------------------------------------------------------------------------

}

Advertisement

Berichten: 4064
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: Nunchuck VR-controller Deel II

Berichtdoor shooter » 09 Feb 2017, 18:21

ik mis release van elke knop ofwel je zet de A en de D bijvoorbeeld wel aan, maar niet uit, nou ja alleen als de joystick in de midden staat.

bij de C en Z mis ik een update

ofwel je zet veel knoppen aan , maar je release ze niet.
paul deelen
shooter@home.nl

Berichten: 4064
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: Nunchuck VR-controller Deel II

Berichtdoor shooter » 09 Feb 2017, 18:22

oops, en als je release all doet, dan gaan ook de knoppen die je wel indrukt ook uit, dus alleen releasen wat uit moet bij een bepaald commando.
paul deelen
shooter@home.nl

Gebruikers-avatar
Berichten: 18
Geregistreerd: 14 Nov 2016, 22:19
Woonplaats: Groningen

Re: Nunchuck VR-controller Deel II

Berichtdoor Klavkjir » 09 Feb 2017, 21:27

shooter schreef:oops, en als je release all doet, dan gaan ook de knoppen die je wel indrukt ook uit, dus alleen releasen wat uit moet bij een bepaald commando.

Ha! Goeie tips, dankjewel.
Dus wat ik nu moet gaan doen is bij elke 'Keyboard.Press(x)' een 'Else...Keyboard.release(x)' zetten en een update bij C en Z nog een update toevoegen?

Terug naar C code

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 3 gasten