Joshua Brown
/
TactileMouse
First revision of tactile mouse code
taxel.cpp
- Committer:
- JPB515
- Date:
- 2019-04-08
- Revision:
- 0:f254a3cfe0f6
File content as of revision 0:f254a3cfe0f6:
#include "mbed.h" #include "tactile_mouse.hpp" #include "taxel.hpp" taxel::taxel(){ steps=0; targetSteps=0; lastStep=1; delay = 0.003; changed = false; } taxel::taxel(int x_, int y_){ x=x_; y=y_; steps=0; targetSteps=0; lastStep=1; delay = 0.003; changed = false; } taxel::~taxel(){} void taxel::step1(){ MotorA1=1; MotorA2=0; MotorB1=0; MotorB2=1; wait(0.000001); step = 1; wait(0.000001); step=0; wait(delay); lastStep = 1; } void taxel::step2(){ MotorA1=1; MotorA2=0; MotorB1=1; MotorB2=0; wait(0.000001); step = 1; wait(0.000001); step=0; wait(delay); lastStep = 2; } void taxel::step3(){ MotorA1=0; MotorA2=1; MotorB1=1; MotorB2=0; wait(0.000001); step = 1; wait(0.000001); step=0; wait(delay); lastStep = 3; } void taxel::step4(){ MotorA1=0; MotorA2=1; MotorB1=0; MotorB2=1; wait(0.000001); step = 1; wait(0.000001); step=0; wait(delay); lastStep = 4; } void taxel::stop(){ MotorA1=0; MotorA2=0; MotorB1=0; MotorB2=0; step = 1; step=0; } //Extend and retract functions take time delay in S void taxel::down(){ step4(); step3(); step2(); step1(); stop(); } void taxel::up(){ step1(); step2(); step3(); step4(); stop(); } void taxel::selectMotor(int x, int y){ switch (x){ case 0: BOARD_MUXA=0; BOARD_MUXB=0; BOARD_MUXC=0; break; case 1: BOARD_MUXA=1; BOARD_MUXB=0; BOARD_MUXC=0; break; case 2: BOARD_MUXA=0; BOARD_MUXB=1; BOARD_MUXC=0; break; case 3: BOARD_MUXA=1; BOARD_MUXB=1; BOARD_MUXC=0; break; case 4: BOARD_MUXA=0; BOARD_MUXB=0; BOARD_MUXC=1; break; case 5: BOARD_MUXA=1; BOARD_MUXB=0; BOARD_MUXC=1; break; case 6: BOARD_MUXA=0; BOARD_MUXB=1; BOARD_MUXC=1; break; case 7: BOARD_MUXA=1; BOARD_MUXB=1; BOARD_MUXC=1; break; default:BOARD_MUXA=0; BOARD_MUXB=0; BOARD_MUXC=0; break; } switch (y){ case 0: MUXA=0; MUXB=0; MUXC=0; break; case 1: MUXA=1; MUXB=0; MUXC=0; break; case 2: MUXA=0; MUXB=1; MUXC=0; break; case 3: MUXA=1; MUXB=1; MUXC=0; break; case 4: MUXA=0; MUXB=0; MUXC=1; break; case 5: MUXA=1; MUXB=0; MUXC=1; break; case 6: MUXA=0; MUXB=1; MUXC=1; break; case 7: MUXA=1; MUXB=1; MUXC=1; break; default:MUXA=0; MUXB=0; MUXC=0; break; } } void taxel::stepUp(){ selectMotor(x,y); switch (lastStep){ case 1: step2(); break; case 2: step3(); break; case 3: step4(); break; case 4: step1(); break; } steps++; //deactivate.attach(callback(this, &taxel::stop), 0.015); wait(0.02); stop(); } void taxel::stepDown(){ selectMotor(x,y); switch (lastStep){ case 1: step4(); break; case 2: step1(); break; case 3: step2(); break; case 4: step3(); break; } steps--; //deactivate.attach(callback(this, &taxel::stop), 0.015); wait(0.02); stop(); } void taxel::setTarget(int target){ if(target != steps){ changed = true; } targetSteps = target; } bool taxel::stepToTarget(){ if(!changed){ return changed; } if(steps > targetSteps){ stepDown(); if(steps == targetSteps){ changed = false; } return changed; } if(steps < targetSteps){ stepUp(); if(steps == targetSteps){ changed = false; } return changed; } return changed; //Should never get here }