Paso 21: 3D - siga el Bouncing Ball (esto incluye una firmado)
Aquí es el 3D que despide bolas procesamiento y Adruino el código.
Esto ejecutará X, Y, Z los motores paso a paso.
Sigue el código de Arduino, este es el código de paso 13 con el eje Z añadido.
///////////////////////////////PROCESSING /////////////////////////////
*** El proceso con una firmado ***
/**
* Bounce_3D_0
*
Cuando llega a la forma un límite invierte su dirección.
Hay X, Y, límites Z
La dirección es de salida-
Alimenticia -> una firmado -> Arduino -> Drivers -> Steppers
*
* Modificado para 3D
Nota: 0,0,0 - superior izquierda esquina (frente a la pantalla del ordenador)
puntos de eje de Z negativos dentro de la pantalla del ordenador
puntos de eje Y positivo hacia abajo
positivo X puntos de eje a la derecha
*/
Import processing.serial.*;
Import cc.arduino.*;
Arduino arduino;
Serie myPort; Crear un objeto de clase Serial
Datos recibidos del puerto serial
int ledPin = 13;
int XstepPin = 10;
int XdirPin = 7;
int YstepPin = 2;
int YdirPin = 3;
int ZstepPin = 19;
int ZdirPin = 18;
int tamaño = 40; Ancho de la forma
flotador xpos, ypos, zpos; Posición inicial de forma
profundidad de flotador;
flotador xspeed = 2.5; Velocidad de la forma
flotador yspeed = 2; Velocidad de la forma
flotador de zspeed = 3;
int xdirection = 1; Izquierda o derecha
int ydirection = 1; Arriba a abajo
int zdirection = 1; atrás o
void setup()
{
tamaño (200, 200, P3D);
noStroke();
frameRate(30);
Smooth();
Establecer la posición inicial de la forma
XPOS = ancho/2;
YPOS = altura/2;
zpos = - altura/2; Nota que Zaxis va dentro de la pantalla
profundidad = - altura;
comunicación configuración con Arduino
Arduino = nuevo Arduino (este, Arduino.list() [0], 57600); v1
arduino.pinMode (ledPin, Arduino.OUTPUT);
arduino.pinMode (XstepPin, Arduino.OUTPUT);
arduino.pinMode (XdirPin, Arduino.OUTPUT);
arduino.pinMode (YstepPin, Arduino.OUTPUT);
arduino.pinMode (YdirPin, Arduino.OUTPUT);
arduino.pinMode (ZstepPin, Arduino.OUTPUT);
arduino.pinMode (ZdirPin, Arduino.OUTPUT);
}
void draw()
{
Background(102);
Lights();
caja de cristal / / Nota: línea (x1, y1, z1, x 2, y2, z2)
Stroke(255);
Atrás
línea (0,0, profundidad, anchura, profundidad 0,);
línea (0, altura, profundidad, anchura, altura, profundidad);
línea (0,0, profundidad, 0, altura, profundidad);
linea (ancho, 0, anchura, altura, profundidad, profundidad);
esquinas
línea (0,0,0, 0,0, profundidad);
línea (altura 0, 0, 0, altura, profundidad);
linea (ancho, 0, 0, anchura, profundidad 0,);
linea (ancho, alto, 0, anchura, altura, profundidad);
Actualizar la posición de la forma
XPOS = xpos + (xspeed * xdirection);
YPOS = ypos + (yspeed * ydirection);
zpos = zpos + (zspeed * zdirection);
Prueba a ver si la forma excede los límites de la pantalla
Si lo hace, invierta su dirección multiplicando por -1
Si (xpos > tamaño de ancho || xpos < 0) {}
xdirection * = -1;
}
Si (ypos > altura tamaño || ypos < 0) {}
ydirection * = -1;
}
Si (zpos <-altura-tamaño || zpos > 0) {//note que Zaxis va dentro de la pantalla
zdirection * = -1;
}
Dibuja la figura
Lights();
traducir (xpos, ypos, zpos);
Sphere(Size);
MOTORES DE CONTROL DE LOS PASOS
// X
Si (xdirection > = 0) {}
arduino.digitalWrite (ledPin, Arduino.HIGH);
arduino.digitalWrite (XdirPin, Arduino.HIGH);
arduino.digitalWrite (ZdirPin, Arduino.HIGH);
}
Else {}
arduino.digitalWrite (ledPin, Arduino.LOW);
arduino.digitalWrite (XdirPin, Arduino.LOW);
arduino.digitalWrite (ZdirPin, Arduino.LOW);
}
// Y
Si (ydirection > = 0) {}
arduino.digitalWrite (YdirPin, Arduino.HIGH);
}
Else {}
arduino.digitalWrite (YdirPin, Arduino.LOW);
}
// Z
Si (zdirection > = 0) {}
arduino.digitalWrite (ZdirPin, Arduino.HIGH);
}
Else {}
arduino.digitalWrite (ZdirPin, Arduino.LOW);
}
}
/////////////////////////////ARDUINO////////////////////////////////////////
Código de cableado/Arduino: / / una firmado digital simmple
Soporta tantas entradas digitales y salidas como sea posible.
Este ejemplo de código es de dominio público.
#include
#define XstepPin 10
#define XdirPin 7
#define YstepPin 2
#define YdirPin 3
#define ZstepPin 19
#define ZdirPin 18
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
digitalWrite(YstepPin,HIGH);
digitalWrite(ZstepPin,HIGH);
delayMicroseconds(2);
digitalWrite(XstepPin,LOW);
digitalWrite(YstepPin,LOW);
digitalWrite(ZstepPin,LOW);
delayMicroseconds(2);
delayMicroseconds(1000); <<<<<< Uso a velocidad de paso a paso de cambio??? <<<<<<<<
}