Committer:
inst
Date:
Wed Oct 14 06:04:26 2015 +0000
Revision:
1:9d8fe1f0ee36
Parent:
0:bb84da068c45

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
inst 0:bb84da068c45 1 #include "YMotorDriverBase.h"
inst 0:bb84da068c45 2 #include "YMotorDriverSupplier.h"
inst 0:bb84da068c45 3 #include "mbed.h"
inst 0:bb84da068c45 4
inst 1:9d8fe1f0ee36 5 const float YMotorDriverSupplier::mDuty = 0.20f;
inst 1:9d8fe1f0ee36 6 const PinName YMotorDriverSupplier::mLazerPinName = dp2;
inst 1:9d8fe1f0ee36 7 //const uint32_t YMotorDriverSupplier::mValidSignalWidth_us = 40 * 1000;
inst 1:9d8fe1f0ee36 8 //const uint32_t YMotorDriverSupplier::mValidSignalWidth_us = 17 * 1000;
inst 1:9d8fe1f0ee36 9 const uint32_t YMotorDriverSupplier::mValidSignalWidth_us = 10;
inst 0:bb84da068c45 10
inst 1:9d8fe1f0ee36 11 YMotorDriverSupplier::YMotorDriverSupplier( char address ) : YMotorDriverBase( address, /* id = */ 5 ){
inst 1:9d8fe1f0ee36 12 mLazer = new InterruptIn( mLazerPinName );
inst 1:9d8fe1f0ee36 13 mLazer->rise( this, &YMotorDriverSupplier::itr );
inst 1:9d8fe1f0ee36 14 mTimer = new Timer;
inst 0:bb84da068c45 15 mIsWorking = false;
inst 0:bb84da068c45 16 }
inst 0:bb84da068c45 17
inst 0:bb84da068c45 18 void YMotorDriverSupplier::itr(){
inst 1:9d8fe1f0ee36 19 if ( ( mTimer->read_us() > mValidSignalWidth_us ) && mLazer->read() ){
inst 0:bb84da068c45 20 mIsWorking = false;
inst 0:bb84da068c45 21 mTimer->reset();
inst 0:bb84da068c45 22 mTimer->stop();
inst 0:bb84da068c45 23 }
inst 0:bb84da068c45 24 }
inst 0:bb84da068c45 25
inst 1:9d8fe1f0ee36 26 void YMotorDriverSupplier::updateI2CSlave(){
inst 0:bb84da068c45 27 switch ( mI2C->receive() ){
inst 0:bb84da068c45 28 case I2CSlave::ReadAddressed:{
inst 0:bb84da068c45 29 char buf = mIsWorking;
inst 0:bb84da068c45 30 mI2C->write( &buf, 1 );
inst 0:bb84da068c45 31 break;
inst 0:bb84da068c45 32 }
inst 0:bb84da068c45 33 case I2CSlave::WriteGeneral:
inst 0:bb84da068c45 34 break;
inst 0:bb84da068c45 35
inst 0:bb84da068c45 36 case I2CSlave::WriteAddressed:{
inst 0:bb84da068c45 37 char buf;
inst 0:bb84da068c45 38 mI2C->read( &buf, 1 );
inst 0:bb84da068c45 39
inst 0:bb84da068c45 40 if ( buf && !mIsWorking ){
inst 0:bb84da068c45 41 mTimer->reset();
inst 0:bb84da068c45 42 mTimer->start();
inst 0:bb84da068c45 43 }
inst 0:bb84da068c45 44
inst 0:bb84da068c45 45 mIsWorking = buf;
inst 0:bb84da068c45 46 break;
inst 0:bb84da068c45 47 }
inst 0:bb84da068c45 48
inst 0:bb84da068c45 49 case I2CSlave::NoData:
inst 0:bb84da068c45 50 break;
inst 0:bb84da068c45 51 }
inst 0:bb84da068c45 52 }
inst 0:bb84da068c45 53
inst 1:9d8fe1f0ee36 54 void YMotorDriverSupplier::updateSpecial(){
inst 0:bb84da068c45 55 MotorAction action = BRAKE;
inst 0:bb84da068c45 56
inst 1:9d8fe1f0ee36 57 if ( mIsWorking ){
inst 0:bb84da068c45 58 action = FORWARD;
inst 0:bb84da068c45 59 setDuty( mDuty );
inst 0:bb84da068c45 60 }
inst 0:bb84da068c45 61
inst 0:bb84da068c45 62 setMotorAction( action );
inst 0:bb84da068c45 63 }