Étape 13 : Suivez la balle qui rebondit avec Firmata ! (cela fonctionne bien)
http://www.youtube.com/watch?v=VYgbStFaQbMMaintenant, j’ai pris l’esquisse de balle rebondissante et combiné avec le Firmata un.
Maintenant les moteurs pas à pas suivront en douceur la trajectoire de la balle qui rebondit !
Maintenant, nous recevons quelque part !
//////////////////////////Arduino//////////////////////////
Câblage/Arduino code: / / simmple firmata numérique
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 < Firmata.h >
#define XstepPin 10
#define XdirPin 7
#define YstepPin 2
#define YdirPin 3
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
digitalWrite(YstepPin,HIGH) ;
delayMicroseconds(2) ;
digitalWrite(XstepPin,LOW) ;
digitalWrite(YstepPin,LOW) ;
delayMicroseconds(2) ;
delayMicroseconds(1000) ; <<<<<< Permet de modifier la vitesse STEPPER??? <<<<<<<<
}
///////////////////PROCESSING//////////////////////////////
/**
* Simple d’écrire.
*
* 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 ;
int XstepPin = 10 ;
int XdirPin = 7 ;
int YstepPin = 2 ;
int YdirPin = 3 ;
paramètres pour le bal
float x = 50,0 ;
float y = 50,0 ;
flotteur speedX = 1.0 ;
flotteur rapide =. 4 ;
rayon de flotteur = 15,0 ;
int directionX = 1 ;
int directionY = 1 ;
void setup()
{
configuration du dessin
taille (100, 100) ;
Smooth() ;
noStroke() ;
ellipseMode(RADIUS) ;
communication d’installation avec Arduino
Arduino = nouvelle Arduino (ce, Arduino.list() [0], 57600) ; v1
arduino.pinMode (ledPin, Arduino.OUTPUT) ;
arduino.pinMode (XstepPin, Arduino.OUTPUT) ;
arduino.pinMode (XdirPin, Arduino.OUTPUT) ;
arduino.pinMode (YstepPin, Arduino.OUTPUT) ;
arduino.pinMode (YdirPin, Arduino.OUTPUT) ;
}
{} void draw()
Fill(0,12) ;
Rect (0,0, largeur, hauteur) ;
Fill(255) ;
ellipse (x, y, rayon, rayon) ;
speedX x += * directionX ;
Si ((x > largeur-rayon) || (x < RADIUS)) {//change X direction si la balle frappe le côté de la boîte
directionX = - directionX ;
}
y += rapide * directionY ;
Si ((y > hauteur-rayon) || (y < RADIUS)) {//change Y direction si la balle frappe le côté de la boîte
directionY = - directionY ;
}
Si (directionX > = 0) {}
arduino.digitalWrite (ledPin, Arduino.HIGH) ;
arduino.digitalWrite (XdirPin, Arduino.HIGH) ;
}
else {}
arduino.digitalWrite (ledPin, Arduino.LOW) ;
arduino.digitalWrite (XdirPin, Arduino.LOW) ;
}
Si (directionY > = 0) {}
arduino.digitalWrite (ledPin, Arduino.HIGH) ;
arduino.digitalWrite (YdirPin, Arduino.HIGH) ;
}
else {}
arduino.digitalWrite (ledPin, Arduino.LOW) ;
arduino.digitalWrite (YdirPin, Arduino.LOW) ;
}
}