YMotorDriverSupplier.cpp@1:9d8fe1f0ee36, 2015-10-14 (annotated)
- Committer:
- inst
- Date:
- Wed Oct 14 06:04:26 2015 +0000
- Revision:
- 1:9d8fe1f0ee36
- Parent:
- 0:bb84da068c45
Who changed what in which revision?
User | Revision | Line number | New 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 | } |