今までのジョイスティックの入力を段階分けしていた方式から、アナログ値をできる限りそのまま使用する方式に変更しました。

Dependencies:   mbed-rtos mbed

Fork of ControlMain2017 by albatross

Committer:
tsumagari
Date:
Thu Feb 16 14:51:53 2017 +0000
Branch:
test
Revision:
10:b7159feb11fd
Parent:
9:c32999b4d2f9
Child:
13:79eb74eb86c4
??????????analog?????????????

Who changed what in which revision?

UserRevisionLine numberNew contents of line
YusukeWakuta 0:b1290ca6c4a2 1 //中央can program
YusukeWakuta 0:b1290ca6c4a2 2
YusukeWakuta 0:b1290ca6c4a2 3 #include "mbed.h"
tsumagari 9:c32999b4d2f9 4 //#include "BufferedSoftSerial.h"
tsumagari 10:b7159feb11fd 5 #define WAIT_LOOP_TIME 0.001
tsumagari 9:c32999b4d2f9 6 #define YOKUTAN_DATAS_NUM 7
tsumagari 10:b7159feb11fd 7 #define INPUT_DATAS_NUM 5
YusukeWakuta 0:b1290ca6c4a2 8 #define SEND_DATAS_CAN_ID 100
tsumagari 8:dbc8c87dac78 9 #define SEND_DATAS_TIME 0.5
tsumagari 8:dbc8c87dac78 10 #define THRESHOLD_OH_VALUE 0.14
tsumagari 8:dbc8c87dac78 11 #define CALC_CADENCE_TIME 0.05
YusukeWakuta 0:b1290ca6c4a2 12
tsumagari 9:c32999b4d2f9 13 //-----------------------------------(resetInterrupt def)
tsumagari 9:c32999b4d2f9 14 extern "C" void mbed_reset();
tsumagari 9:c32999b4d2f9 15 InterruptIn resetPin(p26);
tsumagari 9:c32999b4d2f9 16 Timer resetTimeCount;
tsumagari 9:c32999b4d2f9 17 void resetInterrupt(){
tsumagari 9:c32999b4d2f9 18 while(resetPin){
tsumagari 9:c32999b4d2f9 19 resetTimeCount.start();
tsumagari 9:c32999b4d2f9 20 if(resetTimeCount.read()>3) mbed_reset();
tsumagari 9:c32999b4d2f9 21 }
tsumagari 9:c32999b4d2f9 22 resetTimeCount.reset();
tsumagari 9:c32999b4d2f9 23 }
tsumagari 9:c32999b4d2f9 24 //-------------------------------------------------------
tsumagari 9:c32999b4d2f9 25
taurin 6:7484315ba88a 26 CAN can_R(p30,p29);
taurin 6:7484315ba88a 27 CAN can_L(p9,p10);
tsumagari 9:c32999b4d2f9 28 Serial toKeikiSerial(p13,p14);
tsumagari 9:c32999b4d2f9 29 //BufferedSoftSerial toKeikiSerial(p17,p18);
tsumagari 7:59ddbe239835 30 Serial pc(USBTX,USBRX);
tsumagari 10:b7159feb11fd 31 //DigitalIn eruron_R(p22);
tsumagari 10:b7159feb11fd 32 //DigitalIn eruron_L(p20);
tsumagari 10:b7159feb11fd 33 AnalogIn rollPin(p15);
tsumagari 10:b7159feb11fd 34 AnalogIn pichPin(p16);
taurin 6:7484315ba88a 35 DigitalIn drug_R(p23);
taurin 6:7484315ba88a 36 DigitalIn drug_L(p19);
YusukeWakuta 0:b1290ca6c4a2 37 DigitalOut myled1(LED1);
YusukeWakuta 0:b1290ca6c4a2 38 DigitalOut myled2(LED2);
tsumagari 9:c32999b4d2f9 39 //Ticker sendDatasTicker;
tsumagari 10:b7159feb11fd 40 //Ticker cadenceTicker;
tsumagari 10:b7159feb11fd 41 //Timer cadenceTimer;
tsumagari 10:b7159feb11fd 42 //AnalogIn p(p15);
tsumagari 10:b7159feb11fd 43 //AnalogIn q(p16);
YusukeWakuta 0:b1290ca6c4a2 44
taurin 4:4a13dd263a7b 45 char yokutanDatas_R[YOKUTAN_DATAS_NUM];
taurin 4:4a13dd263a7b 46 char yokutanDatas_L[YOKUTAN_DATAS_NUM];
tsumagari 10:b7159feb11fd 47 char inputDatas_R[INPUT_DATAS_NUM];
tsumagari 10:b7159feb11fd 48 char inputDatas_L[INPUT_DATAS_NUM];
tsumagari 10:b7159feb11fd 49 //char cadence = 0;
taurin 4:4a13dd263a7b 50 bool stateP = true;
taurin 4:4a13dd263a7b 51 bool stateQ = true;
taurin 4:4a13dd263a7b 52 bool stateP_old = true;
taurin 4:4a13dd263a7b 53 bool stateQ_old = true;
YusukeWakuta 0:b1290ca6c4a2 54
YusukeWakuta 3:0e66ce2ab2fb 55 CANMessage recmsg_R;
YusukeWakuta 3:0e66ce2ab2fb 56 CANMessage recmsg_L;
YusukeWakuta 0:b1290ca6c4a2 57
tsumagari 10:b7159feb11fd 58 float get_analogin_ave(AnalogIn pin, int n){
tsumagari 10:b7159feb11fd 59 float val = 0;
tsumagari 10:b7159feb11fd 60 for(int i = 0; i<n; i++){
tsumagari 10:b7159feb11fd 61 val += pin.read();
tsumagari 10:b7159feb11fd 62 }return val/n;
tsumagari 10:b7159feb11fd 63 }
tsumagari 10:b7159feb11fd 64
taurin 4:4a13dd263a7b 65 void InputControlValues(){
tsumagari 10:b7159feb11fd 66 *(float *)inputDatas_R = get_analogin_ave(pichPin,8) + get_analogin_ave(rollPin,8);
tsumagari 10:b7159feb11fd 67 *(float *)inputDatas_L = get_analogin_ave(pichPin,8) - get_analogin_ave(rollPin,8);
tsumagari 10:b7159feb11fd 68 pc.printf("input_R:%f input_L:%f\n\r",*(float *)inputDatas_R,*(float *)inputDatas_L);
tsumagari 10:b7159feb11fd 69 inputDatas_R[4] = (char)drug_R;
tsumagari 10:b7159feb11fd 70 inputDatas_L[4] = (char)drug_L;
tsumagari 10:b7159feb11fd 71 // if(eruron_R){
tsumagari 10:b7159feb11fd 72 // inputDatas_R[0] = 0;
tsumagari 10:b7159feb11fd 73 // inputDatas_L[0] = 2;
tsumagari 10:b7159feb11fd 74 // }
tsumagari 10:b7159feb11fd 75 // else if(eruron_L){
tsumagari 10:b7159feb11fd 76 // inputDatas_R[0] = 2;
tsumagari 10:b7159feb11fd 77 // inputDatas_L[0] = 0;
tsumagari 10:b7159feb11fd 78 // }
tsumagari 10:b7159feb11fd 79 // else{
tsumagari 10:b7159feb11fd 80 // inputDatas_R[0] = 1;
tsumagari 10:b7159feb11fd 81 // inputDatas_L[0] = 1;
tsumagari 10:b7159feb11fd 82 // }
YusukeWakuta 0:b1290ca6c4a2 83 }
YusukeWakuta 0:b1290ca6c4a2 84
taurin 4:4a13dd263a7b 85 void toString_R(){
taurin 4:4a13dd263a7b 86 pc.printf("R:");
tsumagari 10:b7159feb11fd 87 for(int i = 0; i < INPUT_DATAS_NUM; i++){
taurin 4:4a13dd263a7b 88 pc.printf("%d:%i ",i,inputDatas_R[i]);
taurin 4:4a13dd263a7b 89 }
YusukeWakuta 0:b1290ca6c4a2 90 }
YusukeWakuta 0:b1290ca6c4a2 91
taurin 4:4a13dd263a7b 92 void toString_L(){
taurin 4:4a13dd263a7b 93 pc.printf("L:");
tsumagari 10:b7159feb11fd 94 for(int i = 0; i < INPUT_DATAS_NUM; i++){
taurin 4:4a13dd263a7b 95 pc.printf("%d:%i ",i,inputDatas_L[i]);
taurin 4:4a13dd263a7b 96 }
taurin 4:4a13dd263a7b 97 pc.printf("\n\r");
YusukeWakuta 0:b1290ca6c4a2 98 }
YusukeWakuta 0:b1290ca6c4a2 99
taurin 4:4a13dd263a7b 100 void SendDatas(){
tsumagari 10:b7159feb11fd 101 can_R.write(CANMessage(SEND_DATAS_CAN_ID, inputDatas_R, INPUT_DATAS_NUM));
tsumagari 10:b7159feb11fd 102 can_L.write(CANMessage(SEND_DATAS_CAN_ID, inputDatas_L, INPUT_DATAS_NUM));
tsumagari 8:dbc8c87dac78 103 toKeikiSerial.putc(';');
YusukeWakuta 0:b1290ca6c4a2 104 for(int i = 0; i < YOKUTAN_DATAS_NUM; i++){
tsumagari 8:dbc8c87dac78 105 // toKeikiSerial.putc(i);
tsumagari 8:dbc8c87dac78 106 // toKeikiSerial.putc(10+i);
YusukeWakuta 0:b1290ca6c4a2 107 toKeikiSerial.putc(yokutanDatas_R[i]);
YusukeWakuta 0:b1290ca6c4a2 108 toKeikiSerial.putc(yokutanDatas_L[i]);
YusukeWakuta 0:b1290ca6c4a2 109 }
tsumagari 10:b7159feb11fd 110 for(int i = 0; i < INPUT_DATAS_NUM; i++){
tsumagari 8:dbc8c87dac78 111 // toKeikiSerial.putc(4+i);
tsumagari 8:dbc8c87dac78 112 // toKeikiSerial.putc(14+i);
taurin 4:4a13dd263a7b 113 toKeikiSerial.putc(inputDatas_R[i]);
taurin 4:4a13dd263a7b 114 toKeikiSerial.putc(inputDatas_L[i]);
taurin 4:4a13dd263a7b 115 }
tsumagari 8:dbc8c87dac78 116 // toKeikiSerial.putc(cadence);
taurin 4:4a13dd263a7b 117 pc.printf("test\n\r");
YusukeWakuta 0:b1290ca6c4a2 118 }
tsumagari 8:dbc8c87dac78 119
tsumagari 10:b7159feb11fd 120 //void calcCadence(){
tsumagari 10:b7159feb11fd 121 // //pc.printf("%f,%f\n\r",p.read(),q.read());
tsumagari 10:b7159feb11fd 122 // if(p.read() > THRESHOLD_OH_VALUE) stateP = true;
tsumagari 10:b7159feb11fd 123 // else stateP = false;
tsumagari 10:b7159feb11fd 124 // if(q.read() > THRESHOLD_OH_VALUE) stateQ = true;
tsumagari 10:b7159feb11fd 125 // else stateQ = false;
tsumagari 10:b7159feb11fd 126 // if((stateP == true && stateP_old == false) ||
tsumagari 10:b7159feb11fd 127 // stateQ == true && stateQ_old == false){
tsumagari 10:b7159feb11fd 128 // cadenceTimer.stop();
tsumagari 10:b7159feb11fd 129 // cadence = (char)30.0/cadenceTimer.read();
tsumagari 10:b7159feb11fd 130 // pc.printf("Cadence:%i\n\r",cadence);
tsumagari 10:b7159feb11fd 131 // cadenceTimer.reset();
tsumagari 10:b7159feb11fd 132 // cadenceTimer.start();
tsumagari 10:b7159feb11fd 133 // }
tsumagari 10:b7159feb11fd 134 // stateP_old = stateP;
tsumagari 10:b7159feb11fd 135 // stateQ_old = stateQ;
tsumagari 10:b7159feb11fd 136 //}
tsumagari 10:b7159feb11fd 137 //
YusukeWakuta 0:b1290ca6c4a2 138 void init(){
tsumagari 9:c32999b4d2f9 139 //--------------------------------------(resetInterrupt init)
tsumagari 9:c32999b4d2f9 140 resetPin.rise(resetInterrupt);
tsumagari 9:c32999b4d2f9 141 resetPin.mode(PullDown);
tsumagari 9:c32999b4d2f9 142 //-----------------------------------------------------------
tsumagari 10:b7159feb11fd 143 // cadenceTimer.start();
tsumagari 10:b7159feb11fd 144 // cadenceTicker.attach(calcCadence, CALC_CADENCE_TIME);
tsumagari 9:c32999b4d2f9 145 // sendDatasTicker.attach(SendDatas,SEND_DATAS_TIME);
tsumagari 10:b7159feb11fd 146 for(int i = 0; i < INPUT_DATAS_NUM; i++){
taurin 2:9dc7d5f1e910 147 inputDatas_R[i] = 0;
taurin 2:9dc7d5f1e910 148 inputDatas_L[i] = 0;
taurin 2:9dc7d5f1e910 149 }
YusukeWakuta 0:b1290ca6c4a2 150 }
YusukeWakuta 0:b1290ca6c4a2 151
YusukeWakuta 0:b1290ca6c4a2 152
YusukeWakuta 0:b1290ca6c4a2 153 void receiveDatas(){
YusukeWakuta 0:b1290ca6c4a2 154 if(can_R.read(recmsg_R)){
YusukeWakuta 0:b1290ca6c4a2 155 for(int i = 0; i < recmsg_R.len; i++){
YusukeWakuta 0:b1290ca6c4a2 156 yokutanDatas_R[i] = recmsg_R.data[i];
YusukeWakuta 0:b1290ca6c4a2 157 }
taurin 4:4a13dd263a7b 158 myled1 = !myled1;
YusukeWakuta 0:b1290ca6c4a2 159 }
YusukeWakuta 0:b1290ca6c4a2 160 if(can_L.read(recmsg_L)){
YusukeWakuta 0:b1290ca6c4a2 161 for(int i = 0; i < recmsg_L.len; i++){
YusukeWakuta 0:b1290ca6c4a2 162 yokutanDatas_L[i] = recmsg_L.data[i];
YusukeWakuta 0:b1290ca6c4a2 163 }
taurin 4:4a13dd263a7b 164 myled2 = !myled2;
YusukeWakuta 0:b1290ca6c4a2 165 }
YusukeWakuta 0:b1290ca6c4a2 166 }
YusukeWakuta 0:b1290ca6c4a2 167
YusukeWakuta 0:b1290ca6c4a2 168 int main(){
YusukeWakuta 0:b1290ca6c4a2 169 init();
YusukeWakuta 0:b1290ca6c4a2 170 while(1){
tsumagari 8:dbc8c87dac78 171 InputControlValues();
tsumagari 10:b7159feb11fd 172 wait_us(5);
YusukeWakuta 0:b1290ca6c4a2 173 receiveDatas();
tsumagari 9:c32999b4d2f9 174 SendDatas();
tsumagari 10:b7159feb11fd 175 // toString_R();
taurin 4:4a13dd263a7b 176 // toString_L();
YusukeWakuta 0:b1290ca6c4a2 177 wait(WAIT_LOOP_TIME);
YusukeWakuta 0:b1290ca6c4a2 178 }
YusukeWakuta 0:b1290ca6c4a2 179 }