Etape 12 : corrigé et commenté
Voici un troisième passage au code Firmata.Cela devrait fonctionner et inclut des commentaires.
///////////////// ARDUINO //////////////////////
/ * Prend en charge le plus grand nombre d’entrées digitales et sorties que possible.
* < modifiés pour piloter un moteur pas à pas
* Cet exemple de code est dans le domaine public.
*/
#include < Firmata.h >
#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(XdirPin,HIGH) ;
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érifiez 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 ;
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)) ;
}