Ciao a tutti!
Sono nuovo del forum, ho comprato da un mesetto Arduino e devo dire che mi ha aperto un mondo!
Non sapevo nulla (e tutt'ora ne so pochissimo) di elettronica, ma mi ha dato la spinta per interessarmi a fondo dell'argomento e iniziare
a divertirmi ![]()
Sono riuscito a mettere in piedi un piccolo rover casalingo, prima facendo alcune prove con sensori e facendolo girare per la stanza autonomamente,
e fin qui tutto ok!
Il passo successivo è stato comprare un adattatore per nunchuck da collegare ad arduino....ho trovato del codice in internet per ricevere il segnale
e sembra funzionare... l'unico problema è che l'input dal nunchuck (avanti, indietro, ruota e vai avanti ecc..) viene eseguito con un leggero ritardo, e a volte
addirittura inizia a fare ciò vuole, va avanti da solo o cose così...mentre altre volte risponde agli input.
Come ho scritto prima, ho preso il codice che gestisce il segnale del nunchuck da un esempio di un ragazzo su internet, e l'ho riadattato per le mie
esigenze, quindi sicuramente può essere che ho scritto del codice "sporco" che non sempre riesce ad essere eseguito in maniera corretta.
Vi posto il codice, così se per cortesia potreste dirmi dove "sbaglio", o se avete qualche consiglio da darmi, mi fareste un enorme favore!!
Grazie ciao a tutti ![]()
#include <Servo.h>
#include <Wire.h>
int zero = 0;
** Servo servoSensori;**
** Servo servoDirezionale;**
** uint8_t buf[6]; **
** int cnt=0; **
** int readcnt=0; **
** int ledPin=13; **
** int motore1a = 2;**
** int motore1b = 3;**
** int motore2a = 4;**
** int motore2b = 5;**
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
{
** Wire.beginTransmission(0x52); // send a zero to device 0x52**
** Wire.send(0);**
** Wire.endTransmission();**
}
void setup()
{
** pinMode(motore1a, OUTPUT); //motore 1**
** pinMode(motore1b, OUTPUT);**
** pinMode(motore2a, OUTPUT); // motore 2**
** pinMode(motore2b, OUTPUT);**
** servoSensori.attach(8); // attaches the servo on pin 9 to the servo object**
** servoDirezionale.attach(7); // attaches the servo on pin 9 to the servo object**
** int n;**
** 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.send(0x40);**
** Wire.send(0);**
** Wire.endTransmission();**
** digitalWrite(ledPin, LOW); // turn off LED**
** Serial.print("!-- start\n");**
}
void loop()
{
__ /--------------SERVO SENSORI---------------------------------------------------------/ /__
** servoSensori.write(86); //CENTRO **
** delay(300); **
** servoSensori.write(100); //DESTRA POCO **
** delay(300); **
** servoSensori.write(130); //DESTRA **
** delay(300); **
** servoSensori.write(86); //CENTRO **
** delay(300); **
** servoSensori.write(55); //SINISTRA POCO **
** delay(300);**
** servoSensori.write(30); //SINISTRA **
** delay(300);**
__/__
__ /-----------------------------NUNCHUCK-------------------------------------------------------------------/__
** Wire.requestFrom(0x52, 6); // request data from nunchuck**
** while(Wire.available()) // read data and light the LED**
** {**
** buf[cnt++] = nunchuk_decode(Wire.receive());**
** 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(300); // wait 800msec before next loop**
** }**
** }**
** void printdata() // print out the values**
** {**
** int n; // note: the 123,131,524,597... depend on my Nunchuck calibration**
__ /------------DIREZIONE ROVER-----------------------------------------------------------------------/__
** //CENTRO**
** if((int)buf[0]-123 == 5 && (int)buf[1]-131 == -3)**
** {**
** Serial.println("centro");**
** servoDirezionale.write(42); //centro**
** //STOP MOTORI**
** digitalWrite(motore1a, LOW);**
** digitalWrite(motore2a, LOW);**
** digitalWrite(motore1b, LOW);**
** digitalWrite(motore2b, LOW);**
** delay(100);**
** }**
** //DESTRA AVANTI**
** if((int)buf[0]-123 == 132 && (int)buf[1]-131 == 124)**
** {**
** Serial.println("destra avanti");**
** servoDirezionale.write(20);**
** //STOP INDIETRO**
** digitalWrite(motore1b, LOW);**
** digitalWrite(motore2b, LOW);**
** //GO AVANTI**
** digitalWrite(motore1a, HIGH);**
** digitalWrite(motore2a, HIGH);**
** delay(100);**
** }**
** //DESTRA INDIETRO**
** if((int)buf[0]-123 == 132 && (int)buf[1]-131 == -131)**
** {**
** Serial.println("destra indietro");**
** servoDirezionale.write(20);**
** digitalWrite(motore1a, LOW);**
** digitalWrite(motore2a, LOW); **
** //go indietro**
** digitalWrite(motore1b, HIGH);**
** digitalWrite(motore2b, HIGH);**
** delay(100);**
** }**
** //SINISTRA AVANTI**
** if((int)buf[0]-123 == -123 && (int)buf[1]-131 == 124)**
** {**
** Serial.println("sinistra avanti");**
** servoDirezionale.write(60);**
** //STOP INDIETRO**
** digitalWrite(motore1b, LOW);**
** digitalWrite(motore2b, LOW);**
** //GO AVANTI**
** digitalWrite(motore1a, HIGH);**
** digitalWrite(motore2a, HIGH);**
** delay(100);**
** }**
** //SINISTRA INDIETRO**
** if((int)buf[0]-123 == -123 && (int)buf[1]-131 == -131)**
** {**
** Serial.println("sinistra indietro");**
** servoDirezionale.write(60);**
** //STOP AVANTI**
** digitalWrite(motore1a, LOW);**
** digitalWrite(motore2a, LOW); **
** //go indietro**
** digitalWrite(motore1b, HIGH);**
** digitalWrite(motore2b, HIGH);**
** delay(100);**
** }**
__ /------------DIREZIONE VELOCITA'-----------------------------------------------------------------------/__
** //AVANTI**
** if((int)buf[0]-123 == 5 && (int)buf[1]-131 == 124)**
** {**
** Serial.println("avanti");**
** //STOP INDIETRO**
** digitalWrite(motore1b, LOW);**
** digitalWrite(motore2b, LOW);**
** //GO AVANTI**
** digitalWrite(motore1a, HIGH);**
** digitalWrite(motore2a, HIGH);**
** delay(100);**
** }**
** //INDIETRO**
** if((int)buf[0]-123 == 5 && (int)buf[1]-131 == -131)**
** {**
** //stop avanti**
** Serial.println("indietro");**
** digitalWrite(motore1a, LOW);**
** digitalWrite(motore2a, LOW); **
** //go indietro**
** digitalWrite(motore1b, HIGH);**
** digitalWrite(motore2b, HIGH);**
** delay(100);**
** }**
}


