zeus 3110
/
SteeringController
USB HID Keyboard and car audio controller for steering of TOYOTA car
main.cpp@0:30fe2eec5271, 2015-08-20 (annotated)
- Committer:
- zeus3110
- Date:
- Thu Aug 20 11:59:37 2015 +0000
- Revision:
- 0:30fe2eec5271
First release
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
zeus3110 | 0:30fe2eec5271 | 1 | #include "mbed.h" |
zeus3110 | 0:30fe2eec5271 | 2 | #include "USBKeyboard.h" |
zeus3110 | 0:30fe2eec5271 | 3 | #include "DEH970Ctrl.h" |
zeus3110 | 0:30fe2eec5271 | 4 | |
zeus3110 | 0:30fe2eec5271 | 5 | #define DEBUG |
zeus3110 | 0:30fe2eec5271 | 6 | |
zeus3110 | 0:30fe2eec5271 | 7 | //main loop |
zeus3110 | 0:30fe2eec5271 | 8 | const unsigned ADAvg=8; |
zeus3110 | 0:30fe2eec5271 | 9 | |
zeus3110 | 0:30fe2eec5271 | 10 | //main roop wait time(ms) |
zeus3110 | 0:30fe2eec5271 | 11 | const int wait_time_ms=100; |
zeus3110 | 0:30fe2eec5271 | 12 | const int wait_time_keydet_ms=500; |
zeus3110 | 0:30fe2eec5271 | 13 | |
zeus3110 | 0:30fe2eec5271 | 14 | //AD value range |
zeus3110 | 0:30fe2eec5271 | 15 | //2.5ohm button (Mode or SEEK+) |
zeus3110 | 0:30fe2eec5271 | 16 | const unsigned Res2R5MinAD=0x0000; |
zeus3110 | 0:30fe2eec5271 | 17 | const unsigned Res2R5MaxAD=0x00C4; |
zeus3110 | 0:30fe2eec5271 | 18 | //0.3kohm button (SEEK-) |
zeus3110 | 0:30fe2eec5271 | 19 | const unsigned Res300MinAD=0x2F42; |
zeus3110 | 0:30fe2eec5271 | 20 | const unsigned Res300MaxAD=0x46E4; |
zeus3110 | 0:30fe2eec5271 | 21 | //1kohm button (VOL+) |
zeus3110 | 0:30fe2eec5271 | 22 | const unsigned Res1kMinAD=0x7332; |
zeus3110 | 0:30fe2eec5271 | 23 | const unsigned Res1kMaxAD=0x8ccc; |
zeus3110 | 0:30fe2eec5271 | 24 | //3.1kohm button (VOL-) |
zeus3110 | 0:30fe2eec5271 | 25 | const unsigned Res3kMinAD=0xAE33; |
zeus3110 | 0:30fe2eec5271 | 26 | const unsigned Res3kMaxAD=0xD4E9; |
zeus3110 | 0:30fe2eec5271 | 27 | |
zeus3110 | 0:30fe2eec5271 | 28 | |
zeus3110 | 0:30fe2eec5271 | 29 | Ticker tick; |
zeus3110 | 0:30fe2eec5271 | 30 | AnalogIn Key1(A0); |
zeus3110 | 0:30fe2eec5271 | 31 | AnalogIn Key2(A1); |
zeus3110 | 0:30fe2eec5271 | 32 | DigitalOut HBLed(LED2); |
zeus3110 | 0:30fe2eec5271 | 33 | DigitalOut IRLed(LED1); |
zeus3110 | 0:30fe2eec5271 | 34 | DigitalOut USBLed(LED3); |
zeus3110 | 0:30fe2eec5271 | 35 | PwmOut IRPort(PTB2); |
zeus3110 | 0:30fe2eec5271 | 36 | DEH970Controller *DEH970Ctrl; |
zeus3110 | 0:30fe2eec5271 | 37 | USBKeyboard *Keyboard; |
zeus3110 | 0:30fe2eec5271 | 38 | |
zeus3110 | 0:30fe2eec5271 | 39 | int main() |
zeus3110 | 0:30fe2eec5271 | 40 | { |
zeus3110 | 0:30fe2eec5271 | 41 | unsigned Key1AD,Key2AD; |
zeus3110 | 0:30fe2eec5271 | 42 | unsigned i; |
zeus3110 | 0:30fe2eec5271 | 43 | |
zeus3110 | 0:30fe2eec5271 | 44 | printf("start!\n"); |
zeus3110 | 0:30fe2eec5271 | 45 | |
zeus3110 | 0:30fe2eec5271 | 46 | DEH970Ctrl=new DEH970Controller(&IRPort); |
zeus3110 | 0:30fe2eec5271 | 47 | |
zeus3110 | 0:30fe2eec5271 | 48 | printf("start!\n"); |
zeus3110 | 0:30fe2eec5271 | 49 | |
zeus3110 | 0:30fe2eec5271 | 50 | Keyboard=new USBKeyboard(); |
zeus3110 | 0:30fe2eec5271 | 51 | |
zeus3110 | 0:30fe2eec5271 | 52 | printf("USB start!\n"); |
zeus3110 | 0:30fe2eec5271 | 53 | |
zeus3110 | 0:30fe2eec5271 | 54 | HBLed=true; |
zeus3110 | 0:30fe2eec5271 | 55 | IRLed=true; |
zeus3110 | 0:30fe2eec5271 | 56 | |
zeus3110 | 0:30fe2eec5271 | 57 | printf("Start!"); |
zeus3110 | 0:30fe2eec5271 | 58 | |
zeus3110 | 0:30fe2eec5271 | 59 | while(1) |
zeus3110 | 0:30fe2eec5271 | 60 | { Key1AD=0; |
zeus3110 | 0:30fe2eec5271 | 61 | Key2AD=0; |
zeus3110 | 0:30fe2eec5271 | 62 | IRLed=true; |
zeus3110 | 0:30fe2eec5271 | 63 | USBLed=true; |
zeus3110 | 0:30fe2eec5271 | 64 | |
zeus3110 | 0:30fe2eec5271 | 65 | //キーAD値の8回平均を取得 |
zeus3110 | 0:30fe2eec5271 | 66 | for(i=0;i<ADAvg;i++) |
zeus3110 | 0:30fe2eec5271 | 67 | { Key1AD=Key1AD+(unsigned)Key1.read_u16(); |
zeus3110 | 0:30fe2eec5271 | 68 | Key2AD=Key2AD+(unsigned)Key2.read_u16(); |
zeus3110 | 0:30fe2eec5271 | 69 | } |
zeus3110 | 0:30fe2eec5271 | 70 | |
zeus3110 | 0:30fe2eec5271 | 71 | Key1AD/=ADAvg; |
zeus3110 | 0:30fe2eec5271 | 72 | Key2AD/=ADAvg; |
zeus3110 | 0:30fe2eec5271 | 73 | |
zeus3110 | 0:30fe2eec5271 | 74 | #ifdef DEBUG |
zeus3110 | 0:30fe2eec5271 | 75 | printf("AD Value:%x %x\n",Key1AD,Key2AD); |
zeus3110 | 0:30fe2eec5271 | 76 | #endif |
zeus3110 | 0:30fe2eec5271 | 77 | |
zeus3110 | 0:30fe2eec5271 | 78 | //MODE SW |
zeus3110 | 0:30fe2eec5271 | 79 | if(Res2R5MinAD<=Key2AD && Key2AD<=Res2R5MaxAD) |
zeus3110 | 0:30fe2eec5271 | 80 | { |
zeus3110 | 0:30fe2eec5271 | 81 | #ifdef DEBUG |
zeus3110 | 0:30fe2eec5271 | 82 | printf("MODE SW\n"); |
zeus3110 | 0:30fe2eec5271 | 83 | #endif |
zeus3110 | 0:30fe2eec5271 | 84 | USBLed=false; |
zeus3110 | 0:30fe2eec5271 | 85 | Keyboard->mediaControl(KEY_PLAY_PAUSE); |
zeus3110 | 0:30fe2eec5271 | 86 | wait_ms(wait_time_keydet_ms); |
zeus3110 | 0:30fe2eec5271 | 87 | } |
zeus3110 | 0:30fe2eec5271 | 88 | //SEEK+ SW |
zeus3110 | 0:30fe2eec5271 | 89 | else if(Res2R5MinAD<=Key1AD && Key1AD<=Res2R5MaxAD) |
zeus3110 | 0:30fe2eec5271 | 90 | { |
zeus3110 | 0:30fe2eec5271 | 91 | #ifdef DEBUG |
zeus3110 | 0:30fe2eec5271 | 92 | printf("SEEK NEXT SW\n"); |
zeus3110 | 0:30fe2eec5271 | 93 | #endif |
zeus3110 | 0:30fe2eec5271 | 94 | USBLed=false; |
zeus3110 | 0:30fe2eec5271 | 95 | Keyboard->mediaControl(KEY_NEXT_TRACK); |
zeus3110 | 0:30fe2eec5271 | 96 | wait_ms(wait_time_keydet_ms); |
zeus3110 | 0:30fe2eec5271 | 97 | } |
zeus3110 | 0:30fe2eec5271 | 98 | //SEEK- SW |
zeus3110 | 0:30fe2eec5271 | 99 | else if(Res300MinAD<=Key1AD && Key1AD<=Res300MaxAD) |
zeus3110 | 0:30fe2eec5271 | 100 | { |
zeus3110 | 0:30fe2eec5271 | 101 | #ifdef DEBUG |
zeus3110 | 0:30fe2eec5271 | 102 | printf("SEEK PREV SW\n"); |
zeus3110 | 0:30fe2eec5271 | 103 | #endif |
zeus3110 | 0:30fe2eec5271 | 104 | USBLed=false; |
zeus3110 | 0:30fe2eec5271 | 105 | Keyboard->mediaControl(KEY_PREVIOUS_TRACK); |
zeus3110 | 0:30fe2eec5271 | 106 | wait_ms(wait_time_keydet_ms); |
zeus3110 | 0:30fe2eec5271 | 107 | } |
zeus3110 | 0:30fe2eec5271 | 108 | |
zeus3110 | 0:30fe2eec5271 | 109 | //VOL+ SW |
zeus3110 | 0:30fe2eec5271 | 110 | else if(Res1kMinAD<=Key1AD && Key1AD<=Res1kMaxAD) |
zeus3110 | 0:30fe2eec5271 | 111 | { |
zeus3110 | 0:30fe2eec5271 | 112 | #ifdef DEBUG |
zeus3110 | 0:30fe2eec5271 | 113 | printf("VOL UP SW\n"); |
zeus3110 | 0:30fe2eec5271 | 114 | #endif |
zeus3110 | 0:30fe2eec5271 | 115 | if(DEH970Ctrl->IsLocked()==false) |
zeus3110 | 0:30fe2eec5271 | 116 | { IRLed=false; |
zeus3110 | 0:30fe2eec5271 | 117 | DEH970Ctrl->SendVolPlus(); |
zeus3110 | 0:30fe2eec5271 | 118 | wait_ms(wait_time_keydet_ms); |
zeus3110 | 0:30fe2eec5271 | 119 | } |
zeus3110 | 0:30fe2eec5271 | 120 | } |
zeus3110 | 0:30fe2eec5271 | 121 | //VOL- SW |
zeus3110 | 0:30fe2eec5271 | 122 | else if(Res3kMinAD<=Key1AD && Key1AD<=Res3kMaxAD) |
zeus3110 | 0:30fe2eec5271 | 123 | { |
zeus3110 | 0:30fe2eec5271 | 124 | #ifdef DEBUG |
zeus3110 | 0:30fe2eec5271 | 125 | printf("VOL DOWN SW\n"); |
zeus3110 | 0:30fe2eec5271 | 126 | #endif |
zeus3110 | 0:30fe2eec5271 | 127 | if(DEH970Ctrl->IsLocked()==false) |
zeus3110 | 0:30fe2eec5271 | 128 | { IRLed=false; |
zeus3110 | 0:30fe2eec5271 | 129 | DEH970Ctrl->SendVolMinus(); |
zeus3110 | 0:30fe2eec5271 | 130 | wait_ms(wait_time_keydet_ms); |
zeus3110 | 0:30fe2eec5271 | 131 | } |
zeus3110 | 0:30fe2eec5271 | 132 | } |
zeus3110 | 0:30fe2eec5271 | 133 | |
zeus3110 | 0:30fe2eec5271 | 134 | wait_ms(wait_time_ms); |
zeus3110 | 0:30fe2eec5271 | 135 | HBLed=!HBLed; |
zeus3110 | 0:30fe2eec5271 | 136 | } |
zeus3110 | 0:30fe2eec5271 | 137 | |
zeus3110 | 0:30fe2eec5271 | 138 | // return(0); |
zeus3110 | 0:30fe2eec5271 | 139 | } |