- SF800 Solar Speicher Tutorial         
Ergebnis 1 bis 10 von 49

Thema: Wii Nunchuck an Arduino

Baum-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #10
    HaWe
    Gast
    Update:

    dieser Code funktioniert bei einem Arduino Uno und Mega, aber NICHT bei einem Arduino Due (M3) oder Adafruit M4, dort ständig Fehlmessungen:
    periodisch immer solche Blöcke:
    Code:
    Data,255,255,255,255,255,0,0
    Data,255,255,255,255,255,0,0
    Data,255,255,255,255,255,0,0
    Data,255,255,255,255,255,0,0
    Data,255,255,255,255,255,0,0
    Data,255,255,255,255,255,0,0
    Data,255,255,255,255,255,0,0
    ohne mein Zutun dann plötzlich:
    Code:
    Data,255,255,255,255,255,0,100
    Data,0,0,0,0,0,100,100
    Data,0,0,0,0,1,100,100
    Data,32,0,0,0,0,100,100
    Data,0,0,3,0,0,100,100
    Data,0,0,0,0,0,100,100
    Data,0,0,0,0,255,0,0
    Data,255,255,255,255,255,0,0
    Data,255,255,125,129,127,100,0
    Data,176,181,177,59,226,0,100
    Data,125,228,31,125,41,100,0
    Data,125,129,127,10,176,0,100
    Data,177,59,226,29,125,100,100
    Data,31,125,41,126,255,0,0
    dann danach plötzlich wieder ohne mein Zutun:
    Code:
    Data,255,255,255,255,255,0,0
    Data,255,255,255,255,255,0,0
    Data,255,255,255,255,255,0,0
    Data,255,255,255,255,255,0,0
    Data,255,255,255,255,255,0,0
    Data,255,255,255,255,255,0,0
    Data,255,255,255,255,255,0,0
    und absolut keine Beeinflussung der Ausgaben durch Tastendrücke, Potibewegung oder Wii-Bewegung


    Sourcecode:
    Code:
    /*
     *  Nunchuk auslesen
     *
     *  funktioniert mit original Nunchuck
     *  UND mit Wirelesse Nunchuck
     *
     *  Pinbelegung:
     *      3.3V  (Kabel rot)
     *      GND   (Kabel weiß)
     *      A4    (Kabel grün)
     *      A5    (Kabel gelb)
     */
    
    #include <Wire.h>
    
    const int dataLength = 6;             //  numer ob bytes to request
    static byte rawData[dataLength];      //  array to store nunchuck data
    
    //  construct to create an enumerated list of the sonsor values returned from the nunchuck
    enum nunchuckItems  {  joyX, joyY, accelX, accelY, accelZ, btnZ, btnC };
    
    void setup()
    {
        Serial.begin(57600);
        delay(500);
        Serial.println("Labels,Xjoy,Yjoy,Xaccel,Yaccel,Zaccel,Z-btn,C-btn,");
        delay(500);
       
        nunchuckInit();
    }
    
    void loop()
    {
      if (nunchuckRead() == true)
     {
        Serial.print("Data,");          // Data-Header
        Serial.print(getValue(joyX), DEC);
        Serial.write(",");
        Serial.print(getValue(joyY), DEC);
        Serial.write(",");
        Serial.print(getValue(accelX), DEC);
        Serial.write(",");
        Serial.print(getValue(accelY), DEC);
        Serial.write(",");
        Serial.print(getValue(accelZ), DEC);
        Serial.write(",");
        Serial.print(getValue(btnZ), DEC);
        Serial.write(",");
        Serial.print(getValue(btnC), DEC);
        // Serial.write(",0");
        // Serial.write("\n");
        Serial.println();
     }   
        delay(20);     // time between redraws
    }
    
    void nunchuckInit() 
    {
        Wire.begin();                  //  join I2C bus as master
        Wire.beginTransmission(0x52);  //  transmit to device 0x52
        Wire.write((byte)0xF0);        //  send memory adress
        Wire.write((byte)0x55);        //  send a zero
        if (Wire.endTransmission() == 0)  {   
             Wire.beginTransmission(0x52);  //  transmit to device 0x52
             Wire.write((byte)0xA5);        //  send memory adress
             Wire.write((byte)0x00);
        }     //  stop transmission
    }
    
    
    //  send a request for data to the nunchuck
    static void nunchuckRequest()
    {
        Wire.beginTransmission(0x52);    //  transmit to device 0x52
        Wire.write((byte)0x00);          //  send one byte
        Wire.endTransmission();          //  stop transmission
    }
    
    
    //  receive data back from the nunchuck,
    //  returns true if read successful, else false
    boolean nunchuckRead()
    {
        int cnt=0;
        Wire.requestFrom (0x52, dataLength);    //  request data from nunchuck
        while (Wire.available ())  {
            rawData[cnt] = Wire.read();
            cnt++;
        }
        nunchuckRequest();      //  send request for next dat payload
        if (cnt >= dataLength)
            return true;        //  success if all 6 bytes received
        else
            return false;       //  failure
    }
    
    
    //  encode data to format that most wiimote drivers accept
    // static char nunchuckDecode (byte x)  {
        // return (x ^ 0x17) + 0x17;
    //    return x;
    // }
    
    
    int getValue(int item)   {
        if (item <= accelZ)
            return (int)rawData[item];
        else if (item == btnZ)
            return bitRead(rawData[5], 0) ? 0: 100;
        else if (item == btnC)
            return bitRead(rawData[5], 1) ? 0: 100;
    }
    Nachdem alle anderen bisher von mir verwendeten i2c-Geräte (OLED SSD1306, MPU6050, CMPS11, CMPS12, BME280, BMP280, PCF8574, MCP9808, ADS1115) auf allen meinen ARMs (Due=M3, Itsybitsy M0, Feather M4) funktionieren, auch bei jeder Bus-Geschwindigkeit (insb. 100kHz und 400kHz), und der Scanner auch alle Geräte findet, kann es nicht an der i2c-Verbindung oder dem i2c-Bus liegen, und nachdem der Nunchuk an AVR mit dem Code läuft, sind auch der Nunchuk ok und auch der Code grundsätzlich ok.
    Was sein kann wegen AVR/ARM Unterschieden, ist:
    die ARMs laufen mit 3.3v, allerdings ist auch der Nunchuk für 3.3V ausgelegt (5V sind an sich zu hoch, werden aber wohl toleriert).
    AVRs verwenden als "char" signed char, während ARMs bei "char" unsigned char verwenden.
    Ich sehe aber noch nicht, wo das im Code (zB. dem obigen) zu Konflikten führen könnte.

    Was jetzt weiterhelfen würde zur Bestätigung und zum Debuggen:

    wenn jemand einen funktionierenden Nunchuk besitzt und einen Arduino Due (oder Adafruit M4) und dann guckt, ob er meine Fehlmessungen z.B. mit dem Code von uxomm bestätigen kann.
    Geändert von HaWe (08.04.2019 um 08:57 Uhr) Grund: 5V

Ähnliche Themen

  1. Wii Nunchuck I2C an Raspberry Pi
    Von wassy92x im Forum Allgemeines zum Thema Roboter / Modellbau
    Antworten: 0
    Letzter Beitrag: 27.01.2015, 15:24
  2. Nunchuck auslesen
    Von Snaper im Forum Sensoren / Sensorik
    Antworten: 12
    Letzter Beitrag: 28.02.2012, 09:45
  3. Wii Motion Plus - Nunchuck Passthrough Mode
    Von Che Guevara im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 4
    Letzter Beitrag: 19.10.2011, 19:36
  4. Nunchuck mit Gyroskopen
    Von RobertM im Forum Microcontroller allgemeine Fragen/Andere Microcontroller
    Antworten: 1
    Letzter Beitrag: 21.12.2008, 16:40
  5. Nunchuck über i2c Ausleseprobleme (wohl Nunchukseitig)
    Von ustech im Forum AVR Hardwarethemen
    Antworten: 6
    Letzter Beitrag: 05.10.2008, 23:56

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Solar Speicher und Akkus Tests