Montando una CNC

Hola a todos, hace unas semanas empecé a hacer una CNC, pero no de madera ni metal, sino con K'nex XD . Os pongo unas fotos y después mis preguntas...

Eje Z

Eje Y

Eje X

Como habréis visto, es bastante cutre para lo que he visto.

Ahora las dudas:

  • Cuando le he cargado el firmware de un interpretador de GCode (Reprap para concretar) a un Arduino Mega, al conectar Arduino a algún programa que mande GCode, sencillamente no andan los motores. Tengo configurado correctamente el puerto, los baudios, pines, pasos, pasos por mm... y simplemente no hace nada.

-Y la otra, para el posicionamiento de la máquina, tengo un joystick y un teclado PS/2 conectados a un Arduino Duemilanove. Los dos Arduinos se conectan mediante XBee. Ya he conseguido mover la CNC con el joystick, pero ahora lo que pretendo es controlar además la velocidad (RPM) de los motores en general, nada de por separado.

Para eso, el joystick, según los valores de sus potenciómetros, manda una letra (W, S, A, D, R ó F). Al pulsar un botón (ENTER en mi caso), una variable toma 3 valores (0, 1 ó 2). Si quiero que vaya hacia adelante a velocidad media, el Arduino Mega (el de la CNC) recibiría W1.

Este es el código que lleva el Arduino Duemilanove

#include <PS2Keyboard.h>
#define DATA_PIN 4
int XPin = A0;    
int YPin = A1;
int ZPin = A2;
int X = 0;
int Y = 0;
int Z = 0;
int val =0;
PS2Keyboard keyboard;

void setup() {
  keyboard.begin(DATA_PIN);
  Serial.begin(9600);
  
}

void loop() {
  X = analogRead(XPin);
  Y = analogRead(YPin);
  Z = analogRead(ZPin);
  byte data = keyboard.read();
  if (data == PS2_KC_ENTER){
    val ++;
  }
  if( val > 2){
    val = 0;
  }
  
  if(X > 920){
    Serial.print('a');
    Serial.println(val);
  }
  if(X < 210){
    Serial.print('d');
    Serial.println(val);
  }
  if(Y > 890){
    Serial.print('w');
    Serial.println(val);
  }
  if(Y < 180){
    Serial.print('s');
    Serial.println(val);
  }
  if(Z < 60){
    Serial.print('f');
    Serial.println(val);
  }
  if(Z > 990){
    Serial.print('r');
    Serial.println(val);
  }
  if(keyboard.available()) {
    

    
    if(data == PS2_KC_BREAK) {
      Serial.print("[BREAK]");
    } 
      
     else if(data == PS2_KC_ESC) {
      Serial.println('l');
    } else if(data == PS2_KC_KPLUS) {
      Serial.print("+");
    } else if(data == PS2_KC_KMINUS) {
      Serial.print("-");
    } else if(data == PS2_KC_KMULTI) {
      Serial.print("*");
    } else if(data == PS2_KC_NUM) {
      Serial.println('o');
    } else if(data == PS2_KC_BKSP) {
      Serial.print("[BACKSPACE]");
    } else {
      
      Serial.println(data);
    }
  }
delay(80);
}

Lo que no se hacer es cómo separar esa W y ese 1.

He visto varios temas sobre cómo hacerlo, pero o no lo entiendo o no sé cómo aplicarlo a mi caso.

Muchas gracias