Pages: [1]   Go Down
Author Topic: Arduino+Proceesing+Ardumoto  (Read 724 times)
0 Members and 1 Guest are viewing this topic.
0
Offline Offline
Newbie
*
Karma: 0
Posts: 22
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonjours a tous, je me présente je m'appel james et j'ai 21 ans ^^.
Voila j'aimerais pouvoir piloter mon robot via processing.
J'aimerais d'abord le piloter par usb,puis par la suite avec une liaison xbee.
Mais je ne trouve pas de code et étant amateur dans la programmation  :'( .
Donc voici mon code que j'ai trouver chez sparfun pour commander les moteur via le terminal

Code:
#define PwmPinMotorA 10
#define PwmPinMotorB 11
#define DirectionPinMotorA 12
#define DirectionPinMotorB 13
#define SerialSpeed 9600
#define BufferLength 16
#define LineEnd '#'
 
char inputBuffer[BufferLength];
 
void setup()
{
  // motor pins must be outputs
  pinMode(PwmPinMotorA, OUTPUT);
  pinMode(PwmPinMotorB, OUTPUT);
  pinMode(DirectionPinMotorA, OUTPUT);
  pinMode(DirectionPinMotorB, OUTPUT);
 
  Serial.begin(SerialSpeed);
}
 
// process a command string
void HandleCommand(char* input, int length)
{
  Serial.println(input);
  if (length < 2) { // not a valid command
    return;
  }
  int value = 0;
  // calculate number following command
  if (length > 2) {
    value = atoi(&input[2]);
  }
  int* command = (int*)input;
  // check commands
  // note that the two bytes are swapped, ie 'RA' means command AR
  switch(*command) {
    case 'FA':
      // motor A forwards
      analogWrite(PwmPinMotorA, value);
      digitalWrite(DirectionPinMotorA, HIGH);
      break;
    case 'RA':
      // motor A reverse
      analogWrite(PwmPinMotorA, value);
      digitalWrite(DirectionPinMotorA, LOW);
      break;
    case 'FB':
      // motor B forwards
      analogWrite(PwmPinMotorB, value);
      digitalWrite(DirectionPinMotorB, LOW);
      break;
    case 'RB':
      // motor B reverse
      analogWrite(PwmPinMotorB, value);
      digitalWrite(DirectionPinMotorB, HIGH);
      break;
    default:
      break;
  }  
}
 
void loop()
{
  // get a command string form the serial port
  int inputLength = 0;
  do {
    while (!Serial.available()); // wait for input
    inputBuffer[inputLength] = Serial.read(); // read it in
  } while (inputBuffer[inputLength] != LineEnd && ++inputLength < BufferLength);
  inputBuffer[inputLength] = 0; //  add null terminator
  HandleCommand(inputBuffer, inputLength);
}

Je suis prêt a apprendre (lentement mais surrement  smiley-grin )
« Last Edit: March 19, 2010, 08:38:01 pm by snyp » Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 22
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bon j'ai bien avancer j'arrive à controler mes moteur en appuyant sur une touche demandé mais quand je relache la touche mes moteurs tourne toujours  :o

Voici les codes:

//Processing
import processing.serial.*;      
Serial port;  
String portname = "COM3";

void setup()
{
  size(120, 120);
  port = new Serial(this, portname, 9600);
}

void draw()
{
  background(0.0);
}

void keyPressed()

{

  if (key == 'z' || key == 'Z')
  {
    port.write('z');
  }
  else if (key == 's' || key == 'S')
  {
    port.write('s');
  }
  else if (key == 'd' || key == 'D')
  {
    port.write('d');
  }
  else if (key == 'q' || key == 'Q')
  {
    port.write('q');
  }
}


//Arduino

#define PwmPinMotorA 10
#define PwmPinMotorB 11
#define DirectionPinMotorA 12
#define DirectionPinMotorB 13
#define SerialSpeed 9600
#define BufferLength 16
#define LineEnd '#'

char touche;


void setup()
{
  // motor pins must be outputs
  pinMode(PwmPinMotorA, OUTPUT);
  pinMode(PwmPinMotorB, OUTPUT);
  pinMode(DirectionPinMotorA, OUTPUT);
  pinMode(DirectionPinMotorB, OUTPUT);

  Serial.begin(SerialSpeed);
}

void loop(void)
{
  char val = Serial.read();
  {
    switch(val)
    {

    case 'z'://avancer
      analogWrite(PwmPinMotorA, 50);
      digitalWrite(DirectionPinMotorA, LOW);
      analogWrite(PwmPinMotorB, 50);
      digitalWrite(DirectionPinMotorB, HIGH);
      break;

    case 's'://reculer
      analogWrite(PwmPinMotorA, 50);
      digitalWrite(DirectionPinMotorA, HIGH);
      analogWrite(PwmPinMotorB, 50);
      digitalWrite(DirectionPinMotorB, LOW);
      break;
    }
  }
}





Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 22
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Toujours personne pour m'aider?  :smiley
Logged

Celtic Kingdom
Offline Offline
Sr. Member
****
Karma: 2
Posts: 455
hard oui no!!!
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Tu as déjà avancé -.^
En fait, il ne s'arrête jamais car il n'y a pas de ré-initialisation des conditions, c'est juste; "en cas de.. fait ça..."
Il faudrait plutôt utiliser une boucle conditionnelle avec écouteur comme on peut le voir dans cet exemple :
Code:
void loop()
{
  // get a command string form the serial port
  int inputLength = 0;
  do {
    while (!Serial.available()); // wait for input
    inputBuffer[inputLength] = Serial.read(); // read it in
  } while (inputBuffer[inputLength] != LineEnd && ++inputLength < BufferLength);
  inputBuffer[inputLength] = 0; //  add null terminator
  HandleCommand(inputBuffer, inputLength);
}
-> http://www.projectallusion.com/1/post/2009/11/iphone-controlled-solar-powered-arduino-tank.html

Du reste, sur cette page il y a déjà tout ce qu'il faut pour faire ce que tu veux -.^
Logged

Pages: [1]   Go Up
Jump to: