YMotorDriverPusher.cpp@1:9af02800ffac, 2015-10-14 (annotated)
- Committer:
- inst
- Date:
- Wed Oct 14 06:04:53 2015 +0000
- Revision:
- 1:9af02800ffac
- Parent:
- 0:4b3f0e4681c9
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
inst | 0:4b3f0e4681c9 | 1 | #include "YMotorDriverBase.h" |
inst | 0:4b3f0e4681c9 | 2 | #include "YMotorDriverPusher.h" |
inst | 0:4b3f0e4681c9 | 3 | #include "mbed.h" |
inst | 0:4b3f0e4681c9 | 4 | |
inst | 1:9af02800ffac | 5 | //const float YMotorDriverPusher::mDuty = 0.75f; |
inst | 1:9af02800ffac | 6 | const float YMotorDriverPusher::mDuty = 1.0f; |
inst | 0:4b3f0e4681c9 | 7 | const PinName YMotorDriverPusher::mDinPinName[] = { |
inst | 0:4b3f0e4681c9 | 8 | dp2, |
inst | 0:4b3f0e4681c9 | 9 | dp4 |
inst | 0:4b3f0e4681c9 | 10 | }; |
inst | 0:4b3f0e4681c9 | 11 | |
inst | 0:4b3f0e4681c9 | 12 | YMotorDriverPusher::YMotorDriverPusher( char address ) : YMotorDriverBase( address ){ |
inst | 0:4b3f0e4681c9 | 13 | mSwitchDin = new DigitalIn*[ 2 ]; |
inst | 0:4b3f0e4681c9 | 14 | for ( int i = 0; i < 2; ++i ){ |
inst | 0:4b3f0e4681c9 | 15 | mSwitchDin[ i ] = new DigitalIn( mDinPinName[ i ] ); |
inst | 0:4b3f0e4681c9 | 16 | } |
inst | 1:9af02800ffac | 17 | mActionType = NO_OPERATION; |
inst | 1:9af02800ffac | 18 | mState = BETWEEN; |
inst | 0:4b3f0e4681c9 | 19 | } |
inst | 0:4b3f0e4681c9 | 20 | |
inst | 1:9af02800ffac | 21 | void YMotorDriverPusher::updateI2CSlave(){ |
inst | 0:4b3f0e4681c9 | 22 | switch ( mI2C->receive() ){ |
inst | 0:4b3f0e4681c9 | 23 | case I2CSlave::ReadAddressed:{ |
inst | 0:4b3f0e4681c9 | 24 | char buf = mState; |
inst | 0:4b3f0e4681c9 | 25 | mI2C->write( &buf, 1 ); |
inst | 0:4b3f0e4681c9 | 26 | break; |
inst | 0:4b3f0e4681c9 | 27 | } |
inst | 0:4b3f0e4681c9 | 28 | case I2CSlave::WriteGeneral: |
inst | 0:4b3f0e4681c9 | 29 | break; |
inst | 0:4b3f0e4681c9 | 30 | |
inst | 0:4b3f0e4681c9 | 31 | case I2CSlave::WriteAddressed:{ |
inst | 0:4b3f0e4681c9 | 32 | char buf; |
inst | 0:4b3f0e4681c9 | 33 | mI2C->read( &buf, 1 ); |
inst | 1:9af02800ffac | 34 | mActionType = static_cast< ActionType >( buf ); |
inst | 0:4b3f0e4681c9 | 35 | break; |
inst | 0:4b3f0e4681c9 | 36 | } |
inst | 0:4b3f0e4681c9 | 37 | |
inst | 0:4b3f0e4681c9 | 38 | case I2CSlave::NoData: |
inst | 0:4b3f0e4681c9 | 39 | break; |
inst | 0:4b3f0e4681c9 | 40 | } |
inst | 0:4b3f0e4681c9 | 41 | } |
inst | 0:4b3f0e4681c9 | 42 | |
inst | 1:9af02800ffac | 43 | void YMotorDriverPusher::updateSpecial(){ |
inst | 1:9af02800ffac | 44 | if ( mSwitchDin[ DRAW_LIMIT_SWITCH ]->read() ){ |
inst | 1:9af02800ffac | 45 | if ( mActionType == DRAWING ){ |
inst | 1:9af02800ffac | 46 | // スイッチが押されているのにその方向に動こうとしていたら止める |
inst | 1:9af02800ffac | 47 | mActionType = NO_OPERATION; |
inst | 0:4b3f0e4681c9 | 48 | } |
inst | 1:9af02800ffac | 49 | mState = HAS_FINISHED_DRAWING; |
inst | 1:9af02800ffac | 50 | } else if ( mSwitchDin[ PUSH_LIMIT_SWITCH ]->read() ){ |
inst | 1:9af02800ffac | 51 | if ( mActionType == PUSHING ){ |
inst | 1:9af02800ffac | 52 | // スイッチが押されているのにその方向に動こうとしていたら止める |
inst | 1:9af02800ffac | 53 | mActionType = NO_OPERATION; |
inst | 1:9af02800ffac | 54 | } |
inst | 1:9af02800ffac | 55 | mState = HAS_FINISHED_PUSHING; |
inst | 1:9af02800ffac | 56 | } else { |
inst | 1:9af02800ffac | 57 | mState = BETWEEN; |
inst | 0:4b3f0e4681c9 | 58 | } |
inst | 0:4b3f0e4681c9 | 59 | |
inst | 0:4b3f0e4681c9 | 60 | MotorAction action = BRAKE; |
inst | 1:9af02800ffac | 61 | if ( mActionType == DRAWING ){ |
inst | 0:4b3f0e4681c9 | 62 | action = REVERSE; |
inst | 1:9af02800ffac | 63 | } else if ( mActionType == PUSHING ){ |
inst | 0:4b3f0e4681c9 | 64 | action = FORWARD; |
inst | 0:4b3f0e4681c9 | 65 | } |
inst | 0:4b3f0e4681c9 | 66 | |
inst | 0:4b3f0e4681c9 | 67 | setMotorAction( action ); |
inst | 0:4b3f0e4681c9 | 68 | setDuty( mDuty ); |
inst | 0:4b3f0e4681c9 | 69 | } |