Empty program for LPC4088
Diff: main.cpp
- Revision:
- 0:1f5dc83e66d6
diff -r 000000000000 -r 1f5dc83e66d6 main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Wed Feb 17 16:57:43 2016 +0000 @@ -0,0 +1,133 @@ +#include "mbed.h" + +/*****Globals*****/ + +// Motor Selectors +#define x 'x' +#define y 'y' +#define f 'f' + +// Direction Selectors +#define cw 0 // = 0 +#define ccw 1 // = 1 + +// Motor Speed +#define xMotorPeriod 4 // 25kHz +#define yMotorPeriod 4 // 25kHz +#define fMotorPeriod 15 + +#define xFreq 25000 +#define yFreq 25000 + +class Drive{ + public: + int stepCount, position, distance, dir, period; + Drive(PinName pulse, PinName direction, int motorPeriod) : _pulse(pulse), _direction(direction) { + _pulse.write(0.0f); + _direction = 0; + distance = 1; + stepCount = 0; + period = motorPeriod; + dir = cw; + } + void on(){ + _pulse.period_us(period); // set period + _pulse.write(0.50f); // 50% duty cycle + } + // edit members + void setDistance(int value){ + distance = value; + } + void setDirection(int value){ + dir = value; + } + void stepIncr(){ + stepCount++; + if(stepCount == distance){ // stop motor + _pulse.write(0.0f); + stepCount = 0; + } + } + void resetCount(){ + stepCount = 0; + } + private: + PwmOut _pulse; + DigitalOut _direction; +}; + +// Motors +Drive xMotor(p7, p10, xMotorPeriod); +Drive yMotor(p8, p11, yMotorPeriod); +Drive fMotor(p9, p12, fMotorPeriod); + +InterruptIn xStepRead(p1); +InterruptIn yStepRead(p2); +InterruptIn fStepRead(p3); + +// LEDs +DigitalOut myled1(LED1); +DigitalOut myled2(LED2); +DigitalOut myled3(LED3); +DigitalOut myled4(LED4); + +/*****Functions*****/ + +// motor drive functions +void motorDrive(int steps, char motor, int direction){ + // Input int pulse for distance // 1 pulse = + // Input char motor as the drive motor + // Return value of 0 means freq input was negative, 1 success + // No more than one motor can run at a time (PWM limit) + + /* Example + int main(){ // Generates a 25 kHz PWM for 15 seconds + motorPWM(500, 'x'); + wait(15.0); + motorStop('x'); + } + */ + switch(motor){ + case 'x': // x track motor + xMotor.resetCount(); + xMotor.setDistance(steps); + xMotor.setDirection(direction); + + xStepRead.rise(&xMotor, &Drive::stepIncr); + wait_us(5); + xMotor.on(); + break; + case 'y': // y track motor + yMotor.resetCount(); + yMotor.setDistance(steps); + yMotor.setDirection(direction); + + yStepRead.rise(&yMotor, &Drive::stepIncr); + wait_us(5); + yMotor.on(); + break; + case 'f': // friction motor + fMotor.resetCount(); + fMotor.setDistance(steps); + fMotor.setDirection(direction); + + fStepRead.rise(&fMotor, &Drive::stepIncr); + wait_us(5); + fMotor.on(); + break; + } +} + +int main() { + myled1 = 1; + myled2 = 1; + myled3 = 1; + myled4 = 1; + + while(1){ + motorDrive(xFreq*5, x, cw); + wait(10.0); + motorDrive(yFreq*5, y, cw); + wait(10.0); + } +} \ No newline at end of file