USB HID Keyboard and car audio controller for steering of TOYOTA car

Dependencies:   USBDevice mbed

Committer:
zeus3110
Date:
Thu Aug 20 11:59:37 2015 +0000
Revision:
0:30fe2eec5271
First release

Who changed what in which revision?

UserRevisionLine numberNew 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 }