mbed_pro_miniを使った相撲ロボットプログラムの雛形
Dependencies: RemoteIR USBDevice mbed
Diff: main.cpp
- Revision:
- 0:caf66b280785
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Thu Sep 10 09:33:58 2015 +0000 @@ -0,0 +1,269 @@ +#include "mbed.h" +#include "USBSerial.h" +#include "ReceiverIR.h" + +#define LED1 P0_29 +#define LED2 P0_28 +#define LED3 P0_27 +#define LED4 P0_26 + +#define front 1 +#define back 2 +#define left 3 +#define right 4 +#define breaking 5 + +#define IRrecerver P0_5 + +/*******X-box rimote controller********/ +#define Xbutton 1 +#define powoer 2 +#define startBTN 3 +#define deside 4 +#define windows 5 +/**************************************/ + +//USBSerial pc; + +DigitalOut led[] = + {DigitalOut(LED1), + DigitalOut(LED2), + DigitalOut(LED3), + DigitalOut(LED4)}; + +DigitalOut myled(P0_25); + +DigitalOut motorR[] = {DigitalOut(P0_0), DigitalOut(P0_1)}; + +DigitalOut motorL[] = {DigitalOut(P0_2), DigitalOut(P0_3)}; + +DigitalIn sensor[] = { + DigitalIn(P0_10), + DigitalIn(P0_11), + DigitalIn(P0_12), + DigitalIn(P0_13), + DigitalIn(P0_15)}; + +DigitalIn dip[] = { + DigitalIn(P0_9), + DigitalIn(P0_8), + DigitalIn(P0_7), + DigitalIn(P0_6)}; + +DigitalIn LineSensor[] = {DigitalIn(P0_17),DigitalIn(P0_15),DigitalIn(P0_20),DigitalIn(P0_23)}; + +ReceiverIR ir_rx(IRrecerver); +RemoteIR::Format format; + +int IRswitch(); +int IRstop(); +void IRclear(); + +Ticker motorTest; +int mTestStatus = 0; + +Timer modeCnt; +Timer startCnt; +Timer rollingCnt; + +void go (int); +void flip(); +void EnemySensWait(int); + +int nowMode = 1; +int waitFlag = 0; +int fightingMode = 0; +int enemySensorEnble = 0; +int startFlag = 0; +int goFlag = 0; +int startSelect = 3; +int enemySensActive = 1; + +int main() { + //motorTest.attach(&flip, 1.0); + + for(int i=0; i< 5; i++) sensor[i].mode(PullUp); + for(int i=0; i< 4; i++) dip[i].mode(PullDown); + + for(int i=0;i<4; i++)LineSensor[i].mode(PullUp); + LineSensor[2].mode(PullUp); + + int stop = 1; + + while(stop){ + if(IRswitch() == Xbutton) stop = 0; + wait(0.05); + } + + wait(5); + + int start = 1; + + + while(start){ + + go(front); + + //if(LineSensor[] == ) + + if(IRswitch() == powoer) start = 0; + } + + while(1) { + //for(int i=0; i< 4; i++) led[i] = sensor[i]; + for(int i=0; i< 4; i++) led[i] = LineSensor[i]; + myled = LineSensor[0]; + /* + for(int i=0; i< 4; i++) led[i] = dip[i]; + myled = sensor[2]; + + if(dip[1]) go(front); + if(dip[2]) go(left); + if(dip[3]) go(right); + if(dip[1]==0 && dip[2]==0 && dip[3]==0) go(breaking); + */ + wait(0.05); + + } +} + +int IRswitch(){ + uint8_t buf[32]; + int bitcount; + int res = 0; + int i; + + res = 0; + + if (ir_rx.getState() == ReceiverIR::Received) { + bitcount = ir_rx.getData(&format, buf, sizeof(buf) * 8); + + //pc.printf("reserve : "); + + if((bitcount > 30)){ +#if 0 + for(i=0;i<sizeof(buf);i++){ + pc.printf("%x,",buf[i]); + } +#endif + //if(buf[1]==0x80) pc.printf("OK:"); + if(buf[3]==0x24||buf[3]==0x12) { + //pc.printf("X\n"); + res = Xbutton; + } + if(buf[3]==0x20||buf[3]==0x10) { + //pc.printf("powoer\n"); + res = powoer; + } + if(buf[3]==0x30||buf[3]==0x18) { + //pc.printf("start\n"); + res = startBTN; + } + if(buf[3]==0x50||buf[3]==0xa0) { + //pc.printf("win\n"); + res = windows; + } + //pc.printf("\n"); + } + } + + return res; +} + +void IRclear(){ + uint8_t buf[32]; + + while (ir_rx.getState() == ReceiverIR::Received){ + ir_rx.getData(&format, buf, sizeof(buf) * 8); + } +} + +void go (int mode){ + switch(mode){ + case front: + motorR[0] = 0; + motorR[1] = 1; + + motorL[0] = 0; + motorL[1] = 1; + + + break; + + case back: + motorR[0] = 1; + motorR[1] = 0; + + motorL[0] = 1; + motorL[1] = 0; + break; + + case left: + motorR[0] = 0; + motorR[1] = 1; + + motorL[0] = 1; + motorL[1] = 0; + break; + + case right: + motorR[0] = 1; + motorR[1] = 0; + + motorL[0] = 0; + motorL[1] = 1; + break; + + case breaking: + motorR[0] = 1; + motorR[1] = 1; + + motorL[0] = 1; + motorL[1] = 1; + break; + } +} + +void flip(){ + switch(mTestStatus){ + case 0: + motorR[0] = 1; + motorR[1] = 1; + + motorL[0] = 1; + motorL[1] = 1; + mTestStatus = 1; + break; + case 1: + motorR[0] = 1; + motorR[1] = 0; + + motorL[0] = 0; + motorL[1] = 1; + mTestStatus = 2; + break; + case 2: + motorR[0] = 0; + motorR[1] = 1; + + motorL[0] = 1; + motorL[1] = 0; + mTestStatus = 3; + break; + case 3: + motorR[0] = 0; + motorR[1] = 0; + + motorL[0] = 0; + motorL[1] = 0; + mTestStatus = 0; + break; + } +} + +void EnemySensWait(int rollTime){ + rollingCnt.reset(); + rollingCnt.start(); + while(sensor[2] == 1 && rollingCnt.read_ms() < rollTime); + rollingCnt.stop(); +} \ No newline at end of file