Dependencies: PID_ PWMOut YMotorDriverBase YMotorDriverPusher YMotorDriverServo YMotorDriverShooter YMotorDriverSupplier
YMotorDriver.cpp@2:2e3b56f045f5, 2015-10-14 (annotated)
- Committer:
- inst
- Date:
- Wed Oct 14 06:05:13 2015 +0000
- Revision:
- 2:2e3b56f045f5
- Parent:
- 1:793d739ebf5e
- Child:
- 4:7b3ed02bf4cc
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
inst | 0:44b89a084daf | 1 | #include "YMotorDriver.h" |
inst | 0:44b89a084daf | 2 | #include "YMotorDriverServo.h" |
inst | 0:44b89a084daf | 3 | #include "YMotorDriverSupplier.h" |
inst | 0:44b89a084daf | 4 | #include "YMotorDriverPusher.h" |
inst | 0:44b89a084daf | 5 | #include "YMotorDriverShooter.h" |
inst | 0:44b89a084daf | 6 | |
inst | 0:44b89a084daf | 7 | const PinName YMotorDriver::mAddressDeciderPinName[] = { |
inst | 0:44b89a084daf | 8 | dp17, dp18, dp26, dp25 |
inst | 0:44b89a084daf | 9 | }; |
inst | 2:2e3b56f045f5 | 10 | |
inst | 0:44b89a084daf | 11 | const char YMotorDriver::mYMotorDriverBaseAddress[] = { |
inst | 0:44b89a084daf | 12 | 0xA0 | ( 0x01 << 1 ), |
inst | 0:44b89a084daf | 13 | 0xA0 | ( 0x02 << 1 ), |
inst | 2:2e3b56f045f5 | 14 | 0xA0 | ( 0x03 << 1 ) |
inst | 0:44b89a084daf | 15 | }; |
inst | 0:44b89a084daf | 16 | const char YMotorDriver::mYMotorDriverServoAddress[] = { |
inst | 2:2e3b56f045f5 | 17 | 0xA0 | ( 0x04 << 1 ), |
inst | 0:44b89a084daf | 18 | 0xA0 | ( 0x05 << 1 ), |
inst | 0:44b89a084daf | 19 | 0xA0 | ( 0x06 << 1 ), |
inst | 2:2e3b56f045f5 | 20 | 0xA0 | ( 0x0D << 1 ), |
inst | 2:2e3b56f045f5 | 21 | 0xA0 | ( 0x08 << 1 ) |
inst | 2:2e3b56f045f5 | 22 | }; |
inst | 2:2e3b56f045f5 | 23 | const char YMotorDriver::mYMotorDriverShooterAddress[] = { |
inst | 2:2e3b56f045f5 | 24 | 0xA0 | ( 0x09 << 1 ) |
inst | 2:2e3b56f045f5 | 25 | }; |
inst | 2:2e3b56f045f5 | 26 | const char YMotorDriver::mYMotorDriverPusherAddress[] = { |
inst | 0:44b89a084daf | 27 | 0xA0 | ( 0x0A << 1 ) |
inst | 0:44b89a084daf | 28 | }; |
inst | 0:44b89a084daf | 29 | const char YMotorDriver::mYMotorDriverSupplierAddress[] = { |
inst | 2:2e3b56f045f5 | 30 | 0xA0 | ( 0x0B << 1 ) |
inst | 0:44b89a084daf | 31 | }; |
inst | 2:2e3b56f045f5 | 32 | const size_t YMotorDriver::mNumOfYMotorDriverBaseAddress = 3; |
inst | 2:2e3b56f045f5 | 33 | const size_t YMotorDriver::mNumOfYMotorDriverServoAddress = 5; |
inst | 2:2e3b56f045f5 | 34 | const size_t YMotorDriver::mNumOfYMotorDriverSupplierAddress = 1; |
inst | 0:44b89a084daf | 35 | const size_t YMotorDriver::mNumOfYMotorDriverPusherAddress = 1; |
inst | 0:44b89a084daf | 36 | const size_t YMotorDriver::mNumOfYMotorDriverShooterAddress = 1; |
inst | 0:44b89a084daf | 37 | |
inst | 0:44b89a084daf | 38 | YMotorDriver::YMotorDriver(){ |
inst | 0:44b89a084daf | 39 | char address = 0xA0; // 10100000(2) |
inst | 0:44b89a084daf | 40 | for ( int i = 0; i < 4; ++i ){ |
inst | 0:44b89a084daf | 41 | // 101xxxx0 --- xxxxの部分に入力データが入る |
inst | 0:44b89a084daf | 42 | DigitalIn d( mAddressDeciderPinName[ i ] ); |
inst | 0:44b89a084daf | 43 | address |= d.read() << ( i + 1 ); |
inst | 0:44b89a084daf | 44 | } |
inst | 0:44b89a084daf | 45 | |
inst | 2:2e3b56f045f5 | 46 | // アドレスによって機能を変える |
inst | 0:44b89a084daf | 47 | // Motor |
inst | 0:44b89a084daf | 48 | for ( int i = 0; i < mNumOfYMotorDriverBaseAddress; ++i ){ |
inst | 0:44b89a084daf | 49 | if ( address == mYMotorDriverBaseAddress[ i ] ){ |
inst | 2:2e3b56f045f5 | 50 | mYMotorDriver = new YMotorDriverBase( address, i ); |
inst | 0:44b89a084daf | 51 | return; |
inst | 0:44b89a084daf | 52 | } |
inst | 0:44b89a084daf | 53 | } |
inst | 0:44b89a084daf | 54 | // Servo |
inst | 0:44b89a084daf | 55 | for ( int i = 0; i < mNumOfYMotorDriverServoAddress; ++i ){ |
inst | 0:44b89a084daf | 56 | if ( address == mYMotorDriverServoAddress[ i ] ){ |
inst | 0:44b89a084daf | 57 | mYMotorDriver = new YMotorDriverServo( address, i ); |
inst | 0:44b89a084daf | 58 | return; |
inst | 0:44b89a084daf | 59 | } |
inst | 0:44b89a084daf | 60 | } |
inst | 0:44b89a084daf | 61 | // Supplier |
inst | 0:44b89a084daf | 62 | for ( int i = 0; i < mNumOfYMotorDriverSupplierAddress; ++i ){ |
inst | 0:44b89a084daf | 63 | if ( address == mYMotorDriverSupplierAddress[ i ] ){ |
inst | 0:44b89a084daf | 64 | mYMotorDriver = new YMotorDriverSupplier( address ); |
inst | 0:44b89a084daf | 65 | return; |
inst | 0:44b89a084daf | 66 | } |
inst | 0:44b89a084daf | 67 | } |
inst | 0:44b89a084daf | 68 | // Pusher |
inst | 0:44b89a084daf | 69 | for ( int i = 0; i < mNumOfYMotorDriverPusherAddress; ++i ){ |
inst | 0:44b89a084daf | 70 | if ( address == mYMotorDriverPusherAddress[ i ] ){ |
inst | 0:44b89a084daf | 71 | mYMotorDriver = new YMotorDriverPusher( address ); |
inst | 0:44b89a084daf | 72 | return; |
inst | 0:44b89a084daf | 73 | } |
inst | 0:44b89a084daf | 74 | } |
inst | 0:44b89a084daf | 75 | // Shooter |
inst | 0:44b89a084daf | 76 | for ( int i = 0; i < mNumOfYMotorDriverShooterAddress; ++i ){ |
inst | 0:44b89a084daf | 77 | if ( address == mYMotorDriverShooterAddress[ i ] ){ |
inst | 0:44b89a084daf | 78 | mYMotorDriver = new YMotorDriverShooter( address ); |
inst | 0:44b89a084daf | 79 | return; |
inst | 0:44b89a084daf | 80 | } |
inst | 0:44b89a084daf | 81 | } |
inst | 2:2e3b56f045f5 | 82 | |
inst | 2:2e3b56f045f5 | 83 | // 機能が割り振られていないアドレスならLEDを点滅させておく |
inst | 0:44b89a084daf | 84 | DigitalOut err( dp28 ); |
inst | 0:44b89a084daf | 85 | while ( true ){ |
inst | 0:44b89a084daf | 86 | printf( "address:%d\r", address ); |
inst | 0:44b89a084daf | 87 | err = 1; |
inst | 0:44b89a084daf | 88 | wait( 0.5f ); |
inst | 0:44b89a084daf | 89 | err = 0; |
inst | 0:44b89a084daf | 90 | wait( 0.5f ); |
inst | 0:44b89a084daf | 91 | } |
inst | 0:44b89a084daf | 92 | } |
inst | 0:44b89a084daf | 93 | |
inst | 0:44b89a084daf | 94 | YMotorDriver::~YMotorDriver(){ |
inst | 0:44b89a084daf | 95 | delete mYMotorDriver; |
inst | 0:44b89a084daf | 96 | } |
inst | 0:44b89a084daf | 97 | |
inst | 0:44b89a084daf | 98 | void YMotorDriver::update(){ |
inst | 0:44b89a084daf | 99 | mYMotorDriver->update(); |
inst | 0:44b89a084daf | 100 | } |