Stap 11: correctie op firmata...
Het lijkt erop dat er iets mis in stap 10, die maakt het is dus de stappenmotor niet wordt uitgevoerd.De onderstaande code werkt - maar niet zo vele commentaren.
//////////////////////////Arduino//////////////////////////
Bedrading/Arduino code: / / simmple digitale firmata
Ondersteunt zo veel digitale ingangen en uitgangen mogelijk.
Deze voorbeeldcode is in het publieke domein.
#include < Firmata.h >
#define XstepPin 10
#define XdirPin 7
#define YstepPin 2
#define YdirPin 3
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
digitalWrite(YstepPin,HIGH);
delayMicroseconds(2);
digitalWrite(XstepPin,LOW);
digitalWrite(YstepPin,LOW);
delayMicroseconds(2);
delayMicroseconds(1000); <<<<<< Gebruik CHANGE STEPPER SPEED??? <<<<<<<<
}
/////////////////////////////PROCESSING//////////////////////////////////////
/**
* Eenvoudig schrijven.
*
* 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;
int XstepPin = 10;
int XdirPin = 7;
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 (XstepPin, 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); Stuur een H om aan te geven van de muisaanwijzer zich boven het vierkant
arduino.digitalWrite (XdirPin, Arduino.HIGH);
arduino.digitalWrite (XstepPin, Arduino.HIGH);
delay(1);
arduino.digitalWrite (XstepPin, Arduino.LOW);
delay(1);
}
else {/ / als de muis is nog niet voorbij het plein,
Fill(0); kleur wijzigen en
arduino.digitalWrite (ledPin, Arduino.LOW); Stuur anders een L
arduino.digitalWrite (XdirPin, Arduino.LOW);
arduino.digitalWrite (XstepPin, Arduino.HIGH);
delay(1);
arduino.digitalWrite(XstepPin,Arduino.LOW);
delay(1);
}
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));
}