Nunchuck-muis naar WASD keyboard
40 berichten
• Pagina 3 van 4 • 1, 2, 3, 4
- nicoverduin
- Berichten: 5043
- Geregistreerd: 13 Mei 2013, 20:57
- Woonplaats: Heemskerk
Re: Nunchuck-muis naar WASD keyboard
Met koepel heb je misschien nog mazzel. Aan mij had je een verkeerde gehad:) daarom vinden sommigen mij vervelend en lastig:) lekker boeiend. Ik zou alleen beginnen bij wat tutorials. En als je die niet begrijpt gewoon vragen erover stellen. Dan ben je de eerste!!!
Advertisement
Re: Nunchuck-muis naar WASD keyboard
Hallo!
Ruim een maand later, heb ik dan eindelijk mijn ProMicro (Leonardo) van oom Ali in de bus gekregen.
Nu ben ik er wat mee aan het rommelen, in de hoop dat de Nunchuck met de code uit dit topic meteen zou werken, maar tevergeefs.
De vraag die ik jullie nu wil stellen is; waarom werkt deze CPP code niet icm mijn Leonardo en mijn Nunchuck?
Weer even voor de context, ik ben student Communicatie en werk aan een project met een Oculus Rift.
// move the mouse if the readings were above 0
if ((xDistance != 0) || (yDistance != 0)) {
Mouse.move(xDistance, -yDistance, 0); // -yDistance ensures inverted style joystick
}
}
nunchuck_print_data(); //prints nunchuck data to serial monitor for debugging purposes
loop_cnt++;
delay(1);
}
Het rode gedeelte heb ik vervangen door een stukje code van Nicoverduin;
Ik kan hem gewoon uploaden, maar er gebeurt niks.
Met een muis-emulatie programmaatje, doet de Nunchuck het wel. De werking kunnen we dus uitsluiten.
Wie kan mij helpen, wat gaat er hier dan toch mis?!
Ruim een maand later, heb ik dan eindelijk mijn ProMicro (Leonardo) van oom Ali in de bus gekregen.
Nu ben ik er wat mee aan het rommelen, in de hoop dat de Nunchuck met de code uit dit topic meteen zou werken, maar tevergeefs.
De vraag die ik jullie nu wil stellen is; waarom werkt deze CPP code niet icm mijn Leonardo en mijn Nunchuck?
Weer even voor de context, ik ben student Communicatie en werk aan een project met een Oculus Rift.
- Code: Alles selecteren
//Brian Krukoski
//April 2012
//red-+5, white-gnd, green-sda, yllw-clck
#include <Keyboard.h>
#include <Wire.h>
#include "nunchuck_funcs.h"
#include <HID.h>
int loop_cnt=0;
// parameters for reading the joystick:
int range = 40; // output range of X or Y movement
int threshold = range/10; // resting threshold
int center = range/2; // resting position value
boolean mouseIsActive = false; // whether or not to control the mouse
int lastSwitchState = LOW; // previous switch state
void setup() {
// initilization for the Wiichuck
nunchuck_init();
// take control of the mouse:
Mouse.begin();
Serial.begin(9600);
}
void loop() {
if( loop_cnt > 10 ) { // every 10 msecs get new data
loop_cnt = 0;
nunchuck_get_data();
int sensorReading = analogRead(A0);
Serial.println(sensorReading);
delay(1);
//right and left click control
int leftState = nunchuck_cbutton();
if (leftState) Mouse.press(MOUSE_RIGHT); else Mouse.release(MOUSE_RIGHT); //Switched with Left
int rightState = nunchuck_zbutton();
if (rightState) Mouse.press(MOUSE_LEFT); else Mouse.release(MOUSE_LEFT); //Switched with Right
// read the x axis
int xReading = nunchuck_joyx(); //calls on nunchuck_funcs library for x axis reading
xReading = map(xReading, 38, 232, 0, range); // 38 and 232 arbitrarily determined through experimentation, maps to 0 and preset range
int xDistance = xReading - center;
if (abs(xDistance) < threshold) //if absolute value of xDistance is less than predefined threshold....
{
xDistance = 0;
}
// read the y axis
int yReading = nunchuck_joyy(); //calls on nunchuck_funcs library for y axis reading
yReading = map(yReading, 38, 232, 0, range); // 38 and 232 arbitrarily determined through experimentation, maps to 0 and preset range
int yDistance = yReading - center;
if (abs(yDistance) < threshold) //if absolute value of yDistance is less than predefined threshold....
{
yDistance = 0;
}
// move the mouse if the readings were above 0
if ((xDistance != 0) || (yDistance != 0)) {
Mouse.move(xDistance, -yDistance, 0); // -yDistance ensures inverted style joystick
}
}
nunchuck_print_data(); //prints nunchuck data to serial monitor for debugging purposes
loop_cnt++;
delay(1);
}
// move the mouse if the readings were above 0
if ((xDistance != 0) || (yDistance != 0)) {
Mouse.move(xDistance, -yDistance, 0); // -yDistance ensures inverted style joystick
}
}
nunchuck_print_data(); //prints nunchuck data to serial monitor for debugging purposes
loop_cnt++;
delay(1);
}
Het rode gedeelte heb ik vervangen door een stukje code van Nicoverduin;
- Code: Alles selecteren
if (xDistance != 0) { // Bij geen beweging niets doen
if (xDistance > 0) {
Keyboard.press('W'); // Stuur 'W'
} else {
Keyboard.press('S'); // Stuur 'S'
}
delay(100); // ff wachten
Keyboard.releaseAll(); // alle toetsen los
}
if (yDistance != 0) { // Bij geen beweging niets doen
if (yDistance > 0) {
Keyboard.press('A'); // stuur 'A'
} else {
Keyboard.press('D'); // stuur 'D'
}
delay(100); // ff wachten
Keyboard.releaseAll(); // alle toetsen los
}
Ik kan hem gewoon uploaden, maar er gebeurt niks.
Met een muis-emulatie programmaatje, doet de Nunchuck het wel. De werking kunnen we dus uitsluiten.
Wie kan mij helpen, wat gaat er hier dan toch mis?!
Re: Nunchuck-muis naar WASD keyboard
Kun je vertellen waar je die Nunchuck library vandaan gedownload hebt ? Dan probeer ik om het te compileren.
Ik heb zelf een Pro Micro, en in de Arduino.cc IDE 1.6.13 kies ik de "Arduino/Genuino Micro".
Welke pinnen van je Pro Micro heb je gebruikt voor de I2C ? Pin 2 is de SDA en pin 3 is de SCL.
Dit zijn de aansluitingen : http://www.pighixxx.com/test/2016/07/pro-micro-pinout/.
Heb je een 5V 16MHz Pro Micro, en is de soldeerbrug linksboven gesoldeerd ?
Als ik het goed begrijp, dan gebruik je alleen de 5V en GND, en SDA en SCL, en verder helemaal geen pinnen ?
Volgens mij is het ook nodig om #include <Mouse.h> te doen en is de #include <HID.h> niet nodig.
Je kunt gegevens van de Nunchuck naar de seriële monitor sturen, en je kunt een test sketch maken die iets met het toetsenbord en de muis doet. Dat is hoe je stap voor stap naar iets toe werkt.
Ik kan met de muis en toetsenbord doen wat ik wil, en dat werkt allemaal.
Hiermee kun je testen dat je inderdaad een 16MHz Pro Micro hebt:
Ik heb zelf een Pro Micro, en in de Arduino.cc IDE 1.6.13 kies ik de "Arduino/Genuino Micro".
Welke pinnen van je Pro Micro heb je gebruikt voor de I2C ? Pin 2 is de SDA en pin 3 is de SCL.
Dit zijn de aansluitingen : http://www.pighixxx.com/test/2016/07/pro-micro-pinout/.
Heb je een 5V 16MHz Pro Micro, en is de soldeerbrug linksboven gesoldeerd ?
Als ik het goed begrijp, dan gebruik je alleen de 5V en GND, en SDA en SCL, en verder helemaal geen pinnen ?
Volgens mij is het ook nodig om #include <Mouse.h> te doen en is de #include <HID.h> niet nodig.
Je kunt gegevens van de Nunchuck naar de seriële monitor sturen, en je kunt een test sketch maken die iets met het toetsenbord en de muis doet. Dat is hoe je stap voor stap naar iets toe werkt.
Ik kan met de muis en toetsenbord doen wat ik wil, en dat werkt allemaal.
Hiermee kun je testen dat je inderdaad een 16MHz Pro Micro hebt:
- Code: Alles selecteren
// Test speed of Pro Micro clone.
// Select the Arduino Micro in the IDE (that is a 16MHz ATmega32U4).
// Keep your watch next to the Pro Micro and check if the leds blinks every second.
void setup()
{
pinMode( LED_BUILTIN_TX, OUTPUT);
pinMode( LED_BUILTIN_RX, OUTPUT);
}
void loop()
{
digitalWrite( LED_BUILTIN_TX, LOW);
digitalWrite( LED_BUILTIN_RX, LOW);
delay( 200);
digitalWrite( LED_BUILTIN_TX, HIGH);
digitalWrite( LED_BUILTIN_RX, HIGH);
delay( 800);
}
Re: Nunchuck-muis naar WASD keyboard
Koepel schreef:Kun je vertellen waar je die Nunchuck library vandaan gedownload hebt ? Dan probeer ik om het te compileren.
Ik heb zelf een Pro Micro, en in de Arduino.cc IDE 1.6.13 kies ik de "Arduino/Genuino Micro".
Welke pinnen van je Pro Micro heb je gebruikt voor de I2C ? Pin 2 is de SDA en pin 3 is de SCL.
Dit zijn de aansluitingen : http://www.pighixxx.com/test/2016/07/pro-micro-pinout/.
Heb je een 5V 16MHz Pro Micro, en is de soldeerbrug linksboven gesoldeerd ?
Als ik het goed begrijp, dan gebruik je alleen de 5V en GND, en SDA en SCL, en verder helemaal geen pinnen ?
Volgens mij is het ook nodig om #include <Mouse.h> te doen en is de #include <HID.h> niet nodig.
Je kunt gegevens van de Nunchuck naar de seriële monitor sturen, en je kunt een test sketch maken die iets met het toetsenbord en de muis doet. Dat is hoe je stap voor stap naar iets toe werkt.
Ik kan met de muis en toetsenbord doen wat ik wil, en dat werkt allemaal.
Hiermee kun je testen dat je inderdaad een 16MHz Pro Micro hebt:
- Code: Alles selecteren
// Test speed of Pro Micro clone.
// Select the Arduino Micro in the IDE (that is a 16MHz ATmega32U4).
// Keep your watch next to the Pro Micro and check if the leds blinks every second.
void setup()
{
pinMode( LED_BUILTIN_TX, OUTPUT);
pinMode( LED_BUILTIN_RX, OUTPUT);
}
void loop()
{
digitalWrite( LED_BUILTIN_TX, LOW);
digitalWrite( LED_BUILTIN_RX, LOW);
delay( 200);
digitalWrite( LED_BUILTIN_TX, HIGH);
digitalWrite( LED_BUILTIN_RX, HIGH);
delay( 800);
}
Ten eerste weer mijn hatelijke dank voor je antwoord!
In mijn Arduino IDE heb ik 'Leonardo' geselecteerd. De code heb ik geupload en het LEDje knippert inderdaad om de seconde.
Ik neem dus aan dat het dan de 16MHz versie betreft.
Van de Arduino heb ik de volgende pinnen gebruikt;
Pin2 -> Nunchuck Data
Pin3 -> Nunchuck CLK
*De soldeerbrug heb ik niet gesoldeerd (er staat 'J1' bij). Waar is deze voor?
De Nunchuck Library die ik gebruik, heet Nunchuck_funcs https://github.com/todbot/wiichuck_adapter/blob/master/firmware/WiichuckDemo/nunchuck_funcs.h
Re: Nunchuck-muis naar WASD keyboard
Het forum liep vast, terwijl ik een goed antwoord had geschreven. Dat gebeurt vaker, en het is dan ook niet meer bij de Concepten te vinden Het meeste was trouwens een herhaling van ik al geschreven had. Sorry.
Wat is nu je vraag ?
Kun je vertellen wat je aan het bestand "nunchuck_funcs.h" hebt gewijzigd om het te laten compileren ?
En kun je een sketch geven die compileert ?
Wat is nu je vraag ?
Kun je vertellen wat je aan het bestand "nunchuck_funcs.h" hebt gewijzigd om het te laten compileren ?
En kun je een sketch geven die compileert ?
Re: Nunchuck-muis naar WASD keyboard
Vervelend dat je antwoord verloren is gegaan. Toch heb ik al erg veel aan je hulp.
Mijn vraag is eigenlijk; hoe kan ik de sketch eerder in dit topic gebruiken om mijn Nunchuck te emuleren als W, A, S, D, linker- en rechtermuis.
Ik begrijp niet helemaal wat je bedoelt met het veranderen en compileren van het Nunchuck_funcs.h bestand.
De sketch die eerder in dit topic is gebruikt, heb ik gekopieerd en geplakt in mijn eigen IDE en heb de libraries ervoor gedownload.
Dit is wat ik tot nu toe heb. Het werkt alleen niet (goed)..
Mijn vraag is eigenlijk; hoe kan ik de sketch eerder in dit topic gebruiken om mijn Nunchuck te emuleren als W, A, S, D, linker- en rechtermuis.
Ik begrijp niet helemaal wat je bedoelt met het veranderen en compileren van het Nunchuck_funcs.h bestand.
De sketch die eerder in dit topic is gebruikt, heb ik gekopieerd en geplakt in mijn eigen IDE en heb de libraries ervoor gedownload.
Dit is wat ik tot nu toe heb. Het werkt alleen niet (goed)..
- Code: Alles selecteren
//Brian Krukoski
//April 2012
//red-+5, white-gnd, green-sda, yllw-clck
#include <Keyboard.h>
#include <Wire.h>
#include <nunchuck_funcs.h>
#include <HID.h>
#include <Mouse.h>
int loop_cnt = 0;
// parameters for reading the joystick:
int range = 40; // output range of X or Y movement
int threshold = range / 10; // resting threshold
int center = range / 2; // resting position value
boolean mouseIsActive = false; // whether or not to control the mouse
int lastSwitchState = LOW; // previous switch state
void setup() {
// initilization for the Wiichuck
nunchuck_init();
// take control of the mouse:
Mouse.begin();
Serial.begin(9600);
}
void loop() {
if ( loop_cnt > 10 ) { // every 10 msecs get new data
loop_cnt = 0;
nunchuck_get_data();
int sensorReading = analogRead(A0);
Serial.println(sensorReading);
delay(1);
//right and left click control
int leftState = nunchuck_cbutton();
if (leftState) Mouse.press(MOUSE_RIGHT); else Mouse.release(MOUSE_RIGHT); //Switched with Left
int rightState = nunchuck_zbutton();
if (rightState) Mouse.press(MOUSE_LEFT); else Mouse.release(MOUSE_LEFT); //Switched with Right
// read the x axis
int xReading = nunchuck_joyx(); //calls on nunchuck_funcs library for x axis reading
xReading = map(xReading, 38, 232, 0, range); // 38 and 232 arbitrarily determined through experimentation, maps to 0 and preset range
int xDistance = xReading - center;
if (abs(xDistance) < threshold) //if absolute value of xDistance is less than predefined threshold....
{
xDistance = 0;
}
// read the y axis
int yReading = nunchuck_joyy(); //calls on nunchuck_funcs library for y axis reading
yReading = map(yReading, 38, 232, 0, range); // 38 and 232 arbitrarily determined through experimentation, maps to 0 and preset range
int yDistance = yReading - center;
if (abs(yDistance) < threshold) //if absolute value of yDistance is less than predefined threshold....
{
yDistance = 0;
}
if (xDistance != 0) { // Bij geen beweging niets doen
if (xDistance > 0) {
Keyboard.press('W'); // Stuur 'W'
} else {
Keyboard.press('S'); // Stuur 'S'
}
delay(100); // ff wachten
Keyboard.releaseAll(); // alle toetsen los
}
if (yDistance != 0) { // Bij geen beweging niets doen
if (yDistance > 0) {
Keyboard.press('A'); // stuur 'A'
} else {
Keyboard.press('D'); // stuur 'D'
}
delay(100); // ff wachten
Keyboard.releaseAll(); // alle toetsen los
}
nunchuck_print_data(); //prints nunchuck data to serial monitor for debugging purposes
loop_cnt++;
delay(1);
}
}
Re: Nunchuck-muis naar WASD keyboard
Ik heb Arduino.cc IDE 1.8.0 met een Pro Micro clone. Ik kies als board "Arduino/Genuino Micro".
Het bestand "nunchuck_funcs.h" heb ik van die link die jij gaf, en dat heb ik aan mijn project toegevoegd.
Dat compileert niet. Dus als het bij jou wel compileert, dan is er iets mis. Misschien heb je "nunchuck_funcs.h" twee keer.
Om het wel te laten compileren, heb ik de functie nunchuck_setpowerpins() leeggehaald, alleen de delay(100); heb ik laten staan.
Heb je de #include "nunchuck_funcs.h" gewijzigd naar #include <nunchuck_funcs.h> ? Dus dan staat dat bestand in de "libraries" map ?
In de sketch kun je "#include <HID.h>" weghalen. Dat is niet nodig.
Daarna zou je de gegevens van de nunchuck naar de seriele monitor kunnen schrijven, zodat je kunt zien of het werkt.
Je kun ook een paar Mouse.move doen met delay er tussen om te zien of dat werkt.
Als die beide werken, dan pas kun je de sketch gaan proberen of het met elkaar werkt.
In setup() heb je natuurlijk ook een Keyboard.begin() nodig.
https://www.arduino.cc/en/Reference/KeyboardBegin
De soldeerjumper verbindt de usb_5V met de VCC. Zonder die soldeerjumper werkt de ATmega32U4 op een iets lagere spanning.
Het bestand "nunchuck_funcs.h" heb ik van die link die jij gaf, en dat heb ik aan mijn project toegevoegd.
Dat compileert niet. Dus als het bij jou wel compileert, dan is er iets mis. Misschien heb je "nunchuck_funcs.h" twee keer.
Om het wel te laten compileren, heb ik de functie nunchuck_setpowerpins() leeggehaald, alleen de delay(100); heb ik laten staan.
Heb je de #include "nunchuck_funcs.h" gewijzigd naar #include <nunchuck_funcs.h> ? Dus dan staat dat bestand in de "libraries" map ?
In de sketch kun je "#include <HID.h>" weghalen. Dat is niet nodig.
Daarna zou je de gegevens van de nunchuck naar de seriele monitor kunnen schrijven, zodat je kunt zien of het werkt.
Je kun ook een paar Mouse.move doen met delay er tussen om te zien of dat werkt.
Als die beide werken, dan pas kun je de sketch gaan proberen of het met elkaar werkt.
In setup() heb je natuurlijk ook een Keyboard.begin() nodig.
https://www.arduino.cc/en/Reference/KeyboardBegin
De soldeerjumper verbindt de usb_5V met de VCC. Zonder die soldeerjumper werkt de ATmega32U4 op een iets lagere spanning.
Re: Nunchuck-muis naar WASD keyboard
Sorry voor mijn late reactie..
Ik heb 4 nunchuck libraries (voor verschillende projecten), maar slechts één Nunchuck_funcs.h bestand. Die "setpowerpins" regel heb je waar weggehaald?
Hoe kan ik de gegevens van de nunchuck naar de seriele monitor sturen?
Goed punt van die jumper, zal ze zo direct even verbinden met een druppeltje tin.
Ik heb 4 nunchuck libraries (voor verschillende projecten), maar slechts één Nunchuck_funcs.h bestand. Die "setpowerpins" regel heb je waar weggehaald?
Hoe kan ik de gegevens van de nunchuck naar de seriele monitor sturen?
Goed punt van die jumper, zal ze zo direct even verbinden met een druppeltje tin.
Re: Nunchuck-muis naar WASD keyboard
De nunchuck_setpowerpins() is een functie, en die zit in het bestand nunchuck_funcs.h, en dat heb ik gedownload van die link die jij gaf. Dus als jij dat wel kunt compileren voor een "Arduino/Genuino Micro" en ik niet, dan is er echt iets mis.
Bij deze regel:
Deze code is voor een knop:
Iemand dacht slim te zijn door de if-statement op één regel te zetten, maar dat vind ik helemaal niet slim.
Als je dat anders doet, kun je eenvoudig een Serial.println() toevoegen.
Bij deze regel:
- Code: Alles selecteren
int leftState = nunchuck_cbutton();
Deze code is voor een knop:
- Code: Alles selecteren
int leftState = nunchuck_cbutton();
if (leftState) Mouse.press(MOUSE_RIGHT); else Mouse.release(MOUSE_RIGHT); //Switched with Left
Iemand dacht slim te zijn door de if-statement op één regel te zetten, maar dat vind ik helemaal niet slim.
Als je dat anders doet, kun je eenvoudig een Serial.println() toevoegen.
- Code: Alles selecteren
int leftState = nunchuck_cbutton();
if( leftState) //Switched with Left ?
{
Mouse.press(MOUSE_RIGHT);
Serial.println( "cbutton ingedrukt"); // <--- toegevoegd
}
else
{
Mouse.release(MOUSE_RIGHT);
}
40 berichten
• Pagina 3 van 4 • 1, 2, 3, 4
Wie is er online?
Gebruikers in dit forum: Geen geregistreerde gebruikers en 36 gasten