Nunchuck-muis naar WASD keyboard

Projecten die niet passen in bovenstaande onderwerpen
Gebruikers-avatar
Berichten: 18
Geregistreerd: 14 Nov 2016, 22:19
Woonplaats: Groningen

Re: Nunchuck-muis naar WASD keyboard

Berichtdoor Klavkjir » 24 Dec 2016, 20:17

Ik heb nog eens gekeken naar die Nunchuck_funcs van de link die ik je heb gestuurd, maar waarschijnlijk heb ik dan toch een andere.
Onderstaande code heb ik gekopieerd uit het Nunchuck_funcs.h bestandje.

Echter compileert deze bij mij ook niet. Kan dat kloppen?

Code: Alles selecteren
/*
 * Nunchuck functions  -- Talk to a Wii Nunchuck
 *
 * This library is from the Bionic Arduino course :
 *                          http://todbot.com/blog/bionicarduino/
 *
 * 2007-11 Tod E. Kurt, http://todbot.com/blog/
 *
 * The Wii Nunchuck reading code originally from Windmeadow Labs
 *   http://www.windmeadow.com/node/42
 */

#if (ARDUINO >= 100)
#include <Arduino.h>
#include <Wire.h>

#else
#include <WProgram.h>
#define Wire.write(x) Wire.send(x)
#define Wire.read() Wire.receive()
#endif



static uint8_t nunchuck_buf[6];   // array to store nunchuck data,



// initialize the I2C system, join the I2C bus,
// and tell the nunchuck we're talking to it
static void nunchuck_init()
{
    Wire.begin();                // join i2c bus as master
    Wire.beginTransmission(0x52);// transmit to device 0x52
#if (ARDUINO >= 100)
    Wire.write((uint8_t)0x40);// sends memory address
    Wire.write((uint8_t)0x00);// sends sent a zero. 
#else
    Wire.send((uint8_t)0x40);// sends memory address
    Wire.send((uint8_t)0x00);// sends sent a zero. 
#endif
    Wire.endTransmission();// stop transmitting
}

// Send a request for data to the nunchuck
// was "send_zero()"
static void nunchuck_send_request()
{
    Wire.beginTransmission(0x52);// transmit to device 0x52
#if (ARDUINO >= 100)
    Wire.write((uint8_t)0x00);// sends one byte
#else
    Wire.send((uint8_t)0x00);// sends one byte
#endif
    Wire.endTransmission();// stop transmitting
}

// Encode data to format that most wiimote drivers except
// only needed if you use one of the regular wiimote drivers
static char nunchuk_decode_byte (char x)
{
    x = (x ^ 0x17) + 0x17;
    return x;
}

// Receive data back from the nunchuck,
// returns 1 on successful read. returns 0 on failure
static int nunchuck_get_data()
{
    int cnt=0;
    Wire.requestFrom (0x52, 6);// request data from nunchuck
    while (Wire.available ()) {
        // receive byte as an integer
#if (ARDUINO >= 100)
        nunchuck_buf[cnt] = nunchuk_decode_byte( Wire.read() );
#else
        nunchuck_buf[cnt] = nunchuk_decode_byte( Wire.receive() );
#endif
        cnt++;
    }
    nunchuck_send_request();  // send request for next data payload
    // If we recieved the 6 bytes, then go print them
    if (cnt >= 5) {
        return 1;   // success
    }
    return 0; //failure
}

