Styra en RepStrap bearbetning (13 / 25 steg)
Steg 13: Följ den studsande bollen med Firmata! (detta fungerar bra)
http://www.youtube.com/watch?v=VYgbStFaQbMJag har nu tagit den studsande boll skissen och kombinerade det med Firmata en.
Nu följa stegmotorer smidigt väg av den studsande bollen!
Nu får vi någonstans!
//////////////////////////Arduino//////////////////////////
Ledningar/Arduino kod: / / simmple digital firmata
Stödjer så många digitala ingångar och utgångar som möjligt.
Denna exempelkod är offentlig.
#include < Firmata.h >
#define XstepPin 10
#define XdirPin 7
#define YstepPin 2
#define YdirPin 3
byte previousPIN [2]. PIN: PORT för input
byte previousPORT [2].
void outputPort (byte portNumber, byte portValue)
{
endast skicka data när den ändras, annars får du för många meddelanden!
om (previousPIN [portnummer]! = portValue) {
Firmata.sendDigitalPort (portnummer, portValue);
previousPIN [portnummer] = portValue;
Firmata.sendDigitalPort (portnummer, portValue);
}
}
void setPinModeCallback (byte pin, int läge) {
IF(PIN > 1) {/ / inte touch RxTx stift (0,1)
pinMode (pin, läge);
}
}
void digitalWriteCallback (byte port, int värde)
{
byte i.
byte currentPinValue, previousPinValue;
om (värde! = previousPORT[port]) {
för (jag = 0; jag < 8; i ++) {
currentPinValue = (byte) värde & (1 << jag);
previousPinValue = previousPORT [port] & (1 << jag);
om (currentPinValue! = previousPinValue) {
digitalWrite (i + (port * 8), currentPinValue);
}
}
previousPORT [port] = värde;
}
}
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); stift 0-7, ignorera Rx/Tx stift (0/1)
outputPort (1, PINB); stift 8-13
While(Firmata.available()) {
Firmata.processInput();
}
extra stepper sekvens till firmata kod
digitalWrite(XstepPin,HIGH); vidta åtgärder
digitalWrite(YstepPin,HIGH);
delayMicroseconds(2);
digitalWrite(XstepPin,LOW);
digitalWrite(YstepPin,LOW);
delayMicroseconds(2);
delayMicroseconds(1000); <<<<<< Används för att ändra STEPPER hastighet??? <<<<<<<<
}
///////////////////PROCESSING//////////////////////////////
/**
* Enkel skriva.
*
* Kontrollera om musen är över en rektangel och skriver status till den seriella porten.
* I det här exemplet fungerar med ledningarna / Arduino program som följer nedan.
*/
import processing.serial.*;
import cc.arduino.*;
Arduino arduino;
Seriella myPort; Skapa objekt från seriella klass
Uppgifterna från den seriella porten
int ledPin = 13.
int XstepPin = 10;
int XdirPin = 7.
int YstepPin = 2;
int YdirPin = 3;
parametrar för bollen
float x = 50,0;
float y = 50,0;
flyta speedX = 1,0;
float speedY =. 4;
float radie = 15,0;
int directionX = 1;
int directionY = 1;
void setup()
{
setup ritningen
storlek (100, 100);
Smooth();
noStroke();
ellipseMode(RADIUS);
installationsprogrammet för kommunikation med Arduino
Arduino = nya Arduino (denna, 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);
}
void draw() {
Fill(0,12);
rect (0,0, bredd, höjd);
Fill(255);
ellips (x, y, radius, radie);
x += speedX * directionX;
om ((x > bredd-radius) || (x < RADIUS)) {//change X riktning om bollen träffar sidan av rutan
directionX = - directionX;
}
y + = snabb * directionY;
om ((y > höjd-radius) || (y < RADIUS)) {//change Y riktning om bollen träffar sidan av rutan
directionY = - directionY;
}
om (directionX > = 0) {
arduino.digitalWrite (ledPin, Arduino.HIGH);
arduino.digitalWrite (XdirPin, Arduino.HIGH);
}
annat {
arduino.digitalWrite (ledPin, Arduino.LOW);
arduino.digitalWrite (XdirPin, Arduino.LOW);
}
om (directionY > = 0) {
arduino.digitalWrite (ledPin, Arduino.HIGH);
arduino.digitalWrite (YdirPin, Arduino.HIGH);
}
annat {
arduino.digitalWrite (ledPin, Arduino.LOW);
arduino.digitalWrite (YdirPin, Arduino.LOW);
}
}