Styra en RepStrap bearbetning (10 / 25 steg)
Steg 10: Gör det med Firmata
Här är en alternativ metod som använder Firmata biblioteket för att ändra riktning på stepper motor från bearbetning.Du kan läsa mer om det här:
http://Arduino.cc/en/reference/Firmata
och här:
http://firmata.org/wiki/main_page
Jag förstår inte detaljerna. Men från min erfarenhet hittills, jag vet det är gör ett bra jobb att hantera kommunikationen mellan datorn och Arduino. Så, jag är glad att ignorera Detaljer för nu.
Jag har börjat genom att ändra ett exempel som ingår i theArduinoIDE kallas "SimpleDigitalFirmata". När denna kod är laddad på Arduino, kan du kommunicera med digital stiften på Arduino styrelsen direkt från bearbetning.
I behandlingen arbetar jag från ett exempel som slår på och av en LED på Arduino styrelsen när du flyttar musen över en fyrkantig dawn bildskärmens av PC.
För att göra bearbetning kontroll LED och en stegmotor, måste du modiify koden för Arduino och bearbetning.
Arduino sidan - har jag definierat stepper stiften överst på skissen. Sedan har jag fastnat i kod att köra nummerlistan i slutet av huvudloop. Jag sätta detta utanför den kod som läser den seriella porten. Så kommer bara genom att gå.
Riktning mot nummerlistan ligger direkt från bearbetning. Exempelkoden vände på och bort en LED på pin13. Så, jag har precis gjort steg riktning stiftet gör samma sak som LED.
Här är koden. Detta styr bara X stepper.
///////////////// ARDUINO //////////////////////
Stödjer så många digitala ingångar och utgångar som möjligt.
//
Denna exempelkod är offentlig.
#include
#define XstepPin 10 //Step pin
#define XdirPin 7 //Direction pin
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
delayMicroseconds(2);
digitalWrite(XstepPin,LOW);
delayMicroseconds(2);
delayMicroseconds(1000); <<<<<< Används för att ändra STEPPER hastighet <<<<<<<<
}
//////////////////////////////////Processing/////////////////////////////////
/**
* Enkel skriva. < ändrades så att styra stepper riktning
*
* 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. PIN-koden för LED
int XdirPin = 7. PIN-koden för stepper X riktning
int XstepPin = 10; PIN-koden för X steg
void setup()
{
storlek (200, 200);
Jag vet att den första porten i listan följetong på min mac
är alltid min FTDI adapter, så jag öppnar Serial.list() [0].
På Windows-maskiner, allmänt öppnas COM1.
Öppna oavsett port är den du använder.
Sträng portName = Serial.list() [0];
myPort = ny följetong (här, portName, 9600);
Arduino = nya Arduino (denna, Arduino.list() [0], 57600); v1
arduino.pinMode (ledPin, Arduino.OUTPUT);
arduino.pinMode (XdirPin, Arduino.OUTPUT);
}
void draw() {
Background(255);
om (mouseOverRect() == true) {/ / om musen är över torget,
Fill(204); ändra färg och
arduino.digitalWrite (ledPin, Arduino.HIGH); Lysdioden på
arduino.digitalWrite (XdirPin, Arduino.HIGH); Stepper riktning detta sätt
}
annat {/ / om musen inte är över torget,
Fill(0); ändra färg och
arduino.digitalWrite (ledPin, Arduino.LOW); LEDDE bort
arduino.digitalWrite (XdirPin, Arduino.LOW); Stepper riktning åt andra hållet
}
rect (50, 50, 100, 100); Rita en fyrkant
}
booleska mouseOverRect() {/ / Test om musen över torget
tillbaka ((mouseX > = 50) & & (mouseX < = 150) & & (mouseY > = 50) & & (mouseY < = 150));
}