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

Dependencies:   mbed-rtos mbed

Fork of ControlMain2017 by albatross

Branch:
test
Revision:
8:dbc8c87dac78
Parent:
7:59ddbe239835
Child:
9:c32999b4d2f9
--- a/main.cpp	Fri Nov 25 09:42:13 2016 +0000
+++ b/main.cpp	Sat Nov 26 01:17:08 2016 +0000
@@ -6,23 +6,24 @@
 #define YOKUTAN_DATAS_NUM 4
 #define IMPUT_DATAS_NUM 2
 #define SEND_DATAS_CAN_ID 100
-#define SEND_DATAS_TIME 0.15 //0.1
-#define READ_INPUT_TIME 0.2
+#define SEND_DATAS_TIME 0.5
+#define THRESHOLD_OH_VALUE 0.14
+#define CALC_CADENCE_TIME 0.05
 
 CAN can_R(p30,p29);
 CAN can_L(p9,p10);
+//Serial toKeikiSerial(p13,p14);
+BufferedSoftSerial toKeikiSerial(p17,p18);
 Serial pc(USBTX,USBRX);
-//BufferedSoftSerial toKeikiSerial(p26,p25);
-Serial toKeikiSerial(p13,p14);
 DigitalIn eruron_R(p22);
 DigitalIn eruron_L(p20);
 DigitalIn drug_R(p23);
 DigitalIn drug_L(p19);
 DigitalOut myled1(LED1);
 DigitalOut myled2(LED2);
-//Ticker sendDatasTicker;
-Ticker inputControlValuesTicker;
-//Ticker testSSTicker;
+Ticker sendDatasTicker;
+Ticker cadenceTicker;
+Timer cadenceTimer;
 AnalogIn p(p15);
 AnalogIn q(p16);
 
@@ -74,34 +75,45 @@
 void SendDatas(){
     can_R.write(CANMessage(SEND_DATAS_CAN_ID, inputDatas_R, IMPUT_DATAS_NUM));
     can_L.write(CANMessage(SEND_DATAS_CAN_ID, inputDatas_L, IMPUT_DATAS_NUM));
+    toKeikiSerial.putc(';');
     for(int i = 0; i < YOKUTAN_DATAS_NUM; i++){
+//        toKeikiSerial.putc(i);
+//        toKeikiSerial.putc(10+i);
         toKeikiSerial.putc(yokutanDatas_R[i]);
-        wait_ms(10);
         toKeikiSerial.putc(yokutanDatas_L[i]);
-        wait_ms(10);
     }
     for(int i = 0; i < IMPUT_DATAS_NUM; i++){
+//        toKeikiSerial.putc(4+i);
+//        toKeikiSerial.putc(14+i);
         toKeikiSerial.putc(inputDatas_R[i]);
-        wait_ms(10);
-        pc.printf("%d\n\r",inputDatas_R[i]);//%cで出力すると見えない系の文字が出る
         toKeikiSerial.putc(inputDatas_L[i]);
-        wait_ms(10);
-        pc.printf("%d\n\r",inputDatas_L[i]);
     }
-    toKeikiSerial.putc(cadence);
-    wait_ms(10);
+//    toKeikiSerial.putc(cadence);
     pc.printf("test\n\r");
 }
-//void testSS(){
-//    test.putc(50);
-//    wait_ms(10);
-//}
-       
+
+void calcCadence(){
+    //pc.printf("%f,%f\n\r",p.read(),q.read());
+    if(p.read() > THRESHOLD_OH_VALUE) stateP = true;
+    else stateP = false;
+    if(q.read() > THRESHOLD_OH_VALUE) stateQ = true;
+    else stateQ = false;
+    if((stateP == true && stateP_old == false) || 
+        stateQ == true && stateQ_old == false){
+        cadenceTimer.stop();
+        cadence = (char)30.0/cadenceTimer.read();
+        pc.printf("Cadence:%i\n\r",cadence);
+        cadenceTimer.reset();
+        cadenceTimer.start();
+    }
+    stateP_old = stateP;
+    stateQ_old = stateQ;
+}        
 
 void init(){
-    toKeikiSerial.baud(9600);
-//    sendDatasTicker.attach(SendDatas,SEND_DATAS_TIME);
-    inputControlValuesTicker.attach(InputControlValues,READ_INPUT_TIME);
+    cadenceTimer.start();
+    cadenceTicker.attach(calcCadence, CALC_CADENCE_TIME);
+    sendDatasTicker.attach(SendDatas,SEND_DATAS_TIME);
     for(int i = 0; i < IMPUT_DATAS_NUM; i++){
         inputDatas_R[i] = 0;
         inputDatas_L[i] = 0;
@@ -127,16 +139,11 @@
 int main(){
     init();
     while(1){
-//        for(int i=0; i<IMPUT_DATAS_NUM; i++){
-//            test.putc(inputDatas_R[i]);
-//            wait(0.1);
-//        }
+        InputControlValues();
         wait_us(10);
         receiveDatas();
-        SendDatas();
         //toString_R();
 //        toString_L();
-
         wait(WAIT_LOOP_TIME);
     }
 }
\ No newline at end of file