Kiko Ishimoto / Mbed 2 deprecated sotuken_mother_2

Dependencies:   ds3_si mbed omuni solenoid

Fork of 2017_Robocon_mother by gaku takasawa

Files at this revision

API Documentation at this revision

Comitter:
kikoaac
Date:
Fri Mar 02 02:56:37 2018 +0000
Parent:
8:030080071a4a
Commit message:
??

Changed in this revision

ds3_si.lib Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
omuni.lib Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ds3_si.lib	Fri Mar 02 02:56:37 2018 +0000
@@ -0,0 +1,1 @@
+https://os.mbed.com/users/kikoaac/code/ds3_si/#5472bead8509
--- a/main.cpp	Wed Oct 25 08:53:38 2017 +0000
+++ b/main.cpp	Fri Mar 02 02:56:37 2018 +0000
@@ -1,25 +1,21 @@
 #include "mbed.h"
 #include "omuni.h"
-#include "solenoid.h"
-
-#define DEBUG 0
+#include "ds3_si.h"
+#define DEBUG 1
 
 #define CON_OFFSET 15
 
 I2C i2c(p28, p27);
 omuni omu(&i2c, 0x10, 0x14, 0x16);
-solenoid sol(&i2c, 0x20);
 
-Serial con(p9, p10);
-Serial master(p13,p14);
 Serial pc(USBTX, USBRX);
+ds3_si con(p9,p10,2400);
 
-BusOut serialsel(p19,p20,LED1,LED2);
+BusOut serialsel(LED1,LED2,LED3,LED4);
 Timer serialtimer;
 //Ticker readtimer;
 
-char ConData[2][12];
-char offset[4];
+char ConData[5];
 
 /*
 void mbedreset()
@@ -30,97 +26,108 @@
 
 void GetData()
 {
-    //readtimer.attach(&mbedreset, 1);
+    __disable_irq();
+    NVIC_ClearPendingIRQ(UART0_IRQn);
+    NVIC_ClearPendingIRQ(UART1_IRQn);
+    NVIC_ClearPendingIRQ(UART2_IRQn);
+    NVIC_ClearPendingIRQ(UART3_IRQn);
     static bool main_flag = 1 ;
-    if ( con.getc() == 'H' ) {
-         ConData[0][0] = 'H';
-         for (int i = 1; i < 12; i++)
-         {
-             char t = (char)con.getc();
-             ConData[0][i] = t;
-         }
-         for (int i = 0; i < 12; i++)
-         {
-             char t = (char)con.getc();
-             ConData[1][i] = t;
-         }
-        for(int i = 0; i < 12; i++)
+    if ( pc.getc() == 'H' ) {
+        ConData[0] = 'H';
+        for (int i = 1; i < 5; i++)
         {
-                master.putc(ConData[0][i]);
-        }
-        for(int i = 0; i < 12; i++)
-        {
-                master.putc(ConData[1][i]);
+         char t = (char)pc.getc();
+         ConData[i] = t;
         }
         if(main_flag)
         {
-            /*
-            
-            offset[0] = ConData[0][1];
-            offset[1] = ConData[0][2];
-            offset[2] = ConData[1][1];
-            offset[3] = ConData[1][2];
-            */
             serialtimer.start();
             main_flag = 0;
         }
-        //ConData[0][1] -= offset[0];
-        //ConData[0][2] -= offset[1];
-        //ConData[1][1] -= offset[2];
-        //ConData[1][2] -= offset[3];
-        
-        if( (char)255 - CON_OFFSET < ConData[1][1] || ConData[1][1] < CON_OFFSET)
-            ConData[1][1] = 0;
             
         serialtimer.reset();
     }
-    //readtimer.detach();
+    __enable_irq();
+}
+#define deadZone 2
+bool triggerAnalog(){
+    return abs(con.analogstate(L3x)) > deadZone || abs(con.analogstate(L3y))  > deadZone 
+    || abs(con.analogstate(R3y))  > deadZone || abs(con.analogstate(R3y)) > deadZone;
 }
 
