Stap 13: Volg de stuiterende bal met Firmata! (dit werkt goed)
http://www.YouTube.com/watch?v=VYgbStFaQbMNu heb ik genomen de stuiterende bal schets en het in combinatie met de Firmata een.
Nu volgen de stappenmotoren soepel het pad van de stuiterende bal!!
Nu krijgen we ergens!
//////////////////////////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;
int YstepPin = 2;
int YdirPin = 3;
parameters voor de bal
float x = 50,0;
float y = 50,0;
zweven mifluz = 1,0;
float snelle =. 4;
float straal = 15,0;
int directionX = 1;
int directionY = 1;
VOID Setup
{
opstelling van de tekening
grootte (100, 100);
Smooth();
noStroke();
ellipseMode(RADIUS);
Setup communicatie met Arduino
Arduino = nieuwe Arduino (dit, 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, breedte, hoogte);
Fill(255);
ellips (x, y, straal, straal);
x += mifluz * directionX;
Als ((x > breedte-radius) || (x < RADIUS)) {//change X richting als de bal de kant van het vak raakt
directionX = - directionX;
}
y += snelle * directionY;
Als ((y > hoogte-radius) || (y < RADIUS)) {//change Y richting als de bal de kant van het vak raakt
directionY = - directionY;
}
Als (directionX > = 0) {}
arduino.digitalWrite (ledPin, Arduino.HIGH);
arduino.digitalWrite (XdirPin, Arduino.HIGH);
}
else {}
arduino.digitalWrite (ledPin, Arduino.LOW);
arduino.digitalWrite (XdirPin, Arduino.LOW);
}
Als (directionY > = 0) {}
arduino.digitalWrite (ledPin, Arduino.HIGH);
arduino.digitalWrite (YdirPin, Arduino.HIGH);
}
else {}
arduino.digitalWrite (ledPin, Arduino.LOW);
arduino.digitalWrite (YdirPin, Arduino.LOW);
}
}