受け取りのコントローラのプログラム

Dependencies:   TextLCD mbed MultiSerial Pswitch_Lib

Committer:
lilac0112_1
Date:
Thu Sep 25 08:20:34 2014 +0000
Revision:
5:a5c324942570
Parent:
4:39edc16ee5c3
Child:
6:08b5c5bdace9
;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
lilac0112_1 0:d3702a4e32ea 1 #include "mbed.h"
lilac0112_1 0:d3702a4e32ea 2 #include "TextLCD.h"
lilac0112_1 1:84625a611c5f 3 #include "MultiSerial.h"
lilac0112_1 0:d3702a4e32ea 4
lilac0112_1 2:7820849bf534 5 #define DATA_NUM 2
lilac0112_1 5:a5c324942570 6 #define LINKCODE 0xCC
lilac0112_1 5:a5c324942570 7 #define LINK_INTERVAL 100
lilac0112_1 2:7820849bf534 8 #define KEYCODE 0xAA
lilac0112_1 5:a5c324942570 9 #define INTERVAL .5 //12
lilac0112_1 0:d3702a4e32ea 10
lilac0112_1 0:d3702a4e32ea 11 enum HAND{RIGHT=0, LEFT};
lilac0112_1 0:d3702a4e32ea 12 enum FINGER{INDEX=0, MIDDLE};
lilac0112_1 0:d3702a4e32ea 13 enum COMPASS{NORTH=0, EAST, SOUTH, WEST};
lilac0112_1 0:d3702a4e32ea 14 enum COLOR{YELLOW=0, RED, GREEN, BLUE};
lilac0112_1 0:d3702a4e32ea 15
lilac0112_1 5:a5c324942570 16 uint8_t TXdata[DATA_NUM]={0};
lilac0112_1 5:a5c324942570 17 uint8_t RXdata[DATA_NUM]={0};
lilac0112_1 5:a5c324942570 18
lilac0112_1 5:a5c324942570 19 uint8_t INdata[DATA_NUM]={0};
lilac0112_1 5:a5c324942570 20 uint8_t EXdata[DATA_NUM]={0};
lilac0112_1 5:a5c324942570 21
lilac0112_1 0:d3702a4e32ea 22 volatile uint8_t count=0;
lilac0112_1 4:39edc16ee5c3 23 bool SW;
lilac0112_1 0:d3702a4e32ea 24
lilac0112_1 0:d3702a4e32ea 25 void SetUp();
lilac0112_1 5:a5c324942570 26 void connect_check();
lilac0112_1 0:d3702a4e32ea 27 uint8_t LinkBit(bool eight, bool seven, bool six, bool five, bool fore, bool three, bool two, bool one);
lilac0112_1 0:d3702a4e32ea 28 void illumination();
lilac0112_1 0:d3702a4e32ea 29
lilac0112_1 0:d3702a4e32ea 30 Ticker flick;
lilac0112_1 0:d3702a4e32ea 31 BusOut LED(LED1, LED2, LED3, LED4);
lilac0112_1 0:d3702a4e32ea 32
lilac0112_1 0:d3702a4e32ea 33 DigitalOut YLED(p6);
lilac0112_1 0:d3702a4e32ea 34
lilac0112_1 0:d3702a4e32ea 35 DigitalIn CrossKey[4][2]={{p8, p30}, {p11, p29}, {p15, p28}, {p16, p27}};//p7, p12=reserve
lilac0112_1 0:d3702a4e32ea 36 DigitalIn SideKey[2][2]={{p17, p20}, {p18, p19}};
lilac0112_1 5:a5c324942570 37 DigitalIn Toggle(p5);
lilac0112_1 0:d3702a4e32ea 38
lilac0112_1 5:a5c324942570 39 MultiSerial Xbee(p9, p10);
lilac0112_1 5:a5c324942570 40 Serial pc(USBTX,USBRX);
lilac0112_1 5:a5c324942570 41
lilac0112_1 4:39edc16ee5c3 42
lilac0112_1 5:a5c324942570 43 int main()
lilac0112_1 5:a5c324942570 44 {
lilac0112_1 5:a5c324942570 45 SetUp();
lilac0112_1 5:a5c324942570 46
lilac0112_1 5:a5c324942570 47 Toggle.mode(PullUp);
lilac0112_1 5:a5c324942570 48
lilac0112_1 5:a5c324942570 49 connect_check();
lilac0112_1 5:a5c324942570 50
lilac0112_1 5:a5c324942570 51 TextLCD lcd(p26, p25, p24, p23, p22, p21, TextLCD::LCD16x2); // rs, e, d4-d7
lilac0112_1 0:d3702a4e32ea 52
lilac0112_1 5:a5c324942570 53 if(TXdata[0]==LINKCODE) lcd.cls(), lcd.printf("3SecondsLater,\n YouCanRun");
lilac0112_1 5:a5c324942570 54
lilac0112_1 5:a5c324942570 55 wait(3);
lilac0112_1 5:a5c324942570 56
lilac0112_1 5:a5c324942570 57 YLED=!Toggle;
lilac0112_1 5:a5c324942570 58 if(YLED) lcd.cls(), lcd.printf("Pause Mode\n"), SW=0;
lilac0112_1 5:a5c324942570 59 if(!YLED) lcd.cls(), lcd.printf("Run Mode\n"), SW=1;
lilac0112_1 5:a5c324942570 60
lilac0112_1 5:a5c324942570 61 Xbee.write_data(EXdata, KEYCODE);
lilac0112_1 5:a5c324942570 62
lilac0112_1 0:d3702a4e32ea 63 while(1) {
lilac0112_1 0:d3702a4e32ea 64
lilac0112_1 5:a5c324942570 65 YLED=!Toggle;
lilac0112_1 4:39edc16ee5c3 66
lilac0112_1 4:39edc16ee5c3 67 if(YLED&&SW) lcd.cls(), lcd.printf("Pause Mode\n"), SW=0;
lilac0112_1 4:39edc16ee5c3 68 if((!YLED)&&(!SW)) lcd.cls(), lcd.printf("Run Mode\n"), SW=1;
lilac0112_1 4:39edc16ee5c3 69
lilac0112_1 5:a5c324942570 70 if(Toggle){
lilac0112_1 3:cfd7cd361088 71
lilac0112_1 3:cfd7cd361088 72 EXdata[0] = LinkBit(!CrossKey[YELLOW][LEFT], !CrossKey[RED][LEFT], !CrossKey[GREEN][LEFT], !CrossKey[BLUE][LEFT],
lilac0112_1 3:cfd7cd361088 73 !CrossKey[YELLOW][RIGHT], !CrossKey[RED][RIGHT], !CrossKey[GREEN][RIGHT], !CrossKey[BLUE][RIGHT]);
lilac0112_1 3:cfd7cd361088 74 EXdata[1] = LinkBit(0, 0, 0, 0, !SideKey[INDEX][LEFT], !SideKey[MIDDLE][LEFT], !SideKey[INDEX][RIGHT], !SideKey[MIDDLE][RIGHT]);
lilac0112_1 3:cfd7cd361088 75 }else{
lilac0112_1 3:cfd7cd361088 76
lilac0112_1 3:cfd7cd361088 77 EXdata[0] = EXdata[1] = 0x00;
lilac0112_1 3:cfd7cd361088 78 }
lilac0112_1 0:d3702a4e32ea 79
lilac0112_1 0:d3702a4e32ea 80 }
lilac0112_1 5:a5c324942570 81
lilac0112_1 0:d3702a4e32ea 82 }
lilac0112_1 0:d3702a4e32ea 83
lilac0112_1 0:d3702a4e32ea 84 void SetUp(void){
lilac0112_1 0:d3702a4e32ea 85
lilac0112_1 0:d3702a4e32ea 86 CrossKey[NORTH][RIGHT].mode(PullUp);
lilac0112_1 0:d3702a4e32ea 87 CrossKey[EAST][RIGHT].mode(PullUp);
lilac0112_1 0:d3702a4e32ea 88 CrossKey[WEST][RIGHT].mode(PullUp);
lilac0112_1 0:d3702a4e32ea 89 CrossKey[SOUTH][RIGHT].mode(PullUp);
lilac0112_1 0:d3702a4e32ea 90 CrossKey[NORTH][LEFT].mode(PullUp);
lilac0112_1 0:d3702a4e32ea 91 CrossKey[EAST][LEFT].mode(PullUp);
lilac0112_1 0:d3702a4e32ea 92 CrossKey[WEST][LEFT].mode(PullUp);
lilac0112_1 0:d3702a4e32ea 93 CrossKey[SOUTH][LEFT].mode(PullUp);
lilac0112_1 0:d3702a4e32ea 94
lilac0112_1 0:d3702a4e32ea 95 SideKey[INDEX][RIGHT].mode(PullUp);
lilac0112_1 0:d3702a4e32ea 96 SideKey[MIDDLE][RIGHT].mode(PullUp);
lilac0112_1 0:d3702a4e32ea 97 SideKey[INDEX][LEFT].mode(PullUp);
lilac0112_1 0:d3702a4e32ea 98 SideKey[MIDDLE][LEFT].mode(PullUp);
lilac0112_1 0:d3702a4e32ea 99
lilac0112_1 1:84625a611c5f 100 flick.attach(illumination, INTERVAL);
lilac0112_1 5:a5c324942570 101 flick.detach();
lilac0112_1 5:a5c324942570 102 }
lilac0112_1 5:a5c324942570 103 void connect_check(void){
lilac0112_1 5:a5c324942570 104
lilac0112_1 5:a5c324942570 105 while(1){
lilac0112_1 5:a5c324942570 106
lilac0112_1 5:a5c324942570 107 //YLED = !Toggle;
lilac0112_1 5:a5c324942570 108 //LED = 12;
lilac0112_1 5:a5c324942570 109 Xbee.start_write();
lilac0112_1 5:a5c324942570 110 TXdata[0]=LINKCODE;
lilac0112_1 5:a5c324942570 111 Xbee.write_data(TXdata,KEYCODE);
lilac0112_1 5:a5c324942570 112 wait_ms(100);
lilac0112_1 5:a5c324942570 113 Xbee.stop_write();
lilac0112_1 5:a5c324942570 114
lilac0112_1 5:a5c324942570 115 Xbee.start_read();
lilac0112_1 5:a5c324942570 116 Xbee.read_data(RXdata,KEYCODE);
lilac0112_1 5:a5c324942570 117 LED = 3;
lilac0112_1 5:a5c324942570 118 wait_ms(100);
lilac0112_1 5:a5c324942570 119 if(RXdata[0]==LINKCODE) break;
lilac0112_1 5:a5c324942570 120
lilac0112_1 5:a5c324942570 121 Xbee.stop_read();
lilac0112_1 5:a5c324942570 122
lilac0112_1 5:a5c324942570 123 }
lilac0112_1 5:a5c324942570 124
lilac0112_1 0:d3702a4e32ea 125 }
lilac0112_1 0:d3702a4e32ea 126 uint8_t LinkBit(bool eight, bool seven, bool six, bool five, bool fore, bool three, bool two, bool one){//0と1を集めて整数を作る
lilac0112_1 0:d3702a4e32ea 127 return 0x80*eight + 0x40*seven + 0x20*six + 0x10*five + 0x08*fore + 0x04*three + 0x02*two + 0x01*one;
lilac0112_1 0:d3702a4e32ea 128 }
lilac0112_1 0:d3702a4e32ea 129 void illumination(void){//literally
lilac0112_1 0:d3702a4e32ea 130 count++;
lilac0112_1 0:d3702a4e32ea 131 LED = count;
lilac0112_1 0:d3702a4e32ea 132 }