Go Down

Topic: Trovare tutorial per la seriale (Read 675 times) previous topic - next topic

Elgardo94

Ciao, sono nuovo qui e quindi colgo l'opportunità di presentarmi... Ciao a tutti
Premetto che ho gia provato a cercare nel forum e su San Google.
A me non piace la programmazione a copia e incolla, e vorrei iniziare a usare il nunchuck della Wii con arduino attraverso la seriale.
Io di seriale non so niente e quindi cercavo una guida che spieghi tutte le varie funzioni e come gestire le varie cose...
Sapete dove trovarla?

PaoloP

#1
Apr 30, 2012, 03:46 pm Last Edit: Apr 30, 2012, 03:49 pm by PaoloP Reason: 1
--> http://arduinotutorial.altervista.org/serial/
--> http://www.ladyada.net/learn/arduino/lesson4.html
--> http://arduino.cc/en/Reference/Serial

Elgardo94

Grazie, ma per leggere i valori dal nunchuck come si fa?

leo72


Grazie, ma per leggere i valori dal nunchuck come si fa?


Si va su Google e si fa:
"arduino nunchuck"  ;)

Federico Vanzati

il nunchuck non usa la seriale ma l'i2c. Si tratta sempre di un bus seriale a 2 fili, ma il concetto è diverso.

Quindi dovresti leggere anche il reference della libreria Wire: http://arduino.cc/it/Reference/Wire
F

uwefed



Grazie, ma per leggere i valori dal nunchuck come si fa?

Si va su Google e si fa:
"arduino nunchuck"  ;)

Che sintetico, che sei oggi  ;) ;) ;)
Ciao Uwe

Elgardo94

Ok sto iniziando a capire...
Ho provata a usare un file sorgente che ho trovato su internet, ma mi rileva sempre gli stessi dati da arduino, sapete perchè?

Elgardo94

Ragazzi ho risolto, in pertica quando scrivi Wire.write(0b00); te lo da come abiguo, e io lo avevo modificato.
Invece bisogna fare prima int a=0;
Wire.write(a);
E il gioco è fatto
questo codice funziona con arduino rev3 e IDE 1.0


//
//  nunchuck.pde
//

#include <Wire.h>

uint8_t buf[6];     // buffer for the six-bytes packet coming from Nunchuck
int cnt=0;          // count of bytes in the buffer
int readcnt=0;      // number of times we read a packet from Nunchuck
int ledPin=13;      // which pin will host the blinking LED


uint8_t nunchuk_decode(uint8_t x)   // decode nunchuck data
{
  return (x^0x17)+0x17;             // not that an hard encryption...
}


void nunchuck_ack()                 // acknowledge a Nunchuck packet
{
int a=0;
  Wire.beginTransmission(0x52);     // send a zero to device 0x52
  Wire.write(a);
  Wire.endTransmission();
}


void setup()                        // initialization
{
  int n,a=0;
  digitalWrite(ledPin, HIGH);       // turn on LED
  
  for(n=0; n<6; n++) buf[n]=0;      // fill buffer with zero values
  
  Serial.begin(115200);              // console init

  Wire.begin();                     // TWI init
  
  Wire.beginTransmission(0x52);     // nunchuck init
  Wire.write(0x40);
  Wire.write(a);
  Wire.endTransmission();

  digitalWrite(ledPin, LOW);        // turn off LED
  
  Serial.print("!-- start\n");
}


void loop()                         // main loop
{
  Wire.requestFrom(0x52, 6);        // request data from nunchuck
  while(Wire.available())           // read data and light the LED
  {
    buf[cnt++] = nunchuk_decode(Wire.read());
    digitalWrite(ledPin, HIGH);
  }

  if(cnt>=6)                        // an entire Nunchuck packet was read?
  {
    printdata();                    // yes, print it
    cnt=0;                          // clear buffer counter
    nunchuck_ack();                 // acknowledge received packet
    digitalWrite(ledPin, LOW);      // turn off the LED
    delay(800);                     // wait 800msec before next loop
  }
}


void printdata()                    // print out the values
{
  int n;   // note: the 123,131,524,597... depend on my Nunchuck calibration
 
  Serial.print(++readcnt, DEC);

  Serial.print("\t");               // joystick x/y values
  Serial.print((int)buf[0]-123);
  Serial.print("\t");  
  Serial.print((int)buf[1]-131);
  
  n=(buf[2]<<2)+((buf[5]>>2)&3)-524;  // accel X
  Serial.print("\t");  
  Serial.print(n);

  n=(buf[3]<<2)+((buf[5]>>4)&3)-597;  // accel Y
  Serial.print("\t");  
  Serial.print(n);

  n=(buf[4]<<2)+((buf[5]>>6)&3)-668;  // accel Z
  Serial.print("\t");  
  Serial.print(n);

  Serial.print(buf[5]&1 ? "\t- " : "\t[z] ");
  Serial.print(buf[5]&2 ? "-" : "[c]");

  Serial.print ("\r\n");
}

leo72




Grazie, ma per leggere i valori dal nunchuck come si fa?

Si va su Google e si fa:
"arduino nunchuck"  ;)

Che sintetico, che sei oggi  ;) ;) ;)
Ciao Uwe

Sono impegnato a "giocare" con un display a 7 segmenti e 4 cifre  :P

@Elgardo94:
ti consiglierei di cambiare il titolo alla discussione con uno più consono, se vuoi continuare ad affrontare il problema della comunicazione col Nunchuk via I2C almeno questo thread potrà essere più facilmente trovato in futuro da altri utenti che potrebbero avere lo stesso tuo problema.  ;)

Go Up