Nunchuck VR-controller Deel II
4 berichten
• Pagina 1 van 1
Nunchuck VR-controller Deel II
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
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
Re: Nunchuck VR-controller Deel II
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.
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
shooter@home.nl
Re: Nunchuck VR-controller Deel II
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
shooter@home.nl
Re: Nunchuck VR-controller Deel II
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?
4 berichten
• Pagina 1 van 1
Wie is er online?
Gebruikers in dit forum: Geen geregistreerde gebruikers en 5 gasten