Étape 10 : Faire avec Firmata
Voici une autre méthode qui utilise la bibliothèque Firmata pour changer la direction de la commande de moteur de transformation.Vous pouvez en savoir plus à ce sujet ici :
http://Arduino.cc/en/Reference/Firmata
et ici :
http://Firmata.org/wiki/main_page
Je ne comprends pas les détails. Mais, d’après mon expérience jusqu'à présent, je sais qui est fait un bon travail de gérer la communication entre le PC et l’Arduino. Ainsi, je suis heureux d’ignorer les détails pour l’instant.
J’ai commencé en modifiant un exemple figurant dans le theArduinoIDE appelé « SimpleDigitalFirmata ». Une fois ce code est chargé sur l’Arduino, vous pouvez communiquer avec les broches numériques de la carte Arduino directement à partir de traitement.
Dans le traitement, je travaille depuis un exemple qui allume et éteint une LED sur la carte Arduino lorsque vous déplacez une souris sur une carré aube du moniteur du PC.
Pour que le voyant de contrôle de traitement et un moteur pas à pas, vous devez modifier le code pour l’Arduino et le traitement.
Du côté de l’Arduino -, j’ai défini les broches de moteurs pas à pas dans la partie supérieure de l’esquisse. Ensuite, j’ai coincé dans le code de conduire le stepper à la fin de la boucle principale. J’ai mis cela en dehors du code qui lit le port série. Donc le stepper ira juste.
La direction du stepper passe directement de la transformation. L’exemple de code activé et désactivé une LED sur pin13. Alors, j’ai juste fait l’axe de direction étape faire la même chose que la LED.
Voici le code. Cela ne contrôle que le stepper X.
///////////////// ARDUINO //////////////////////
Prend en charge le plus grand nombre d’entrées digitales et sorties que possible.
//
Cet exemple de code est dans le domaine public.
#include
#define XstepPin 10 //Step broche
#define XdirPin 7 //Direction broche
previousPIN Byte [2] ; PIN signifie PORT pour l’entrée
previousPORT Byte [2] ;
void outputPort (numéro_port octets, portValue octets)
{
Envoyer uniquement les données lorsqu’il modifie, dans le cas contraire, vous obtenez trop de messages !
Si (previousPIN [numéro_port]! = portValue) {}
Firmata.sendDigitalPort (numéro de port, portValue) ;
previousPIN [numéro_port] = portValue ;
Firmata.sendDigitalPort (numéro de port, portValue) ;
}
}
void setPinModeCallback (byte pin, int mode) {}
if(pin > 1) {/ / Don't touch RxTx épingles (0,1)
pinMode (goupille, mode) ;
}
}
void digitalWriteCallback (byte port, int valeur)
{
octet i ;
currentPinValue octets, previousPinValue ;
Si (valeur! = {previousPORT[port])}
pour (i = 0; i < 8; i ++) {}
currentPinValue = valeur (octets) & (1 << j’ai) ;
previousPinValue = previousPORT [port] & (1 << j’ai) ;
Si (currentPinValue! = previousPinValue) {}
digitalWrite (i + (port * 8), currentPinValue) ;
}
}
previousPORT [port] = value ;
}
}
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) ; broches 0-7, ignorant les broches Rx/Tx (0/1)
outputPort (1, PINB) ; broches 8-13
{while(Firmata.available())}
Firmata.processInput() ;
}
séquence de pas à pas ajouté firmata code
digitalWrite(XstepPin,HIGH) ; prendre des mesures
delayMicroseconds(2) ;
digitalWrite(XstepPin,LOW) ;
delayMicroseconds(2) ;
delayMicroseconds(1000) ; <<<<<< Permet de modifier la vitesse moteur pas à pas <<<<<<<<
}
//////////////////////////////////Processing/////////////////////////////////
/**
* Simple d’écrire. < modifiée d’orientation pas à pas de contrôle
*
* Vérifier si la souris est sur un rectangle et écrit l’État sur le port série.
* Cet exemple fonctionne avec le câblage / Arduino programme qui suit ci-dessous.
*/
Import processing.serial.* ;
Import cc.arduino.* ;
Arduino arduino ;
Serial myPort ; Créez l’objet de classe de la série
Données reçues du port série
int ledPin = 13 ; broche pour LED
int XdirPin = 7 ; broche pour la direction de stepper X
int XstepPin = 10 ; broche pour X étape
void setup()
{
taille (200, 200) ;
Je sais que le premier port dans la liste de série sur mon mac
est-ce toujours mon adaptateur FTDI, alors j’ai ouvert Serial.list() [0].
Sur les machines Windows, cela ouvre généralement COM1.
Ouvert quelque port est celui que vous utilisez.
String portName = Serial.list() [0] ;
myPort = nouvelle série (ce, portName, 9600) ;
Arduino = nouvelle Arduino (ce, Arduino.list() [0], 57600) ; v1
arduino.pinMode (ledPin, Arduino.OUTPUT) ;
arduino.pinMode (XdirPin, Arduino.OUTPUT) ;
}
{} void draw()
Background(255) ;
Si (mouseOverRect() == true) {/ / si la souris se trouve sur place,
Fill(204) ; changer la couleur et
arduino.digitalWrite (ledPin, Arduino.HIGH) ; LED sur
arduino.digitalWrite (XdirPin, Arduino.HIGH) ; Direction de moteurs pas à pas de cette façon
}
else {/ / si la souris n’est pas sur place,
Fill(0) ; changer la couleur et
arduino.digitalWrite (ledPin, Arduino.LOW) ; La LED est éteinte
arduino.digitalWrite (XdirPin, Arduino.LOW) ; Direction de moteurs pas à pas l’inverse
}
Rect (50, 50, 100, 100) ; Dessinez un carré
}
Boolean mouseOverRect() {/ / Test si la souris se trouve sur la place
Return ((mouseX > = 50) & & (mouseX < = 150) & & (mouseY > = 50) & & (mouseY < = 150)) ;
}