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

Dependencies:   mbed-rtos mbed

Fork of ControlMain2017 by albatross

Committer:
YusukeWakuta
Date:
Fri Jun 02 05:21:47 2017 +0000
Branch:
?????
Revision:
48:2965c51ef540
Parent:
46:53eb2ba661c5
valueprocessor??????push; ;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
YusukeWakuta 13:79eb74eb86c4 1 //中央
YusukeWakuta 0:b1290ca6c4a2 2
YusukeWakuta 0:b1290ca6c4a2 3 #include "mbed.h"
YusukeWakuta 42:6cc53727acc2 4 #include "ValueProcessor.h"
tsumagari 37:7ce6e87b9c36 5 //#include "rtos.h"
tsumagari 10:b7159feb11fd 6 #define WAIT_LOOP_TIME 0.001
tsumagari 9:c32999b4d2f9 7 #define YOKUTAN_DATAS_NUM 7
YusukeWakuta 32:60af346703d3 8 #define INPUT_DATAS_NUM 7 //ここは1倍とまでしかCANでは一度に送れないため、8以下。そして、翼端コードと数字を合わせる必要あり。
YusukeWakuta 0:b1290ca6c4a2 9 #define SEND_DATAS_CAN_ID 100
tsumagari 8:dbc8c87dac78 10 #define SEND_DATAS_TIME 0.5
tsumagari 8:dbc8c87dac78 11 #define THRESHOLD_OH_VALUE 0.14
YusukeWakuta 15:c5ade23e5de4 12 #define SAMPLE_INTERVAL 0.05
YusukeWakuta 0:b1290ca6c4a2 13
YusukeWakuta 19:6387e3f02b37 14 /*
YusukeWakuta 19:6387e3f02b37 15 roll入力とピッチ入力だとピッチの方が1.5倍効くように
YusukeWakuta 19:6387e3f02b37 16 */
YusukeWakuta 18:31722545ecf1 17
tsumagari 9:c32999b4d2f9 18 //-----------------------------------(resetInterrupt def)
tsumagari 9:c32999b4d2f9 19 extern "C" void mbed_reset();
YusukeWakuta 13:79eb74eb86c4 20 InterruptIn resetPin(p22);
tsumagari 9:c32999b4d2f9 21 Timer resetTimeCount;
YusukeWakuta 15:c5ade23e5de4 22 void resetInterrupt()
YusukeWakuta 15:c5ade23e5de4 23 {
YusukeWakuta 15:c5ade23e5de4 24 while(resetPin) {
tsumagari 9:c32999b4d2f9 25 resetTimeCount.start();
tsumagari 9:c32999b4d2f9 26 if(resetTimeCount.read()>3) mbed_reset();
tsumagari 9:c32999b4d2f9 27 }
tsumagari 9:c32999b4d2f9 28 resetTimeCount.reset();
tsumagari 9:c32999b4d2f9 29 }
tsumagari 9:c32999b4d2f9 30 //-------------------------------------------------------
tsumagari 9:c32999b4d2f9 31
taurin 6:7484315ba88a 32 CAN can_R(p30,p29);
taurin 6:7484315ba88a 33 CAN can_L(p9,p10);
YusukeWakuta 14:ffe9460922cb 34 Serial toKeikiSerial(p28,p27);
tsumagari 10:b7159feb11fd 35 AnalogIn rollPin(p15);
YusukeWakuta 31:3a6be197e98f 36 AnalogIn pitchPin(p18);
YusukeWakuta 13:79eb74eb86c4 37 DigitalIn drug_R(p14);
YusukeWakuta 31:3a6be197e98f 38 DigitalIn drug_L(p17);
YusukeWakuta 25:12408563540d 39 DigitalOut led1(LED1);
YusukeWakuta 25:12408563540d 40 DigitalOut led2(LED2);
YusukeWakuta 15:c5ade23e5de4 41 DigitalOut led4(LED4);
YusukeWakuta 15:c5ade23e5de4 42 DigitalOut led3(LED3);
YusukeWakuta 43:2d8bffac06cd 43 Serial pc(USBTX,USBRX);
YusukeWakuta 42:6cc53727acc2 44 ValueProcess VP;
tsumagari 37:7ce6e87b9c36 45 //DigitalOut fusokuControl(p25);
tsumagari 9:c32999b4d2f9 46 //Ticker sendDatasTicker;
YusukeWakuta 0:b1290ca6c4a2 47
taurin 4:4a13dd263a7b 48 char yokutanDatas_R[YOKUTAN_DATAS_NUM];
taurin 4:4a13dd263a7b 49 char yokutanDatas_L[YOKUTAN_DATAS_NUM];
tsumagari 10:b7159feb11fd 50 char inputDatas_R[INPUT_DATAS_NUM];
tsumagari 10:b7159feb11fd 51 char inputDatas_L[INPUT_DATAS_NUM];
YusukeWakuta 24:72f9cb6e9440 52
YusukeWakuta 3:0e66ce2ab2fb 53 CANMessage recmsg_R;
YusukeWakuta 3:0e66ce2ab2fb 54 CANMessage recmsg_L;
YusukeWakuta 0:b1290ca6c4a2 55
tsumagari 37:7ce6e87b9c36 56 //void tickFusoku(void const * arg){
tsumagari 37:7ce6e87b9c36 57 // while(1){
tsumagari 37:7ce6e87b9c36 58 // fusokuControl = 1;
tsumagari 37:7ce6e87b9c36 59 // wait_us(500);
tsumagari 37:7ce6e87b9c36 60 // fusokuControl = 0;
tsumagari 37:7ce6e87b9c36 61 // wait_us(4500);
tsumagari 37:7ce6e87b9c36 62 // }
tsumagari 37:7ce6e87b9c36 63 //}
tsumagari 36:5ad172e48384 64
YusukeWakuta 15:c5ade23e5de4 65 void InputControlValues()
YusukeWakuta 15:c5ade23e5de4 66 {
YusukeWakuta 42:6cc53727acc2 67 VP.Processing(rollPin.read(),pitchPin.read(),(int *)inputDatas_R,(int *)inputDatas_L);
YusukeWakuta 48:2965c51ef540 68 pc.printf("R:%d L:%d show Both Right %d %d\n\r",*(int *)inputDatas_R,*(int *)inputDatas_L,drug_R.read(), drug_L.read());
YusukeWakuta 31:3a6be197e98f 69 inputDatas_R[sizeof(int)+ 2] = (char)drug_R;
YusukeWakuta 31:3a6be197e98f 70 inputDatas_L[sizeof(int)+2] = (char)drug_L;
YusukeWakuta 43:2d8bffac06cd 71 led4 =! led4;
YusukeWakuta 0:b1290ca6c4a2 72 }
YusukeWakuta 0:b1290ca6c4a2 73
YusukeWakuta 15:c5ade23e5de4 74 void SendDatas()
YusukeWakuta 15:c5ade23e5de4 75 {
tsumagari 10:b7159feb11fd 76 can_R.write(CANMessage(SEND_DATAS_CAN_ID, inputDatas_R, INPUT_DATAS_NUM));
tsumagari 10:b7159feb11fd 77 can_L.write(CANMessage(SEND_DATAS_CAN_ID, inputDatas_L, INPUT_DATAS_NUM));
tsumagari 8:dbc8c87dac78 78 toKeikiSerial.putc(';');
YusukeWakuta 15:c5ade23e5de4 79 for(int i = 0; i < YOKUTAN_DATAS_NUM; i++) {
YusukeWakuta 34:0cff1601bc13 80 toKeikiSerial.putc(yokutanDatas_R[i]);
YusukeWakuta 31:3a6be197e98f 81
YusukeWakuta 34:0cff1601bc13 82 }
YusukeWakuta 34:0cff1601bc13 83 for(int i = 0; i < YOKUTAN_DATAS_NUM; i++) {
YusukeWakuta 0:b1290ca6c4a2 84 toKeikiSerial.putc(yokutanDatas_L[i]);
YusukeWakuta 0:b1290ca6c4a2 85 }
YusukeWakuta 15:c5ade23e5de4 86 for(int i = 0; i < INPUT_DATAS_NUM; i++) {
taurin 4:4a13dd263a7b 87 toKeikiSerial.putc(inputDatas_R[i]);
YusukeWakuta 33:d54dacb7a0aa 88 }
YusukeWakuta 33:d54dacb7a0aa 89 for(int i = 0; i < INPUT_DATAS_NUM; i++) {
taurin 4:4a13dd263a7b 90 toKeikiSerial.putc(inputDatas_L[i]);
taurin 4:4a13dd263a7b 91 }
YusukeWakuta 0:b1290ca6c4a2 92 }
tsumagari 8:dbc8c87dac78 93
YusukeWakuta 15:c5ade23e5de4 94 void init()
YusukeWakuta 15:c5ade23e5de4 95 {
tsumagari 9:c32999b4d2f9 96 //--------------------------------------(resetInterrupt init)
tsumagari 9:c32999b4d2f9 97 resetPin.rise(resetInterrupt);
tsumagari 9:c32999b4d2f9 98 resetPin.mode(PullDown);
tsumagari 9:c32999b4d2f9 99 //-----------------------------------------------------------
tsumagari 9:c32999b4d2f9 100 // sendDatasTicker.attach(SendDatas,SEND_DATAS_TIME);
YusukeWakuta 15:c5ade23e5de4 101 for(int i = 0; i < INPUT_DATAS_NUM; i++) {
taurin 2:9dc7d5f1e910 102 inputDatas_R[i] = 0;
taurin 2:9dc7d5f1e910 103 inputDatas_L[i] = 0;
taurin 2:9dc7d5f1e910 104 }
YusukeWakuta 0:b1290ca6c4a2 105 }
YusukeWakuta 0:b1290ca6c4a2 106
YusukeWakuta 15:c5ade23e5de4 107 void receiveDatas()
YusukeWakuta 15:c5ade23e5de4 108 {
YusukeWakuta 15:c5ade23e5de4 109 if(can_R.read(recmsg_R)) {
YusukeWakuta 15:c5ade23e5de4 110 for(int i = 0; i < recmsg_R.len; i++) {
YusukeWakuta 0:b1290ca6c4a2 111 yokutanDatas_R[i] = recmsg_R.data[i];
YusukeWakuta 0:b1290ca6c4a2 112 }
YusukeWakuta 25:12408563540d 113 led1 = !led1;
YusukeWakuta 0:b1290ca6c4a2 114 }
YusukeWakuta 15:c5ade23e5de4 115 if(can_L.read(recmsg_L)) {
YusukeWakuta 15:c5ade23e5de4 116 for(int i = 0; i < recmsg_L.len; i++) {
YusukeWakuta 0:b1290ca6c4a2 117 yokutanDatas_L[i] = recmsg_L.data[i];
YusukeWakuta 15:c5ade23e5de4 118 led3 = !led3;
YusukeWakuta 0:b1290ca6c4a2 119 }
YusukeWakuta 25:12408563540d 120 led2 = !led2;
YusukeWakuta 0:b1290ca6c4a2 121 }
YusukeWakuta 0:b1290ca6c4a2 122 }
YusukeWakuta 0:b1290ca6c4a2 123
YusukeWakuta 15:c5ade23e5de4 124 int main()
YusukeWakuta 15:c5ade23e5de4 125 {
tsumagari 37:7ce6e87b9c36 126 // Thread tickFusokuThread(&tickFusoku);
YusukeWakuta 0:b1290ca6c4a2 127 init();
YusukeWakuta 42:6cc53727acc2 128 VP.setNeutral(rollPin.read(),pitchPin.read());
YusukeWakuta 15:c5ade23e5de4 129 while(1) {
tsumagari 8:dbc8c87dac78 130 InputControlValues();
tsumagari 10:b7159feb11fd 131 wait_us(5);
YusukeWakuta 0:b1290ca6c4a2 132 receiveDatas();
tsumagari 9:c32999b4d2f9 133 SendDatas();
YusukeWakuta 0:b1290ca6c4a2 134 wait(WAIT_LOOP_TIME);
YusukeWakuta 0:b1290ca6c4a2 135 }
YusukeWakuta 0:b1290ca6c4a2 136 }