/**** import des biblioteques ****/
#include <SPI.h>
#include <RF24.h>
/**** definition des constantes et variables ****/
// pour le pad et les boutons du joystick \\
#define PAD_X A0
#define PAD_Y A1
#define BOUTON_PAD 8
#define BOUTON_A 2
#define BOUTON_B 3
#define BOUTON_C 4
#define BOUTON_D 5
#define BOUTON_E 6
#define BOUTON_F 7
//#define DELAY 25 // pour debug
enum { STOP, AVANT1, ARRIERE1, AVANT2, ARRIERE2, DROITE, GAUCHE,
AV1_DROITE, AV1_GAUCHE , AR1_DROITE, AR1_GAUCHE,
AV2_DROITE, AV2_GAUCHE , AR2_DROITE, AR2_GAUCHE,
PAD, A, B, C, D, E, F };
const uint64_t addresse = 0x1111111111;
int message;
int x_direction = 0;
int y_direction = 0;
int YseuilvitAV1AV2 = 1022;
int Yseuil0Min = 525;
int Yseuil0Max = 535;
int YseuilvitAR1AR2 = 1;
int Xseuil0Max = 505;
int Xseuil0Min = 500;
RF24 radio(9, 10);
/**** le setup ****/
void setup(void)
{
//Serial.begin(115200); // pour debug
//Serial.println("Joystick shield demo"); // pour debug
radio.begin();
radio.openWritingPipe(addresse);
for (int GPIO = 0; GPIO <= 8; GPIO++) {
pinMode(GPIO, INPUT);
digitalWrite(GPIO, HIGH);
}
}
/**** La fonction "envoi(xxx)" qui envoi la commande ***/
void envoi(const byte com)
{
switch (com) {
case STOP : message = 0 ; // "STOP"
break;
case AVANT1 : message = 1; // "AVANT1";
break;
case ARRIERE1 : message = -1; // "ARRIERE";
break;
case AVANT2 : message = 2; // "AVANT2";
break;
case ARRIERE2 : message = -2; // "ARRIERE2";
break;
case DROITE : message = 3; // "DROITE";
break;
case GAUCHE : message = 4; // "GAUCHE";
break;
case AV1_DROITE : message = 13; // "AV1_DROITE";
break;
case AV1_GAUCHE : message = 14; // "AV1_GAUCHE";
break;
case AR1_DROITE : message = -13; // "AR1_DROITE";
break;
case AR1_GAUCHE : message = -14; // "AR1_GAUCHE";
break;
case AV2_DROITE : message = 23; // "AV2_DROITE";
break;
case AV2_GAUCHE : message = 24; // "AV2_GAUCHE";
break;
case AR2_DROITE : message = -23; // "AR2_DROITE";
break;
case AR2_GAUCHE : message = -24; // "AR2_GAUCHE";
break;
case PAD : message = 5 ; // "PAD"
break;
case A : message = 6 ; // "A"
break;
case B : message = 7 ; // "B"
break;
case C : message = 8 ; // "C"
break;
case D : message = 9 ; // "D"
break;
case E : message = 10 ; // "E"
break;
case F : message = 11 ; // "F"
break;
}
//Serial.println(int(message)); // pour debug
radio.powerUp(); //alimente le module nrf24l01+
delay(10);
// transmition du buffer vers l'arduino recepteur
radio.write(&message, sizeof(message));
delay(50);
radio.powerDown(); // arrêt de l’alimentation du module nrf24l01+
}
/***** la boucle ****/
void loop () {
int axeX = analogRead(PAD_X);
int axeY = analogRead(PAD_Y);
//Serial.println(axeX); // pour debug
//Serial.println(axeY); // pour debug
////////////////////////// DEFINITION DES POSITION SUR X EN FONCTION DES SEUILS \\\\\\\\\\\\\\\\\\\\\\\\\\\
if ( axeX < Xseuil0Min )
{
//Serial.println("à gauche (135°)"); // pour debug
x_direction = 1;
}
else if ( axeX > Xseuil0Max )
{
//Serial.println("à droite (45°)"); // pour debug
x_direction = -1;
}
else
{
//Serial.println("tout droit (90°)"); // pour debug
x_direction = 0;
}
////////////////////////// DEFINITION DES POSITION SUR Y EN FONCTION DES SEUILS \\\\\\\\\\\\\\\\\\\\\\\\\\\
if ( axeY > YseuilvitAV1AV2 )
{
//Serial.println("en avant vitesse 2"); // pour debug
y_direction = 2;
}
else if ( axeY > Yseuil0Max && axeY <= YseuilvitAV1AV2 )
{
//Serial.println("en avant vitesse 1"); // pour debug
y_direction = 1;
}
else if ( axeY < Yseuil0Min && axeY >= YseuilvitAR1AR2 )
{
//Serial.println("en arriere vitesse 1"); // pour debug
y_direction = -1;
}
else if ( axeY < YseuilvitAR1AR2 )
{
//Serial.println("en arriere vitesse 2"); // pour debug
y_direction = -2;
}
else
{
//Serial.println("arret"); // pour debug
y_direction = 0;
}
////////////////////////// ENVOI DES COMMANDES EN FONCTION DES POSITION SUR X ET Y \\\\\\\\\\\\\\\\\\\\\\\\\\\
if ( y_direction == 0 and x_direction == 0 ) {
//Serial.println("ARRET TOUT DROIT"); // pour debug
envoi(STOP);
}
else if ( y_direction == 0 and x_direction == -1 ) {
//Serial.println("A DROITE"); // pour debug
envoi(DROITE);
}
else if ( y_direction == 0 and x_direction == 1 ) {
//Serial.println("A GAUCHE"); // pour debug
envoi(GAUCHE);
}
else if ( y_direction == -1 and x_direction == 0 ) {
//Serial.println("EN ARRIERE VITESSE 1"); // pour debug
envoi(ARRIERE1);
}
else if ( y_direction == 1 and x_direction == 0 ) {
//Serial.println("EN AVANT VITESSE 1"); // pour debug
envoi(AVANT1);
}
else if ( y_direction == -2 and x_direction == 0 ) {
//Serial.println("EN ARRIERE VITESSE 2"); // pour debug
envoi(ARRIERE2);
}
else if ( y_direction == 2 and x_direction == 0 ) {
//Serial.println("EN AVANT VITESSE 2"); // pour debug
envoi(AVANT2);
}
else if ( y_direction == -1 and x_direction == -1 ) {
//Serial.println("EN ARRIERE VITESSE 1 A DROITE"); // pour debug
envoi(AR1_DROITE);
}
else if ( y_direction == -1 and x_direction == 1 ) {
//Serial.println("EN ARRIERE VITESSE 1 A GAUCHE"); // pour debug
envoi(AR1_GAUCHE);
}
else if ( y_direction == -2 and x_direction == -1 ) {
//Serial.println("EN ARRIERE VITESSE 2 A DROITE"); // pour debug
envoi(AR2_DROITE);
}
else if ( y_direction == -2 and x_direction == 1 ) {
//Serial.println("EN ARRIERE VITESSE 2 A GAUCHE"); // pour debug
envoi(AR2_GAUCHE);
}
else if ( y_direction == 1 and x_direction == -1 ) {
//Serial.println("EN AVANT VITESSE 1 A DROITE"); // pour debug
envoi(AV1_DROITE);
}
else if ( y_direction == 1 and x_direction == 1 ) {
//Serial.println("EN AVANT VITESSE 1 A GAUCHE"); // pour debug
envoi(AV1_GAUCHE);
}
else if ( y_direction == 2 and x_direction == -1 ) {
//Serial.println("EN AVANT VITESSE 2 A DROITE"); // pour debug
envoi(AV2_DROITE);
}
else if ( y_direction == 2 and x_direction == 1 ) {
//Serial.println("EN AVANT VITESSE 2 A GAUCHE"); // pour debug
envoi(AV2_GAUCHE);
}
////////////////////////// ENVOI DES COMMANDES EN FONCTION DES BOUTONS \\\\\\\\\\\\\\\\\\\\\\\\\\\
if (digitalRead(BOUTON_PAD) == LOW) {
//Serial.println(" BOUTON PAD "); // pour debug
envoi(PAD);
//delay(DELAY); // pour debug
}
else if (digitalRead(BOUTON_A) == LOW) {
//Serial.println(" BOUTON A "); // pour debug
envoi(A);
//delay(DELAY); // pour debug
}
else if (digitalRead(BOUTON_B) == LOW) {
//Serial.println(" BOUTON B "); // pour debug
envoi(B);
//delay(DELAY);
}
else if(digitalRead(BOUTON_C) == LOW) {
//Serial.println(" BOUTON C "); // pour debug
envoi(C);
//delay(DELAY);
}
else if(digitalRead(BOUTON_D) == LOW) {
//Serial.println(" BOUTON D "); // pour debug
envoi(D);
//delay(DELAY); // pour debug
}
else if(digitalRead(BOUTON_E) == LOW) {
//Serial.println(" BOUTON E "); // pour debug
envoi(E);
//delay(DELAY); // pour debug
}
else if(digitalRead(BOUTON_F) == LOW) {
//Serial.println(" BOUTON F "); // pour debug
envoi(F);
//delay(DELAY); // pour debug
}
//delay(500); // pour debug
}