Stap 10: Doet het met Firmata
Hier is een alternatieve benadering die de Firmata-bibliotheek gebruikt om te veranderen de richting van de stappenmotor van verwerking.U kunt meer lezen over het hier:
http://Arduino.CC/en/Reference/firmata
en hier:
http://firmata.org/wiki/Main_Page
Ik begrijp niet de details. Maar, uit mijn ervaring tot nu toe, ik weet dat is heeft een goede baan behandeling van de communicatie tussen de PC en de Arduino. Dus, ik ben graag de details voorlopig negeren.
Ik ben begonnen door te wijzigen van een voorbeeld dat is opgenomen in de theArduinoIDE genaamd "SimpleDigitalFirmata". Zodra deze code wordt geladen op de Arduino, kunt u communiceren met de digitale pennen aan de Arduino board rechtstreeks vanuit Processing.
Ik werk bij verwerking van een voorbeeld dat schakelt in en uit een LED op de Arduino bord wanneer u een muis boven een vierkante dageraad van het beeldscherm van de PC.
Om Processing controle de LED en een stappenmotor, moet u modiify de code voor de Arduino en Processing.
Aan de kant van de Arduino - heb ik de stepper pinnen aan de bovenkant van de schets gedefinieerd. Vervolgens vastgelopen ik in code om de stepper rijden aan het einde van de hoofdlus. Ik zet dit buiten de code dat wordt gelezen en de seriële poort. De stepper zal dus enkel gaan.
De richting van de stepper ligt direct van Processing. De voorbeeldcode ingeschakeld en uit een LED op pin13. Dus, ik maakte de stap richting pin hetzelfde doen als de LED.
Hier is de code. Hiermee wordt alleen de X-stepper.
///////////////// ARDUINO //////////////////////
Ondersteunt zo veel digitale ingangen en uitgangen mogelijk.
//
Deze voorbeeldcode is in het publieke domein.
#include
#define XstepPin 10 //Step pin
#define XdirPin 7 //Direction pin
byte previousPIN [2]; PIN betekent poort voor invoer
byte previousPORT [2];
VOID outputPort (byte portNumber, byte portValue)
{
alleen gegevens verzenden als deze verandert, anders krijg je te veel berichten!
Als (previousPIN [portNumber]! = portValue) {}
Firmata.sendDigitalPort (portNumber, portValue);
previousPIN [portNumber] = portValue;
Firmata.sendDigitalPort (portNumber, portValue);
}
}
VOID setPinModeCallback (byte pin, int modus) {}
if(PIN > 1) {/ / don't touch RxTx pinnen (0,1)
pinMode (pin, modus);
}
}
VOID digitalWriteCallback (byte poort, int value)
{
byte i;
byte currentPinValue, previousPinValue;
Als (waarde! = previousPORT[port]) {}
voor (ik = 0; ik < 8; i ++) {}
currentPinValue = (byte) waarde & (1 << ik);
previousPinValue = previousPORT [poort] & (1 << ik);
Als (currentPinValue! = previousPinValue) {}
digitalWrite (i + (poort * 8), currentPinValue);
}
}
previousPORT [poort] = waarde;
}
}
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); pinnen 0-7, het negeren van de Rx/Tx pinnen (0/1)
outputPort (1, PINB); pinnen 8-13
while(firmata.available()) {}
Firmata.processInput();
}
toegevoegde stepper reeks firmata code
digitalWrite(XstepPin,HIGH); stappen ondernemen
delayMicroseconds(2);
digitalWrite(XstepPin,LOW);
delayMicroseconds(2);
delayMicroseconds(1000); <<<<<< Gebruik CHANGE STEPPER SPEED <<<<<<<<
}
//////////////////////////////////Processing/////////////////////////////////
/**
* Eenvoudig schrijven. < gewijzigde besturingselement stepper richting
*
* Controleer of de muis over een rechthoek is en de status op de seriële poort schrijft.
* Dit voorbeeld werkt met de bedrading / Arduino programma dat volgt hieronder.
*/
importeren van processing.serial.*;
importeren van cc.arduino.*;
Arduino arduino;
Seriële myPort; Object maakt van seriële klasse
Gegevens ontvangen van de seriële poort
int ledPin = 13; PIN voor LED
int XdirPin = 7; PIN voor de richting van de stepper X
int XstepPin = 10; PIN voor X stap
VOID Setup
{
grootte (200, 200);
Ik weet dat de eerste poort in de seriële lijst op mijn mac
is altijd mijn FTDI adapter, dus ik Serial.list() [0 open].
Op Windows-computers wordt dit over het algemeen geopend COM1.
Open welke poort is degene die u gebruikt.
String portName = Serial.list() [0];
myPort = nieuwe Serial (deze, portName, 9600);
Arduino = nieuwe Arduino (dit, Arduino.list() [0], 57600); v1
arduino.pinMode (ledPin, Arduino.OUTPUT);
arduino.pinMode (XdirPin, Arduino.OUTPUT);
}
VOID draw() {}
Background(255);
Als (mouseOverRect() == true) {/ / als de muisaanwijzer zich boven het vierkant,
Fill(204); kleur wijzigen en
arduino.digitalWrite (ledPin, Arduino.HIGH); LED op
arduino.digitalWrite (XdirPin, Arduino.HIGH); Stepper richting deze manier
}
else {/ / als de muis is nog niet voorbij het plein,
Fill(0); kleur wijzigen en
arduino.digitalWrite (ledPin, Arduino.LOW); OPENDE
arduino.digitalWrite (XdirPin, Arduino.LOW); Stepper richting de andere kant
}
rect (50, 50, 100, 100); Teken een vierkant
}
Booleaanse mouseOverRect() {/ / Test als de muisaanwijzer zich boven het vierkant
retourneren ((mouseX > = 50) & & (mouseX < = 150) & & (mouseY > = 50) & & (mouseY < = 150));
}