- 3D-Druck Einstieg und Tipps         
Ergebnis 1 bis 4 von 4

Thema: Wii Motion Plus mit Arduino auslesen

  1. #1

    Wii Motion Plus mit Arduino auslesen

    Anzeige

    Powerstation Test
    Hallo zusammen

    Bin neu hier und muss als erstes euer Forum loben!!! Echt TOP!!!

    Ich versuche grade krampfhaft an mein Arduino Werte aus dem Wii Motion Plus heraus zu bringen.

    Dazu suchte ich einen Code der nur den Winkel ausgibt. Da ich noch keine Erfahrungen mit I2C habe, versuche ich so es langsam zu verstehen.

    Dabei fand ich folgenden Code:

    #include <SoftwareSerial.h>
    #include <Wire.h>

    byte data[6];
    int gier; //Daten vom AD-Wandler
    int roll;
    int nick;

    void setup()
    {
    Serial.begin(9600);
    Wire.begin(); //WiiMo ein
    Wire.beginTransmission(0x53); //WiiMo starten und Adresse 0x53 deaktivieren
    Wire.send(0xFE); //0x04 zur Addresse 0xFE senden zur Aktivierung
    Wire.send(0x04);
    Wire.endTransmission(); //WiiMo jetzt Addresse 0x52 aktiv
    delay(30);
    }

    void loop()
    {
    //roll, nick und gier einlesen
    Wire.beginTransmission(0x52); //Null senden
    Wire.send(0x00);
    Wire.endTransmission();

    Wire.requestFrom(0x52,6); //6 Bytes lesen
    for (int i=0;i<6;i++)
    {
    data[i]=Wire.receive();
    }

    //zusammensetzen
    gier = ((data[3] / 4)<< + data[0];
    roll = ((data[4] / 4)<< + data[1];
    nick = ((data[5] / 4)<< + data[2];

    //ausgeben
    Serial.print(roll);
    Serial.print(" ");
    Serial.print(nick);
    Serial.print(" ");
    Serial.print(gier);
    Serial.println();
    delay(10);
    }



    Dabei kam aber immer einen Fehler raus, sodass ich den Code gar nicht auf Arduino laden konnte


    Dieser sah folgenermassen aus:


    /Applications/Arduino.app/Contents/Resources/Java/hardware/tools/avr/bin/avr-g++ -c -g -Os -Wall -fno-exceptions -ffunction-sections -fdata-sections -mmcu=atmega168 -DF_CPU=16000000L -DARDUINO=100 -I/Applications/Arduino.app/Contents/Resources/Java/hardware/arduino/cores/arduino -I/Applications/Arduino.app/Contents/Resources/Java/hardware/arduino/variants/eightanaloginputs -I/Applications/Arduino.app/Contents/Resources/Java/libraries/SoftwareSerial -I/Applications/Arduino.app/Contents/Resources/Java/libraries/Wire /var/folders/vn/5hwp46ws6qsgpzwkxxvwrrd40000gn/T/build1082119935771231009.tmp/sketch_jan13c.cpp -o/var/folders/vn/5hwp46ws6qsgpzwkxxvwrrd40000gn/T/build1082119935771231009.tmp/sketch_jan13c.cpp.o
    sketch_jan13c.cpp: In function 'void setup()':
    sketch_jan13c:26: error: 'class TwoWire' has no member named 'send'

    As of Arduino 1.0, the Wire.send() function was renamed to Wire.write() for consistency with other libraries.

    sketch_jan13c:28: error: 'class TwoWire' has no member named 'send'

    As of Arduino 1.0, the Wire.send() function was renamed to Wire.write() for consistency with other libraries.

    sketch_jan13c.cpp: In function 'void loop()':
    sketch_jan13c:46: error: 'class TwoWire' has no member named 'send'

    As of Arduino 1.0, the Wire.send() function was renamed to Wire.write() for consistency with other libraries.

    sketch_jan13c:58: error: 'class TwoWire' has no member named 'receive'

    As of Arduino 1.0, the Wire.receive() function was renamed to Wire.read() for consistency with other libraries.



    Ich komme nicht weiter

    hab mir jetzt schon ein Buch bestellt das mir weiterhelfen soll. Jedoch dauert das noch ne weile... Habe jedoch im Moment Ferien und würde gerne bei meinem Projekt weiter kommen.

    Kann mir jemand helfen???

    Besten Dank
    gruss freesmile


    P.S. ich hoffe ich habe es am richtigen Ort gepostet

  2. #2
    Erfahrener Benutzer Roboter Genie Avatar von m.a.r.v.i.n
    Registriert seit
    24.07.2005
    Ort
    Berlin
    Beiträge
    1.247
    Hallo,
    dein Post ist zwar im falschen Forum gelandet, antworte dir aber trotzdem.

    Du verwendest die neue Arduino Version 1.0. Dort haben sich einige Befehle und Funktionen geändert. Deshalb funktionieren viele alte Sketche nicht.

    Wire.send heisst jetzt Wire.write
    Wire.receive heisst jetzt Wire.read

    Das steht alles auch schon so in den Fehlermeldungen drin.

    Grüße

  3. #3
    Besten Dank für die Info, Suche demnächst mal ne Lieste mit allen Änderungen zur Version 1.0

    Habe nun alle Befehle geändert, jedoch kommt nochmal ein Fehler :/

    Der korrigierte Sketche:

    #include <SoftwareSerial.h>

    #include <Wire.h>



    byte data[6];

    int gier; //Daten vom AD-Wandler

    int roll;

    int nick;



    void setup()

    {

    Serial.begin(9600);

    Wire.begin(); //WiiMo ein

    Wire.beginTransmission(0x53); //WiiMo starten und Adresse 0x53 deaktivieren

    Wire.write(0xFE); //0x04 zur Addresse 0xFE senden zur Aktivierung

    Wire.write(0x04);

    Wire.endTransmission(); //WiiMo jetzt Addresse 0x52 aktiv

    delay(30);

    }



    void loop()

    {

    //roll, nick und gier einlesen

    Wire.beginTransmission(0x52); //Null senden

    Wire.write(0x00);

    Wire.endTransmission();



    Wire.requestFrom(0x52,6); //6 Bytes lesen

    for (int i=0;i<6;i++)

    {

    data[i]=Wire.read();

    }



    //zusammensetzen

    gier = ((data[3] / 4)<< + data[0];

    roll = ((data[4] / 4)<< + data[1];

    nick = ((data[5] / 4)<< + data[2];



    //ausgeben

    Serial.print(roll);

    Serial.print(" ");

    Serial.print(nick);

    Serial.print(" ");

    Serial.print(gier);

    Serial.println();

    delay(10);

    }


    Die Fehlermeldung:

    /Applications/Arduino.app/Contents/Resources/Java/hardware/tools/avr/bin/avr-g++ -c -g -Os -Wall -fno-exceptions -ffunction-sections -fdata-sections -mmcu=atmega168 -DF_CPU=16000000L -DARDUINO=100 -I/Applications/Arduino.app/Contents/Resources/Java/hardware/arduino/cores/arduino -I/Applications/Arduino.app/Contents/Resources/Java/hardware/arduino/variants/eightanaloginputs -I/Applications/Arduino.app/Contents/Resources/Java/libraries/SoftwareSerial -I/Applications/Arduino.app/Contents/Resources/Java/libraries/Wire /var/folders/vn/5hwp46ws6qsgpzwkxxvwrrd40000gn/T/build1082119935771231009.tmp/sketch_jan13c.cpp -o/var/folders/vn/5hwp46ws6qsgpzwkxxvwrrd40000gn/T/build1082119935771231009.tmp/sketch_jan13c.cpp.o
    sketch_jan13c.cpp: In function 'void loop()':
    sketch_jan13c:46: error: call of overloaded 'write(int)' is ambiguous
    /Applications/Arduino.app/Contents/Resources/Java/libraries/Wire/Wire.h:55: note: candidates are: virtual size_t TwoWire::write(uint8_t)
    /Applications/Arduino.app/Contents/Resources/Java/hardware/arduino/cores/arduino/Print.h:49: note: size_t Print::write(const char*)



    Ich hoffe wenn ich das Buch bekommen habe, werde ich etwas konstruktievere Beiträge erfassen. Bitte um entschuldigung...

    grüssse freesmile

  4. #4
    Erfahrener Benutzer Roboter Genie Avatar von m.a.r.v.i.n
    Registriert seit
    24.07.2005
    Ort
    Berlin
    Beiträge
    1.247
    Hallo,

    du solltest dir angewöhnen, Code Beispiele in die entsprechenden Code tags (# symbol im Visu Editor) zu setzen. Das macht das Ganze besser lesbar.
    Hier mal dein Beispiel, das sich fehlerfrei unter Arduino 1.0 übersetzen läßt.
    Code:
    #include <inttypes.h>
    #include <SoftwareSerial.h>
    #include <Wire.h>
    
    byte data[6];
    int gier; //Daten vom AD-Wandler
    int roll;
    int nick;
    
    void setup()
    {
      Serial.begin(9600);
      Wire.begin(); //WiiMo ein
      Wire.beginTransmission(0x53); //WiiMo starten und Adresse 0x53 deaktivieren
      Wire.write(0xFE); //0x04 zur Addresse 0xFE senden zur Aktivierung
      Wire.write(0x04);
      Wire.endTransmission(); //WiiMo jetzt Addresse 0x52 aktiv
      delay(30);
    }
    
    void loop()
    {
      //roll, nick und gier einlesen
      Wire.beginTransmission(0x52); //Null senden
      Wire.write((byte)0x00);
      Wire.endTransmission();
    
      Wire.requestFrom(0x52,6); //6 Bytes lesen
      for (int i=0;i<6;i++)
      {
        data[i]=Wire.read();
      }
    
      //zusammensetzen
      gier = ((data[3] / 4)<< + data[0]);
      roll = ((data[4] / 4)<< + data[1]);
      nick = ((data[5] / 4)<< + data[2]);
    
      //ausgeben
      Serial.print(roll);
      Serial.print(" ");
      Serial.print(nick);
      Serial.print(" ");
      Serial.print(gier);
      Serial.println();
      delay(10);
    }
    Der Fehler lag in der Zeile
    Code:
      Wire.write(0x00);
    weis der Kuckuck warum der Compiler gerade hier über die 0x00 stolpert, weil er meint das sei ein integer Wert.

Ähnliche Themen

  1. [ERLEDIGT] [ARDUINO] 2 Motoren + Servo mit dem Arduino Uno steuern
    Von Torrentula im Forum C - Programmierung (GCC u.a.)
    Antworten: 0
    Letzter Beitrag: 31.08.2011, 17:31
  2. >Wii Motion Plus< - Robotik tauglich?
    Von Jango1987 im Forum Sensoren / Sensorik
    Antworten: 14
    Letzter Beitrag: 25.07.2011, 17:23
  3. ARDUINO ARDUINO l293D + MegaservoLib
    Von m1ch15inner im Forum Microcontroller allgemeine Fragen/Andere Microcontroller
    Antworten: 2
    Letzter Beitrag: 11.07.2011, 12:50
  4. wii motion plus
    Von hman13 im Forum Sensoren / Sensorik
    Antworten: 6
    Letzter Beitrag: 06.04.2010, 18:32
  5. Wii-Motion-Plus in Bascom ansteuern
    Von poolmicha im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 9
    Letzter Beitrag: 31.01.2010, 18:56

Stichworte

Berechtigungen

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

Labornetzteil AliExpress