Unko buriburi

Dependencies:   mbed PS_PAD

Revision:
0:dfd7b420339f
Child:
1:aec7284f51de
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Wed Aug 26 08:22:16 2020 +0000
@@ -0,0 +1,119 @@
+/*
+ * ======================
+ * VS-C3/VS-RCV3 PIN
+ * ======================
+ * 1:NC  2:NC
+ * 3:DAT 4:CMD
+ * 5:SEL 6:CLK
+ * 7:+5~7V 8:NC
+ * 9:+3V 10:GND
+ *
+ */
+ 
+#include "mbed.h"
+#include "PS_PAD.h"
+
+class Motor{
+    PwmOut a, b;
+public:
+    Motor(PinName A_term, PinName B_term) : a(A_term), b(B_term) {
+        a.period(0.001);
+        b.period(0.001);
+    }
+    
+    Motor& operator=(double duty) {
+        if(duty > 0){
+            a = duty < 1 ? duty : 1;
+            b = 0;
+        }else {
+            a = 0;
+            b = duty > -1 ? -duty : -1;
+        }
+        return *this;
+    }
+};
+
+
+PS_PAD vsc3(PA_7, PA_6, PA_5, PA_4); //MOSI, MISO, SCK, SS
+
+DigitalIn lim[7] = {PD_2, PD_3, PD_4, PD_5, PD_6, PD_7, PG_9};
+Motor rmotor(PE_9, PE_11);
+Motor lmotor(PE_13, PE_14);
+Motor sxmotor(PA_0, PA_1);
+Motor tsmotor(PA_2, PA_3);
+Motor trmotor(PC_6, PC_7);
+Motor tlmotor(PC_8, PC_9);
+
+int main() {
+    vsc3.init();
+    double movey = 0, turn = 0;
+    printf("START\n");
+    
+    while(1) {
+        vsc3.poll();
+        if (vsc3.read(PS_PAD::PAD_TOP)){
+            movey = -1;
+        }else if(vsc3.read(PS_PAD::PAD_BOTTOM)){
+            movey = 1;
+        }else if(abs(vsc3.read(PS_PAD::ANALOG_LY)) > 10){
+            movey = (vsc3.read(PS_PAD::ANALOG_LY)) / 128.0;
+        }else{
+            movey = 0;
+        }
+               
+        if (vsc3.read(PS_PAD::PAD_RIGHT)){
+            turn = -1;
+        }else if(PS_PAD::PAD_LEFT){
+            turn = 1;
+        }else if(abs(vsc3.read(PS_PAD::ANALOG_LX)) > 10){
+            turn = (vsc3.read(PS_PAD::ANALOG_LX)) / 128.0;
+        }else{
+            turn = 0;
+        }
+        
+        rmotor = -movey+turn;      //move
+        lmotor = -movey-turn;
+        
+        if (vsc3.read(PS_PAD::PAD_CIRCLE) && lim[0] == 0){        //limitswitch
+            sxmotor = 1;
+        }else if(vsc3.read(PS_PAD::PAD_X) && lim[1] == 0){
+            sxmotor = -1;
+        }else if(vsc3.read(PS_PAD::PAD_CIRCLE) && vsc3.read(PS_PAD::PAD_X)){
+            sxmotor = 0;
+        }else{
+            sxmotor = 0;
+        }
+        
+        if (vsc3.read(PS_PAD::PAD_TRIANGLE) && lim[2] == 0){
+            tsmotor = 1;
+        }else if(vsc3.read(PS_PAD::PAD_SQUARE) && lim[3] == 0){
+            tsmotor = -1;
+        }else if(vsc3.read(PS_PAD::PAD_TRIANGLE) && vsc3.read(PS_PAD::PAD_SQUARE)){
+            tsmotor = 0;
+        }else{
+            tsmotor = 0;
+        }        
+        
+        if (vsc3.read(PS_PAD::PAD_R1) && lim[4] == 0){
+            trmotor = 1;
+        }else if(vsc3.read(PS_PAD::PAD_R2) && lim[5] == 0){
+            trmotor = -1;
+        }else if(vsc3.read(PS_PAD::PAD_R1) && vsc3.read(PS_PAD::PAD_R2)){
+            trmotor = 0;
+        }else{
+            trmotor = 0;
+        }
+                
+        if (vsc3.read(PS_PAD::PAD_L1) && lim[6] == 0){
+            tlmotor = 1;
+        }else if(vsc3.read(PS_PAD::PAD_L2) && lim[7] == 0){
+            tlmotor = -1;
+        }else if(vsc3.read(PS_PAD::PAD_L1) && vsc3.read(PS_PAD::PAD_L2)){
+            tlmotor = 0;
+        }else{
+            tlmotor = 0;
+        }
+        
+        wait(0.05);
+    }
+}
\ No newline at end of file