// Print the input data we have recieved
// accel data is 10 bits long
// so we read 8 bits, then we have to add
// on the last 2 bits.  That is why I
// multiply them by 2 * 2
static void nunchuck_print_data()
{
    static int i=0;
    int joy_x_axis = nunchuck_buf[0];
    int joy_y_axis = nunchuck_buf[1];
    int accel_x_axis = nunchuck_buf[2]; // * 2 * 2;
    int accel_y_axis = nunchuck_buf[3]; // * 2 * 2;
    int accel_z_axis = nunchuck_buf[4]; // * 2 * 2;

    int z_button = 0;
    int c_button = 0;

    // byte nunchuck_buf[5] contains bits for z and c buttons
    // it also contains the least significant bits for the accelerometer data
    // so we have to check each bit of byte outbuf[5]
    if ((nunchuck_buf[5] >> 0) & 1)
        z_button = 1;
    if ((nunchuck_buf[5] >> 1) & 1)
        c_button = 1;

    if ((nunchuck_buf[5] >> 2) & 1)
        accel_x_axis += 2;
    if ((nunchuck_buf[5] >> 3) & 1)
        accel_x_axis += 1;

    if ((nunchuck_buf[5] >> 4) & 1)
        accel_y_axis += 2;
    if ((nunchuck_buf[5] >> 5) & 1)
        accel_y_axis += 1;

    if ((nunchuck_buf[5] >> 6) & 1)
        accel_z_axis += 2;
    if ((nunchuck_buf[5] >> 7) & 1)
        accel_z_axis += 1;

    Serial.print(i,DEC);
    Serial.print("\t");

    Serial.print("joy:");
    Serial.print(joy_x_axis,DEC);
    Serial.print(",");
    Serial.print(joy_y_axis, DEC);
    Serial.print("  \t");

    Serial.print("acc:");
    Serial.print(accel_x_axis, DEC);
    Serial.print(",");
    Serial.print(accel_y_axis, DEC);
    Serial.print(",");
    Serial.print(accel_z_axis, DEC);
    Serial.print("\t");

    Serial.print("but:");
    Serial.print(z_button, DEC);
    Serial.print(",");
    Serial.print(c_button, DEC);

    Serial.print("\r\n");  // newline
    i++;
}

// returns zbutton state: 1=pressed, 0=notpressed
static int nunchuck_zbutton()
{
    return ((nunchuck_buf[5] >> 0) & 1) ? 0 : 1;  // voodoo
}

// returns zbutton state: 1=pressed, 0=notpressed
static int nunchuck_cbutton()
{
    return ((nunchuck_buf[5] >> 1) & 1) ? 0 : 1;  // voodoo
}

// returns value of x-axis joystick
static int nunchuck_joyx()
{
    return nunchuck_buf[0];
}

// returns value of y-axis joystick
static int nunchuck_joyy()
{
    return nunchuck_buf[1];
}

// returns value of x-axis accelerometer
static int nunchuck_accelx()
{
    return nunchuck_buf[2];   // FIXME: this leaves out 2-bits of the data
}

// returns value of y-axis accelerometer
static int nunchuck_accely()
{
    return nunchuck_buf[3];   // FIXME: this leaves out 2-bits of the data
}

// returns value of z-axis accelerometer
static int nunchuck_accelz()
{
    return nunchuck_buf[4];   // FIXME: this leaves out 2-bits of the data
}

Advertisement

Gebruikers-avatar
Berichten: 2655
Geregistreerd: 06 Aug 2016, 01:03

Re: Nunchuck-muis naar WASD keyboard

Berichtdoor Koepel » 24 Dec 2016, 20:42

Die compileert wel.
Ik heb geen 'nunchuck_funcs.h' in mijn custom 'libraries' map. Ik voegde het toe aan mijn project. Ik heb Arduino 1.8.0 en ik kies "Arduino/Genuino Micro" als board.
In de sketch verwijderde ik #include <HID.h> en ik wijzigde de include naar #include "nunchuck_funcs.h"

Ik zie nu dat er een functie nunchuck_print_data() bij zit. Kun je die af en toe aanroepen ?

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

Re: Nunchuck-muis naar WASD keyboard

Berichtdoor Klavkjir » 27 Dec 2016, 16:06

Koepel schreef:Die compileert wel.
Ik heb geen 'nunchuck_funcs.h' in mijn custom 'libraries' map. Ik voegde het toe aan mijn project. Ik heb Arduino 1.8.0 en ik kies "Arduino/Genuino Micro" als board.
In de sketch verwijderde ik #include <HID.h> en ik wijzigde de include naar #include "nunchuck_funcs.h"

