足上げセンサ八個版仮
Dependencies: mbed
Fork of 4LegUpDown_8sense by
main.cpp
- Committer:
- ryuna
- Date:
- 2014-08-20
- Revision:
- 0:76ba33d3b4a6
- Child:
- 1:807091115672
File content as of revision 0:76ba33d3b4a6:
#include "mbed.h" #define MOVE_TIME 0.11 #define WAIT_TIME 0.02 #define PWM_LEVEL 1.0// 11.1 / 7.4 /* センサの数を八個で足一つに付き二つのセンサで足を上下させるプログラム. はじめのリミットスイッチが押されてもう一度押されるまでの時間を計り現在の速さを概算してタイマー制御に役立てる *//**/ Serial pc(USBTX,USBRX); Timeout _toMotor[8]; Timeout _toWait[4]; DigitalIn limit[8] = {p5,p6,p7,p8,p9,p10,p11,p12 }; DigitalOut _doLed[4] = {LED1, LED2, LED3, LED4 }; BusOut _boMotor(p13, p14, p15, p16, p17, p18, p19, p20 );//four motors //{left front, right front, left back ,right back } in sequence? PwmOut _poPwm[4] = {p21, p22, p23, p24 }; /**more use binary number 0xA0 = 10100000 0x50 = 01010000 0x0A = 00001010 0x05 = 00000101 **/ volatile bool bWait[4] = {0}; void _atWaitStop0(){//atatch Time Stop0 //make delay time bWait[0] = 0; } void _atWaitStop1(){//atatch Time Stop0 //make delay time bWait[1] = 0; } void _atWaitStop2(){//atatch Time Stop0 //make delay time bWait[2] = 0; } void _atWaitStop3(){//atatch Time Stop0 //make delay time bWait[3] = 0; } void _atMotorStop0(){//atatch Motor Stop0 _boMotor = _boMotor & 0x7F; //01111111 指定ピンのみ変更 //left front leg up _doLed[0] = 0; } void _atMotorStop1(){ _toWait[0].attach(&_atWaitStop0,WAIT_TIME); _boMotor = _boMotor & 0xBF; //10111111 指定ピンのみ変更 //left front leg down _doLed[1] = 0; } void _atMotorStop2(){ _boMotor = _boMotor & 0xF7; //11110111 指定ピンのみ変更 //left back leg up _doLed[2] = 0; } void _atMotorStop3(){ _toWait[1].attach(&_atWaitStop1,WAIT_TIME); _boMotor = _boMotor & 0xFB; //11111011 指定ピンのみ変更 //left back leg down _doLed[3] = 0; } void _atMotorStop4(){//atatch Motor Stop0 _boMotor = _boMotor & 0xDF; //11011111 指定ピンのみ変更 //right front leg up } void _atMotorStop5(){ _toWait[2].attach(&_atWaitStop2,WAIT_TIME); _boMotor = _boMotor & 0xEF; //11101111 指定ピンのみ変更 //right front leg down } void _atMotorStop6(){ _boMotor = _boMotor & 0xFD; //11111101 指定ピンのみ変更 //right back leg up } void _atMotorStop7(){ _toWait[3].attach(&_atWaitStop3,WAIT_TIME); _boMotor = _boMotor & 0xFE; //11111110 指定ピンのみ変更 //right back leg down } int main() { static bool bClim[8] = {1,1,1,1,1,1,1,1};//bool Check limit[] static uint8_t u8Ct1[8] = {0},u8Ct2[8] = {1,1,1,1,1,1,1,1};//uint8_t Count{1,2}[] limit[0].mode(PullUp); limit[1].mode(PullUp); limit[2].mode(PullUp); limit[3].mode(PullUp); limit[4].mode(PullUp); limit[5].mode(PullUp); limit[6].mode(PullUp); limit[7].mode(PullUp); wait(1); /* pwm level setting */ _poPwm[0] = PWM_LEVEL ; _poPwm[1] = PWM_LEVEL ; _poPwm[2] = PWM_LEVEL ; _poPwm[3] = PWM_LEVEL ; /* */ while(1){ /*左の方-リミットスイッチ0~3*/ if(!limit[0] && !bClim[0]){ /* 1個目*/ if(!bWait[0] && !u8Ct1[0] && !u8Ct1[1]){ u8Ct1[0] = 1; //legs up _toMotor[0].attach(&_atMotorStop0,MOVE_TIME); _boMotor = _boMotor | 0x80;//10000000 _doLed[0] = 1; }else if(u8Ct1[0]){ u8Ct1[0] = 2; }else if((u8Ct1[1] == u8Ct2[0])){ u8Ct1[1]=0; u8Ct2[0]=1; //legs down _toMotor[1].attach(&_atMotorStop1,MOVE_TIME); _boMotor = _boMotor | 0x40;//0x40 = 01000000 _doLed[1] = 1; bWait[0] = 1; }else{ u8Ct2[0] = 2; } bClim[0] = 1; }else if(limit[0]){ bClim[0] = 0; } if(!limit[1] && !bClim[1]){ /* 2個目*/ if(!bWait[0] && !u8Ct1[1] && !u8Ct1[0]){ u8Ct1[1] = 1; //legs up _toMotor[0].attach(&_atMotorStop0,MOVE_TIME); _boMotor = _boMotor | 0x80;// 10000000 _doLed[0] = 1; }else if(u8Ct1[1]){ u8Ct1[1] = 2; }else if((u8Ct1[0] == u8Ct2[1])){ u8Ct1[0]=0; u8Ct2[1]=1; //legs down _toMotor[1].attach(&_atMotorStop1,MOVE_TIME); _boMotor = _boMotor | 0x40;// 01000000 _doLed[1] = 1; bWait[0] = 1; }else{ u8Ct2[1] = 2; } bClim[1] = 1; }else if(limit[1]){ bClim[1] = 0; } if(!limit[2] && !bClim[2]){ /* 3個目*/ if(!bWait[1] && !u8Ct1[2] && !u8Ct1[3]){ u8Ct1[2] = 1; //legs up _toMotor[2].attach(&_atMotorStop2,MOVE_TIME); _boMotor = _boMotor | 0x08;//00001000 _doLed[2] = 1; }else if(u8Ct1[2]){ u8Ct1[2] = 2; }else if((u8Ct1[3] == u8Ct2[2])){ u8Ct1[3]=0; u8Ct2[2]=1; //legs down _toMotor[3].attach(&_atMotorStop3,MOVE_TIME); _boMotor = _boMotor | 0x04;//00000100 _doLed[3] = 1; bWait[1] = 1; }else{ u8Ct2[2] = 2; } bClim[2] = 1; }else if(limit[2]){ bClim[2] = 0; } if(!limit[3] && !bClim[3]){ /* 4個目*/ if(!bWait[1] && !u8Ct1[3] && !u8Ct1[2]){ u8Ct1[3] = 1; //leg up _toMotor[2].attach(&_atMotorStop2,MOVE_TIME); _boMotor = _boMotor | 0x08;// 00001000 _doLed[2] = 1; }else if(u8Ct1[3]){ u8Ct1[3] = 2; }else if((u8Ct1[2] == u8Ct2[3])){ u8Ct1[2]=0; u8Ct2[3]=1; //leg down _toMotor[3].attach(&_atMotorStop3,MOVE_TIME); _boMotor = _boMotor | 0x04;//00000100 _doLed[3] = 1; bWait[1] = 1; }else{ u8Ct2[3] = 2; } bClim[3] = 1; }else if(limit[3]){ bClim[3] = 0; } /*右の方 リミットスイッチ4~7 */ if(!limit[4] && !bClim[4]){ /* 5個目*/ if(!bWait[2] && !u8Ct1[4] && !u8Ct1[5]){ u8Ct1[4] = 1; //leg up _toMotor[4].attach(&_atMotorStop4,MOVE_TIME); _boMotor = _boMotor | 0x20;//00100000 }else if(u8Ct1[4]){ u8Ct1[4] = 2; }else if((u8Ct1[5] == u8Ct2[4])){ u8Ct1[5]=0; u8Ct2[4]=1; //leg down _toMotor[5].attach(&_atMotorStop5,MOVE_TIME); _boMotor = _boMotor | 0x10;//0x10 = 00010000 bWait[2] = 1; }else{ u8Ct2[4] = 2; } bClim[4] = 1; }else if(limit[4]){ bClim[4] = 0; } if(!limit[5] && !bClim[5]){ /* 6個目*/ if(!bWait[2] && !u8Ct1[5] && !u8Ct1[4]){ u8Ct1[5] = 1; //leg up _toMotor[4].attach(&_atMotorStop4,MOVE_TIME); _boMotor = _boMotor | 0x20;// 00100000 }else if(u8Ct1[5]){ u8Ct1[5] = 2; }else if((u8Ct1[4] == u8Ct2[5])){ u8Ct1[4]=0; u8Ct2[5]=1; //leg down _toMotor[5].attach(&_atMotorStop5,MOVE_TIME); _boMotor = _boMotor | 0x10;// 00010000 bWait[2] = 1; }else{ u8Ct2[5] = 2; } bClim[5] = 1; }else if(limit[5]){ bClim[5] = 0; } if(!limit[6] && !bClim[6]){ /* 7個目*/ if(!bWait[3] && !u8Ct1[6] && !u8Ct1[7]){ u8Ct1[6] = 1; //legs up _toMotor[6].attach(&_atMotorStop6,MOVE_TIME); _boMotor = _boMotor | 0x02;//00000010 }else if(u8Ct1[6]){ u8Ct1[6] = 2; }else if((u8Ct1[7] == u8Ct2[6])){ u8Ct1[7]=0; u8Ct2[6]=1; //leg down _toMotor[7].attach(&_atMotorStop7,MOVE_TIME); _boMotor = _boMotor | 0x01;//00000001 bWait[3] = 1; }else{ u8Ct2[6] = 2; } bClim[6] = 1; }else if(limit[6]){ bClim[6] = 0; } if(!limit[7] && !bClim[7]){ /* 8個目*/ if(!bWait[3] && !u8Ct1[7] && !u8Ct1[6]){ u8Ct1[7] = 1; //leg up _toMotor[6].attach(&_atMotorStop6,MOVE_TIME); _boMotor = _boMotor | 0x02;// 00000010 //_doLed[6] = 1; }else if(u8Ct1[7]){ u8Ct1[7] = 2; }else if((u8Ct1[6] == u8Ct2[7])){ u8Ct1[6]=0; u8Ct2[7]=1; //leg down _toMotor[7].attach(&_atMotorStop7,MOVE_TIME); _boMotor = _boMotor | 0x01;//00000001 bWait[3] = 1; }else{ u8Ct2[7] = 2; } bClim[7] = 1; }else if(limit[7]){ bClim[7] = 0; } } }