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

Dependencies:   mbed-rtos mbed

Fork of ControlMain2017 by albatross

Committer:
tsumagari
Date:
Sat Jan 21 11:46:19 2017 +0000
Branch:
test
Revision:
9:c32999b4d2f9
Parent:
8:dbc8c87dac78
Child:
10:b7159feb11fd
reset_mbed???p26?????????????????????softwareserial????????

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"
taurin 4:4a13dd263a7b 5 #define WAIT_LOOP_TIME 0.1
tsumagari 9:c32999b4d2f9 6 #define YOKUTAN_DATAS_NUM 7
YusukeWakuta 0:b1290ca6c4a2 7 #define IMPUT_DATAS_NUM 2
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);
taurin 6:7484315ba88a 31 DigitalIn eruron_R(p22);
taurin 6:7484315ba88a 32 DigitalIn eruron_L(p20);
taurin 6:7484315ba88a 33 DigitalIn drug_R(p23);
taurin 6:7484315ba88a 34 DigitalIn drug_L(p19);
YusukeWakuta 0:b1290ca6c4a2 35 DigitalOut myled1(LED1);
YusukeWakuta 0:b1290ca6c4a2 36 DigitalOut myled2(LED2);
tsumagari 9:c32999b4d2f9 37 //Ticker sendDatasTicker;
tsumagari 8:dbc8c87dac78 38 Ticker cadenceTicker;
tsumagari 8:dbc8c87dac78 39 Timer cadenceTimer;
taurin 4:4a13dd263a7b 40 AnalogIn p(p15);
taurin 4:4a13dd263a7b 41 AnalogIn q(p16);
YusukeWakuta 0:b1290ca6c4a2 42
taurin 4:4a13dd263a7b 43 char yokutanDatas_R[YOKUTAN_DATAS_NUM];
taurin 4:4a13dd263a7b 44 char yokutanDatas_L[YOKUTAN_DATAS_NUM];
YusukeWakuta 0:b1290ca6c4a2 45 char inputDatas_R[IMPUT_DATAS_NUM];
YusukeWakuta 0:b1290ca6c4a2 46 char inputDatas_L[IMPUT_DATAS_NUM];
taurin 4:4a13dd263a7b 47 char cadence = 0;
taurin 4:4a13dd263a7b 48 bool stateP = true;
taurin 4:4a13dd263a7b 49 bool stateQ = true;
taurin 4:4a13dd263a7b 50 bool stateP_old = true;
taurin 4:4a13dd263a7b 51 bool stateQ_old = true;
YusukeWakuta 0:b1290ca6c4a2 52
YusukeWakuta 3:0e66ce2ab2fb 53 CANMessage recmsg_R;
YusukeWakuta 3:0e66ce2ab2fb 54 CANMessage recmsg_L;
YusukeWakuta 0:b1290ca6c4a2 55
taurin 4:4a13dd263a7b 56 void InputControlValues(){
taurin 4:4a13dd263a7b 57 inputDatas_R[1] = (char)drug_R;
taurin 4:4a13dd263a7b 58 inputDatas_L[1] = (char)drug_L;
taurin 4:4a13dd263a7b 59 if(eruron_R){
taurin 4:4a13dd263a7b 60 inputDatas_R[0] = 0;
taurin 4:4a13dd263a7b 61 inputDatas_L[0] = 2;
taurin 4:4a13dd263a7b 62 }
taurin 4:4a13dd263a7b 63 else if(eruron_L){
taurin 4:4a13dd263a7b 64 inputDatas_R[0] = 2;
taurin 4:4a13dd263a7b 65 inputDatas_L[0] = 0;
taurin 4:4a13dd263a7b 66 }
taurin 4:4a13dd263a7b 67 else{
taurin 4:4a13dd263a7b 68 inputDatas_R[0] = 1;
taurin 4:4a13dd263a7b 69 inputDatas_L[0] = 1;
taurin 4:4a13dd263a7b 70 }
YusukeWakuta 0:b1290ca6c4a2 71 }
YusukeWakuta 0:b1290ca6c4a2 72
taurin 4:4a13dd263a7b 73 void toString_R(){
taurin 4:4a13dd263a7b 74 pc.printf("R:");
taurin 4:4a13dd263a7b 75 for(int i = 0; i < IMPUT_DATAS_NUM; i++){
taurin 4:4a13dd263a7b 76 pc.printf("%d:%i ",i,inputDatas_R[i]);
taurin 4:4a13dd263a7b 77 }
YusukeWakuta 0:b1290ca6c4a2 78 }
YusukeWakuta 0:b1290ca6c4a2 79
taurin 4:4a13dd263a7b 80 void toString_L(){
taurin 4:4a13dd263a7b 81 pc.printf("L:");
taurin 4:4a13dd263a7b 82 for(int i = 0; i < IMPUT_DATAS_NUM; i++){
taurin 4:4a13dd263a7b 83 pc.printf("%d:%i ",i,inputDatas_L[i]);
taurin 4:4a13dd263a7b 84 }
taurin 4:4a13dd263a7b 85 pc.printf("\n\r");
YusukeWakuta 0:b1290ca6c4a2 86 }
YusukeWakuta 0:b1290ca6c4a2 87
taurin 4:4a13dd263a7b 88 void SendDatas(){
taurin 4:4a13dd263a7b 89 can_R.write(CANMessage(SEND_DATAS_CAN_ID, inputDatas_R, IMPUT_DATAS_NUM));
taurin 4:4a13dd263a7b 90 can_L.write(CANMessage(SEND_DATAS_CAN_ID, inputDatas_L, IMPUT_DATAS_NUM));
tsumagari 8:dbc8c87dac78 91 toKeikiSerial.putc(';');
YusukeWakuta 0:b1290ca6c4a2 92 for(int i = 0; i < YOKUTAN_DATAS_NUM; i++){
tsumagari 8:dbc8c87dac78 93 // toKeikiSerial.putc(i);
tsumagari 8:dbc8c87dac78 94 // toKeikiSerial.putc(10+i);
YusukeWakuta 0:b1290ca6c4a2 95 toKeikiSerial.putc(yokutanDatas_R[i]);
YusukeWakuta 0:b1290ca6c4a2 96 toKeikiSerial.putc(yokutanDatas_L[i]);
YusukeWakuta 0:b1290ca6c4a2 97 }
taurin 4:4a13dd263a7b 98 for(int i = 0; i < IMPUT_DATAS_NUM; i++){
tsumagari 8:dbc8c87dac78 99 // toKeikiSerial.putc(4+i);
tsumagari 8:dbc8c87dac78 100 // toKeikiSerial.putc(14+i);
taurin 4:4a13dd263a7b 101 toKeikiSerial.putc(inputDatas_R[i]);
taurin 4:4a13dd263a7b 102 toKeikiSerial.putc(inputDatas_L[i]);
taurin 4:4a13dd263a7b 103 }
tsumagari 8:dbc8c87dac78 104 // toKeikiSerial.putc(cadence);
taurin 4:4a13dd263a7b 105 pc.printf("test\n\r");
YusukeWakuta 0:b1290ca6c4a2 106 }
tsumagari 8:dbc8c87dac78 107
tsumagari 8:dbc8c87dac78 108 void calcCadence(){
tsumagari 8:dbc8c87dac78 109 //pc.printf("%f,%f\n\r",p.read(),q.read());
tsumagari 8:dbc8c87dac78 110 if(p.read() > THRESHOLD_OH_VALUE) stateP = true;
tsumagari 8:dbc8c87dac78 111 else stateP = false;
tsumagari 8:dbc8c87dac78 112 if(q.read() > THRESHOLD_OH_VALUE) stateQ = true;
tsumagari 8:dbc8c87dac78 113 else stateQ = false;
tsumagari 8:dbc8c87dac78 114 if((stateP == true && stateP_old == false) ||
tsumagari 8:dbc8c87dac78 115 stateQ == true && stateQ_old == false){
tsumagari 8:dbc8c87dac78 116 cadenceTimer.stop();
tsumagari 8:dbc8c87dac78 117 cadence = (char)30.0/cadenceTimer.read();
tsumagari 8:dbc8c87dac78 118 pc.printf("Cadence:%i\n\r",cadence);
tsumagari 8:dbc8c87dac78 119 cadenceTimer.reset();
tsumagari 8:dbc8c87dac78 120 cadenceTimer.start();
tsumagari 8:dbc8c87dac78 121 }
tsumagari 8:dbc8c87dac78 122 stateP_old = stateP;
tsumagari 8:dbc8c87dac78 123 stateQ_old = stateQ;
tsumagari 8:dbc8c87dac78 124 }
YusukeWakuta 0:b1290ca6c4a2 125
YusukeWakuta 0:b1290ca6c4a2 126 void init(){
tsumagari 9:c32999b4d2f9 127 //--------------------------------------(resetInterrupt init)
tsumagari 9:c32999b4d2f9 128 resetPin.rise(resetInterrupt);
tsumagari 9:c32999b4d2f9 129 resetPin.mode(PullDown);
tsumagari 9:c32999b4d2f9 130 //-----------------------------------------------------------
tsumagari 8:dbc8c87dac78 131 cadenceTimer.start();
tsumagari 8:dbc8c87dac78 132 cadenceTicker.attach(calcCadence, CALC_CADENCE_TIME);
tsumagari 9:c32999b4d2f9 133 // sendDatasTicker.attach(SendDatas,SEND_DATAS_TIME);
taurin 2:9dc7d5f1e910 134 for(int i = 0; i < IMPUT_DATAS_NUM; i++){
taurin 2:9dc7d5f1e910 135 inputDatas_R[i] = 0;
taurin 2:9dc7d5f1e910 136 inputDatas_L[i] = 0;
taurin 2:9dc7d5f1e910 137 }
YusukeWakuta 0:b1290ca6c4a2 138 }
YusukeWakuta 0:b1290ca6c4a2 139
YusukeWakuta 0:b1290ca6c4a2 140
YusukeWakuta 0:b1290ca6c4a2 141 void receiveDatas(){
YusukeWakuta 0:b1290ca6c4a2 142 if(can_R.read(recmsg_R)){
YusukeWakuta 0:b1290ca6c4a2 143 for(int i = 0; i < recmsg_R.len; i++){
YusukeWakuta 0:b1290ca6c4a2 144 yokutanDatas_R[i] = recmsg_R.data[i];
YusukeWakuta 0:b1290ca6c4a2 145 }
taurin 4:4a13dd263a7b 146 myled1 = !myled1;
YusukeWakuta 0:b1290ca6c4a2 147 }
YusukeWakuta 0:b1290ca6c4a2 148 if(can_L.read(recmsg_L)){
YusukeWakuta 0:b1290ca6c4a2 149 for(int i = 0; i < recmsg_L.len; i++){
YusukeWakuta 0:b1290ca6c4a2 150 yokutanDatas_L[i] = recmsg_L.data[i];
YusukeWakuta 0:b1290ca6c4a2 151 }
taurin 4:4a13dd263a7b 152 myled2 = !myled2;
YusukeWakuta 0:b1290ca6c4a2 153 }
YusukeWakuta 0:b1290ca6c4a2 154 }
YusukeWakuta 0:b1290ca6c4a2 155
YusukeWakuta 0:b1290ca6c4a2 156 int main(){
YusukeWakuta 0:b1290ca6c4a2 157 init();
YusukeWakuta 0:b1290ca6c4a2 158 while(1){
tsumagari 8:dbc8c87dac78 159 InputControlValues();
YusukeWakuta 0:b1290ca6c4a2 160 wait_us(10);
YusukeWakuta 0:b1290ca6c4a2 161 receiveDatas();
tsumagari 9:c32999b4d2f9 162 SendDatas();
taurin 4:4a13dd263a7b 163 //toString_R();
taurin 4:4a13dd263a7b 164 // toString_L();
YusukeWakuta 0:b1290ca6c4a2 165 wait(WAIT_LOOP_TIME);
YusukeWakuta 0:b1290ca6c4a2 166 }
YusukeWakuta 0:b1290ca6c4a2 167 }