Salutation, je suis en plein projet de terminale STI2D2 SIN et je suis bloqué depuis un certain temps sur la programmation du robot et du joystick pour pouvoir le dirigé via ce joystick GHI 1.2 monté sur un module Xbee qui est de même monté sur une carte Arduino ATMEGA 2560.
Moi et mon collége avons mis au point le programme suivant qui permet l'ENVOI de donnés vers le rebot equipé d'un module Xbee de RECEPTION :
#include <SoftwareSerial.h>
int valeurx = 0;
int valeury = 0;
int motG=0;
char valx = 0;
char valy = 0 ;
int motD=0;
void setup()
{
Serial.begin(9600); // ouvre le port série et fixe le debit de communication à 9600 bauds
}
void loop()
{
int valeurx = analogRead(8);
int valeury = analogRead(9);
int valx = (valeurx - 523)/2;
if (valx < -255)
{
valx = -255;
}
int valy = (valeury - 523)/2;
if (valy < -255)
{
valy = -255;
}
//avancer
if ((valx == 0)&&(valy >= 0)&&(valy <= 255))
{
motG=valy;
motD=valy;
Serial.write(valy);
Serial.write(valy);
Serial.println("y");
Serial.print(valy);
Serial.println("x");
Serial.print(valx);
delay(2000);
}
//reculer
if ((valx == 0)&&(valy >=-255)&&(valy <=0))
{
motG=valy;
motD=valy;
Serial.write(valy);
Serial.write(valy);
Serial.println("y");
Serial.print(valy);
Serial.println("x");
Serial.print(valx);
delay(2000);
}
}
//droite
if (valy == 0)&&(valx >= 0)&&(valx <= 255)
{
motG=valx;
motD=valx;
Serial.write(valx);
Serial.write(valx);
//gauche
if ((valy == 0)&&(valx <= 0)&&(valx >= -255))
{
motG=valx;
motD=valx;
}
Serial.write(valx);
Serial.write(valx);
}
Puis nous avons mis au point celui-ci qui permet la RECEPTION des donnés :
#include <OrangutanLEDs.h>
#include <OrangutanAnalog.h>
#include <OrangutanMotors.h>
#include <OrangutanLCD.h>
/*
A COMMENTER
*/
OrangutanLCD lcd;
OrangutanMotors motors;
OrangutanAnalog analog;
OrangutanLEDs leds;
int motorSpeedG = 0;
int motorSpeedD =0;
void setup() // run once, when the sketch starts
{
Serial.begin(9600);
}
void loop() // run over and over again
{
if (Serial.available() > 0)
{
motorSpeedG = Serial.read();
}
if (Serial.available() > 0)
{
motorSpeedD = Serial.read();
}
lcd.gotoXY(0, 0);
lcd.print("spdG=");
lcd.print(motorSpeedG); // print the resulting motor speed (-255 - 255)
lcd.print(" ");
lcd.gotoXY(0, 1);
lcd.print("spdD=");
lcd.print(motorSpeedD); // print the resulting motor speed (-255 - 255)
lcd.print(" ");
motors.setSpeeds(motorSpeedG, motorSpeedD); //
}
Les programmes fonctionnes sauf pour tourner à gauche et à droite. Et la marche arriére ne fonctionne pas trés bien.
Merci d'avance.
-----