Dependencies:   PID_ PWMOut YMotorDriverBase YMotorDriverPusher YMotorDriverServo YMotorDriverShooter YMotorDriverSupplier

Dependents:   YMD

Committer:
inst
Date:
Fri Nov 13 08:19:04 2015 +0000
Revision:
4:7b3ed02bf4cc
Parent:
2:2e3b56f045f5

        

Who changed what in which revision?

UserRevisionLine numberNew 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 4:7b3ed02bf4cc 7 YMotorDriver* YMotorDriver::mInstance = NULL;
inst 0:44b89a084daf 8 const PinName YMotorDriver::mAddressDeciderPinName[] = {
inst 0:44b89a084daf 9 dp17, dp18, dp26, dp25
inst 0:44b89a084daf 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 }