Committer:
inst
Date:
Wed Oct 14 06:04:53 2015 +0000
Revision:
1:9af02800ffac
Parent:
0:4b3f0e4681c9

        

Who changed what in which revision?

UserRevisionLine numberNew 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 }