Ik zie nu dat er een functie nunchuck_print_data() bij zit. Kun je die af en toe aanroepen ?

Op jouw aanraden heb ik dezelfde versie van Arduino gedownload, maar ik krijg de volgende foutmelding als ik de "Nunchuck_funcs" code probeer te compileren:

Code: Alles selecteren
Arduino: 1.8.0 (Windows 8.1), Board:"Arduino/Genuino Micro"

C:\Users\AppData\Local\Temp\ccScb0r3.ltrans0.ltrans.o: In function `main':

D:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/main.cpp:43: undefined reference to `setup'

D:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/main.cpp:46: undefined reference to `loop'

collect2.exe: error: ld returned 1 exit status

exit status 1
Fout bij het compileren van board Arduino/Genuino Micro

This report would have more information with
"Show verbose output during compilation"
option enabled in File -> Preferences.

Gebruikers-avatar
Berichten: 2655
Geregistreerd: 06 Aug 2016, 01:03

Re: Nunchuck-muis naar WASD keyboard

Berichtdoor Koepel » 27 Dec 2016, 18:36

Kun je het "Blink" voorbeeld compileren.
Heb je nu (stukken van) meerdere Arduino IDE versies door elkaar ?

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

Re: Nunchuck-muis naar WASD keyboard

Berichtdoor Klavkjir » 27 Dec 2016, 20:26

De nieuwe versie van Arduino heeft de oude versie vervangen.

Zojuist heb ik het Blink programmaatje geüpload en een ledje op Pin 14 gezet. Dat doet het allemaal gewoon!

Gebruikers-avatar
Berichten: 2655
Geregistreerd: 06 Aug 2016, 01:03

Re: Nunchuck-muis naar WASD keyboard

Berichtdoor Koepel » 28 Dec 2016, 11:05

Het kan zijn dat het nodig is om eventueel alles van de Arduino IDE verwijderen (niet je eigen projecten natuurlijk) en dan ook de verborgen arduino15 map verwijderen. Daarna Arduino opnieuw installeren. Maar ik denk dat het niet nodig is en dat er iets anders aan de hand is.

Kijk eens in je custom 'libraries' map. Die zit bij je projecten in C: \ Mijn documenten \ Arduino
Waar wil je het "nunchuck_funcs.h" bestand, bij de libraries of in je project. Neem een beslissing en zorg dat het maar één keer ergens staat. Wanneer het alleen in je project staat, dan geldt het alleen voor dat project. Dan kun je het wel toevoegen aan andere projecten, en dat kan dat zelfs een andere versie van "nunchuck_funcs.h" zijn.

Wanneer je verschillende libraries gebruikt die hetzelfde zijn, geef ze dan een andere naam. Zowel de map als de bestanden.

Of heb je misschien de Nunchuck_funcs gecompileert, terwijl dat alleen de library was en geen sketch ?

Het lijkt me nodig dat je alles even controleert, en stap voor stap verder probeert te komen. Het wordt nu een beetje te rommelig en het ontbreekt aan duidelijkheid.
Wanneer ik pannenkoeken bak, dan gooi ik de ingrediënten bij elkaar zonder ze te wegen (tip: ik voeg wat havermout en bier toe). Maar op die manier kun je niet code schrijven. Het schrijven van code is bijna wiskunde en dan is het belangrijk om duidelijk en clean en strak te werken.

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

Re: Nunchuck-muis naar WASD keyboard

Berichtdoor Klavkjir » 30 Dec 2016, 20:55

Wanneer je verschillende libraries gebruikt die hetzelfde zijn, geef ze dan een andere naam. Zowel de map als de bestanden.

Goed punt! Daar was ik helemaal niet van op de hoogte. De map 'libraries' in 'Mijn Documenten' is vrijwel leeg, op een mapje 'Mitov' na. Ik vermoed dat dit een standard mapje is van Arduino?

Of heb je misschien de Nunchuck_funcs gecompileert, terwijl dat alleen de library was en geen sketch ?

Ik begrijp niet helemaal wat je bedoelt, maar denk dat dat het geval geweest is. De tekst uit het bestandje 'Nunchuck_funcs.h' heb ik gekopieerd en geplakt in een nieuw venster van de Arduino IDE. Daarna heb ik hem geprobeerd te verifiëren. Is dit wat de fout was, waardoor ik die foutmelding kreeg?

Het lijkt me nodig dat je alles even controleert, en stap voor stap verder probeert te komen. Het wordt nu een beetje te rommelig en het ontbreekt aan duidelijkheid
Daar ben ik het helemaal mee eens. Fijn dat je me zo probeert te helpen!

Gebruikers-avatar
Berichten: 2655
Geregistreerd: 06 Aug 2016, 01:03

Re: Nunchuck-muis naar WASD keyboard

Berichtdoor Koepel » 30 Dec 2016, 23:21

Zelf gebruik ik ook vaak meerdere tabbladen. De 'Nunchuck_funcs.h' kun je in z'n geheel in een apart tabblad zetten. Dan zit het bij je project.
Maar dan heb je alsnog een sketch nodig, want de 'Nunchuck_funcs.h' heeft een paar functies, maar is op zichzelf geen complete sketch.

Je bedoelt de map "libraries" in de map "Mijn Documenten \ Arduino" ? Dat zijn de libraries die je zelf installeert. Ik kan geen Arduino library vinden die "Mitov" heet, dus dat zal misschien iets anders zijn.

Stel je hebt een project met Arduino bestand "Pipo.ino". Dan krijg je een map "Mijn Documenten \ Arduino \ Pipo" met daarin het bestand "Pipo.ino".
De libraries die je zelf installeert zitten in "Mijn Documenten \ Arduino \ libraries". Dat is dus naast al je projecten, op hetzelfde map niveau.
https://www.arduino.cc/en/Guide/Libraries

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

Re: Nunchuck-muis naar WASD keyboard

Berichtdoor Klavkjir » 31 Dec 2016, 02:01

De 'Nunchuck_funcs.h' kun je in z'n geheel in een apart tabblad zetten. Dan zit het bij je project.

Nu ik dit gedaan heb, compileert hij eindelijk! Het eerste ingredient van het pannenkoekenbeslag.

De code in het begin van dit topic, heb ik geupload op de Arduino Micro. Echter gebeurt er in de seriële monitor helemaal niks.
Of loop ik nu op de zaken vooruit?

Gebruikers-avatar
Berichten: 2655
Geregistreerd: 06 Aug 2016, 01:03

Re: Nunchuck-muis naar WASD keyboard

Berichtdoor Koepel » 31 Dec 2016, 10:24

De Arduino Micro heeft een ATmega32U4 microcontroller en die werkt iets anders met de seriële monitor. Het deel dat zich als seriële poort voor doet zit in de ATmega32U4 zelf en is maar een halfzachte (maar heel flexibele) interpretatie van een seriële monitor.

Vaak zie je dit:
Code: Alles selecteren
void setup()
{
  Serial.begin( 9600);
  while( !Serial);   // wait for the serial monitor to open for Leonardo and Micro.
  ...
}
Daarmee wacht de sketch totdat de seriële monitor wordt geopend op de computer. Dat is leuk, maar dat betekent dat wanneer je een definitieve versie hebt, die niet met een computer is verbonden, dat de sketch daar stopt en nooit verder gaat.

Dus tijdens het ontwikkelen van de sketch kun je die while(!Serial); doen. Als je er maar aan denkt dat de sketch echt niet verder gaat wanneer je de seriële monitor niet opent.
Ik weet niet precies wat er gebeurt als je dat niet doet, maar meestal gaan dan de Serial.println verloren.
Eventueel is het mogelijk om een minuut lang te wachten en dan alsnog door te gaan.

Vorige

Terug naar Overige projecten

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 13 gasten