-
+char MotorReset[] = {'H', 0, 0, 0, 0};
 int main() {
         serialsel = 0x05;
-        con.baud(115200);
-        master.baud(115200);
         pc.baud(115200);
-        con.attach(&GetData,Serial::RxIrq);
+        pc.attach(&GetData,Serial::RxIrq);
         
         serialtimer.stop();
         serialtimer.reset();
         
         while(1){
-            char MotorData[] = {'H', ConData[0][1], ConData[0][2], ConData[1][1], ConData[1][2]};
-            omu.out(MotorData);
-
-            char soldata = ((ConData[0][3] << 2) + ConData[1][3]) << 4;
-            sol = soldata;
             
+            wait(0.01);
+            int8_t MotorData[] = {'H', ConData[1], ConData[2], ConData[3], ConData[4]};
+            MotorData[3] = con.analogstate(L3x);
+            MotorData[4] = con.analogstate(L3y);
+            MotorData[1] = con.analogstate(R3x);
+            MotorData[2] = con.analogstate(R3y);
             if(serialtimer.read_ms() > 500)
             {
-                serialsel = ~serialsel;
-                serialtimer.reset();
-                char MotorReset[] = {'H', 0, 0, 0, 0};
+                serialsel = 1;
                 omu.out(MotorReset);
+            }else{
+                if(triggerAnalog() == true){
+                    if(ConData[1] == 'S' && ConData[2] == 'T'&& ConData[3] == 'O' && ConData[4] == 'P'){
+                        MotorData[4] = MotorData[4] > 0 ? 0 : MotorData[4];  
+                        serialsel = 0xF;  
+                    }else if(ConData[1] == 'O' && ConData[2] == 'N'&& ConData[3] == 'E'){
+                        MotorData[4] = MotorData[4] > 60 ? 60 : MotorData[4]; 
+                        if(MotorData[4] > 0) 
+                            if(ConData[4] == 'R'){
+                                MotorData[1] = 30;
+                                MotorData[2] = 0;
+                                serialsel = 0x2;
+                            }
+                            else  if(ConData[4] == 'L')  {
+                                MotorData[1] = -30;
+                                MotorData[2] = 0;
+                                serialsel = 0x4;
+                            }
+                    }else if(ConData[1] == 'E' && ConData[2] == 'S'&& ConData[3] == 'T'){
+                        MotorData[4] = MotorData[4] > 40 ? 40 : MotorData[4]; 
+                        if(MotorData[4] > 0) 
+                        if(ConData[4] == 'R'){
+                            MotorData[1] = 30;
+                            MotorData[2] = 0;
+                            serialsel = 0x2;
+                        }else  if(ConData[4] == 'L')  {
+                            MotorData[1] = -30;
+                            MotorData[2] = 0;
+                            serialsel = 0x4;
+                        }else if(ConData[4] == 'G'){
+                            MotorData[3] = 0;
+                            MotorData[2] = 0;
+                        }
+                    }else if(ConData[1] == 'F' && ConData[2] == 'R'&& ConData[3] == 'E' && ConData[4] == 'E'){
+                            serialsel = 0x0;
+                    }
+                    omu.out((char*)MotorData);
+                }else{
+                    serialsel = 1;
+                    omu.out(MotorReset);
+                }
+                /*
+                #if DEBUG 
+                for(int i = 0; i < 5; i++)
+                {
+                        pc.printf("%d",MotorData[i]);
+                }
+                        pc.printf("\n");
+                #endif*/
+                
             }
 
-            #if DEBUG 
-            for(int i = 0; i < 12; i++)
-            {
-                    pc.printf("%3d ",ConData[0][i]);
-            }
-            for(int i = 0; i < 12; i++)
-            {
-                    pc.printf("%3d ",ConData[1][i]);
-            } 
-            pc.printf("\n\r");
-            
-            for(int i = 0; i < 4; i++)
-            {
-                    pc.printf("%3d ",offset[i]);
-            }
-            printf("\n");
-            
-            printf("%d\n",soldata);
-            #endif
+
         }  
 }
--- a/omuni.lib	Wed Oct 25 08:53:38 2017 +0000
+++ b/omuni.lib	Fri Mar 02 02:56:37 2018 +0000
@@ -1,1 +1,1 @@
-https://os.mbed.com/users/gaku_sigu/code/omuni/#60f122986f29
+https://os.mbed.com/users/kikoaac/code/omuni/#76e11784ce6b