Paso 10: Hacerlo con una firmado
Aquí es un enfoque alternativo que utiliza la biblioteca de una firmado para cambiar la dirección del motor de pasos de procesamiento.Puede aprender más sobre él aquí:
http://Arduino.CC/en/Reference/Firmata
y aquí:
http://Firmata.org/wiki/Main_Page
No entiendo los detalles. Pero, desde mi experiencia hasta ahora, sé que hace un buen trabajo de manejar la comunicación entre el PC y el Arduino. Por lo tanto, me complace ignorar los detalles por ahora.
He empezado modificando un ejemplo que se incluye en theArduinoIDE llamado "SimpleDigitalFirmata". Una vez que este código es cargado en el Arduino, puede comunicarse con los pernos digitales de la placa Arduino directamente en el proceso.
En el proceso de trabajo de un ejemplo que enciende y apaga un LED en la placa Arduino cuando se mueve un mouse sobre un amanecer cuadrado del monitor de la PC.
Para hacer el control de proceso el LED y un motor paso a paso, necesita modiify el código para el Arduino y el procesamiento.
En el lado de Arduino - he definí los pernos de paso a paso en la parte superior del bosquejo. Entonces atascado en el código para el paso a paso al final del bucle principal. Pongo esto fuera el código que lee del puerto serie. Tan sólo irá el paso a paso.
La dirección de los pasos está situada directamente en el proceso. El código de ejemplo enciende y apaga un LED en pin13. Por lo tanto, acabo de hacer el perno de dirección paso hacer lo mismo que el LED.
Aquí está el código. Sólo controla los pasos de X.
///////////////// ARDUINO //////////////////////
Soporta tantas entradas digitales y salidas como sea posible.
//
Este ejemplo de código es de dominio público.
#include
#define XstepPin 10 //Step pin
#define XdirPin 7 //Direction pin
byte previousPIN [2]; PIN: Puerto de entrada
byte previousPORT [2];
void outputPort (numeroPuerto bytes, portValue bytes)
{
sólo enviar los datos cuando cambia, si no tienes demasiados mensajes!
Si (previousPIN [número de puerto]! = portValue) {}
Firmata.sendDigitalPort (numeroPuerto, portValue);
previousPIN [número de puerto] = portValue;
Firmata.sendDigitalPort (numeroPuerto, portValue);
}
}
{} void setPinModeCallback (pin de byte, int modo)
if(PIN > 1) {/ / no touch pins RxTx (0,1)
pinMode (pin, mode);
}
}
void digitalWriteCallback (puerto de byte, int valor)
{
byte me;
currentPinValue bytes, previousPinValue;
Si (valor! = {previousPORT[port])}
para (i = 0; i < 8; i ++) {}
currentPinValue = valor (byte) & (1 << i);
previousPinValue = previousPORT [puerto] & (1 << i);
Si (currentPinValue! = previousPinValue) {}
digitalWrite (i + (puerto * 8), currentPinValue);
}
}
previousPORT [puerto] = valor;
}
}
void setup()
{
Firmata.setFirmwareVersion (0, 1);
Firmata.Attach (DIGITAL_MESSAGE, digitalWriteCallback);
Firmata.Attach (SET_PIN_MODE, setPinModeCallback);
Firmata.Begin(57600);
}
void loop()
{
outputPort (0, PIND & ~ B00000011); pernos de 0-7, haciendo caso omiso de pernos de Rx/Tx (0/1)
outputPort (1, PINB); pernos 8-13
{while(Firmata.Available())}
Firmata.processInput();
}
secuencia de pasos añadidos al código una firmado
digitalWrite(XstepPin,HIGH); tomar medidas
delayMicroseconds(2);
digitalWrite(XstepPin,LOW);
delayMicroseconds(2);
delayMicroseconds(1000); <<<<<< Uso a velocidad de paso a paso de cambio <<<<<<<<
}
//////////////////////////////////Processing/////////////////////////////////
/**
* Simple escritura. < modificado control paso a paso hacia
*
* Comprobar si el ratón está sobre un rectángulo y escribe el estado en el puerto serie.
* Este ejemplo trabaja con el cableado / Arduino programa que sigue a continuación.
*/
Import processing.serial.*;
Import cc.arduino.*;
Arduino arduino;
Serie myPort; Crear un objeto de clase Serial
Datos recibidos del puerto serial
int ledPin = 13; PIN para el LED
int XdirPin = 7; PIN para la dirección paso a paso X
int XstepPin = 10; pines X paso
void setup()
{
tamaño (200, 200);
Sé que el primer puerto en la lista de serie de mi mac
es siempre mi Adaptador FTDI, así que abro Serial.list() [0].
En equipos con Windows, esto abre generalmente COM1.
Abierto cualquier puerto es el que utilizas.
String portName = Serial.list() [0];
myPort = serie nueva (este, portName, 9600);
Arduino = nuevo Arduino (este, Arduino.list() [0], 57600); v1
arduino.pinMode (ledPin, Arduino.OUTPUT);
arduino.pinMode (XdirPin, Arduino.OUTPUT);
}
void draw() {}
Background(255);
Si (mouseOverRect() == true) {/ / si el mouse está sobre la Plaza,
Fill(204); cambiar color y
arduino.digitalWrite (ledPin, Arduino.HIGH); LED en
arduino.digitalWrite (XdirPin, Arduino.HIGH); Dirección paso a paso de esta manera
}
Else {/ / si el ratón no está sobre la Plaza,
Fill(0); cambiar color y
arduino.digitalWrite (ledPin, Arduino.LOW); LED apagado
arduino.digitalWrite (XdirPin, Arduino.LOW); Dirección paso a paso la manera de otros
}
Rect (50, 50, 100, 100); Dibujar un cuadrado
}
Boolean mouseOverRect() {/ / comprobar si el mouse está sobre la Plaza
regresar ((ratonX > = 50) & & (mouseX < = 150) & & (ratonY > = 50) & & (ratonY < = 150));
}