Paso 12: Sketch de Arduino
La explicación se incluye en la pantalla de dibujo como comentario en negrita.
Incluir librería SoftwareSerial
#include < SoftwareSerial.h >
Módulo XBee con librería SoftwareSerial y los pines de Arduino para utilizar como TX (10) y RX (9)
SoftwareSerial XBeeSerial = SoftwareSerial (10, 9);
/ / Configurar los pines de Arduino que conectado al L293D - controladores de Motor para la izquierda y girar a la derecha
#define TURN_ENABLE_PIN 3 / / uso PWM de este pin
#define LEFT_PIN 4
#define RIGHT_PIN 2
Configurar los pines de Arduino que conectado al L293D - controladores de Motor hacia adelante y hacia atrás
#define DRIVE_ENABLE_PIN 11 / / uso PWM de este pin
#define BACKWARD_PIN 8
#define FORWARD_PIN 12
Comandos de entrada
#define BEGIN_COMMAND 0x7F / / decimal = 127, binario = 0111 1111
#define adelante 0 x 1 / / decimal = 1, binario = 0000 0001
#define atrás 0 x 2 / / decimal = 2, binario = 0000 0010
#define izquierda 0x4 / / decimal = 4 binario = 0000 0100
#define derecha 0x8 / / decimal = 2, binario = 0000 1000
Definir variable de comando para ser matriz de dos bytes,
comando [0] = girar izquierda o derecha y la unidad hacia adelante o hacia atrás
comando [1] = velocidad.
comando de int [2];
void setup() {}
Configurar XBee SoftwareSerial velocidad a 9600 bps
XBeeSerial.begin(9600);
Asigna Arduino motores control pines como salida
pinMode (TURN_ENABLE_PIN, salida);
pinMode (LEFT_PIN, salida);
pinMode (RIGHT_PIN, salida);
pinMode (DRIVE_ENABLE_PIN, salida);
pinMode (BACKWARD_PIN, salida);
pinMode (FORWARD_PIN, salida);
}
void loop() {}
XBee SoftwareSerial escuchar los comandos de procesamiento interfaz gráfica de usuario,
/ / establecer la condición para ver si hay un dato en el buffer serial
if(XBeeSerial.Available() > 0) {}
/ / y si las funciones de readCommand() devuelven el valor de más de 0,
entonces executeCommand()
if(readCommand() > 0) {}
executeCommand();
}
}
}
Método de lectura Command(),
valor entero de 1,
Si hay tres octetos comience con 0x7F en el buffer serial
o valor entero de 0, de lo contrario.
//
int readCommand() {}
int b = XBeeSerial.read();
if(b == BEGIN_COMMAND) {/ / BEGIN_COMMAND = 0x7F
comando [0] = readByte(); comando [0] es 0 x 1, 0 x 2, 0x4 o 0x8
comando [1] = readByte(); comando [1] es la velocidad varía de 0 - 6
retorno 1;
} else {}
return 0;
}
}
{} de readByte() int
mientras que (verdad) {}
if(XBeeSerial.Available() > 0) {}
volver XBeeSerial.read();
}
}
}
Traducir los comandos reciben de GUI de procesamiento
y los pines de control del motor ON/OFF
void executeCommand() {}
int c = comando [0];
int velocidad = comando [1];
De control hacia adelante y hacia atrás
DRIVE_ENABLE_PIN = 11
BACKWARD_PIN = 8
FORWARD_PIN = 12
digitalWrite (DRIVE_ENABLE_PIN, bajo);
Comparar (lógica y) primer byte de la matriz de orden (command[0]) con avance (0 x 01)
Si el resultado es TRUE, luego ajuste los pernos de los controles de Motor a motor impulsor hacia adelante
Si {} (c y hacia adelante)
digitalWrite (BACKWARD_PIN, bajo);
digitalWrite (FORWARD_PIN, alto);
}
Comparar (lógica y) primer byte de la matriz de orden (command[0]) al revés (0 x 02)
Si el resultado es TRUE, luego ajuste los pernos de controles de Motor al motor de accionamiento hacia atrás
//
Si {} (c y al revés)
digitalWrite (FORWARD_PIN, bajo);
digitalWrite (BACKWARD_PIN, alto);
}
Comparar (lógica y) primer byte de la matriz de orden (command[0]) con
el resultado de la lógica o entre hacia delante (0 x 01) y BACKWARD(0x02)
Si el resultado es TRUE, a continuación, establezca la velocidad en el segundo byte de la matriz de orden (command[1])
//
Si (c & (adelante | AL REVÉS)) {}
analogWrite (DRIVE_ENABLE_PIN, velocidad);
Gire la izquierda control & derecho
TURN_ENABLE_PIN = 3
LEFT_PIN = 4
RIGHT_PIN = 2 digitalWrite (TURN_ENABLE_PIN, bajo);
Si {} (c & izquierdo)
digitalWrite (RIGHT_PIN, bajo);
digitalWrite (LEFT_PIN, alto);
}
Si (c & derecha) {}
digitalWrite (LEFT_PIN, bajo);
digitalWrite (RIGHT_PIN, alto);
}
Si (c & (izquierda | A LA DERECHA)) {}
digitalWrite (TURN_ENABLE_PIN, alto);
}
}