ver6_2の修正版 変更点 phase1のバグ kaisyu関数 tyokudo関数

Dependencies:   mbed QEI PID

Revision:
15:d022288aec51
Parent:
14:ab89b6cd9719
Child:
16:05b26003da50
--- a/main.cpp	Mon Aug 26 01:39:35 2019 +0000
+++ b/main.cpp	Mon Aug 26 02:23:20 2019 +0000
@@ -95,19 +95,19 @@
 void init_send(void);
 void get_pulses(void);
 void print_pulses(void);
-void front(int target);
-void back(int target);
-void right(int target);
-void left(int target);
-void turn_right(int target);
-void turn_left(int target);
+void front(unsigned int target);
+void back(unsigned int target);
+void right(unsigned int target);
+void left(unsigned int target);
+void turn_right(unsigned int target);
+void turn_left(unsigned int target);
+void front_PID(unsigned int target);
+void back_PID(unsigned int target);
+void right_PID(unsigned int target);
+void left_PID(unsigned int target);
+void turn_right_PID(unsigned int target);
+void turn_left_PID(unsigned int target);
 void dondonkasoku(void);
-void front_PID(int target);
-void back_PID(int target);
-void right_PID(int target);
-void left_PID(int target);
-void turn_right_PID(int target);
-void turn_left_PID(int target);
 
 int main(void) {
     
@@ -165,7 +165,7 @@
         pc.printf("x1: %d, x2: %d, y1: %d, y2: %d\n\r", x_pulse1, x_pulse2, y_pulse1, y_pulse2);
 }
 
-void front(int target) {
+void front(unsigned int target) {
     
         front_PID(target);
         i2c.write(0x10, true_migimae_data,     1, false);
@@ -175,7 +175,7 @@
         wait_us(20);
 }
 
-void back(int target) {
+void back(unsigned int target) {
     
         back_PID(target);
         i2c.write(0x10, true_migimae_data,     1, false);
@@ -185,7 +185,7 @@
         wait_us(20);
 }
 
-void right(int target) {
+void right(unsigned int target) {
     
         right_PID(target);
         i2c.write(0x10, true_migimae_data,     1, false);
@@ -195,7 +195,7 @@
         wait_us(20);
 }
 
-void left(int target) {
+void left(unsigned int target) {
     
         left_PID(target);
         i2c.write(0x10, true_migimae_data,     1, false);
@@ -205,7 +205,7 @@
         wait_us(20);
 }
 
-void turn_right(int target) {
+void turn_right(unsigned int target) {
     
         turn_right_PID(target);
         i2c.write(0x10, true_migimae_data,     1, false);
@@ -215,7 +215,7 @@
         wait_us(20);
 }
 
-void turn_left(int target) {
+void turn_left(unsigned int target) {
     
         turn_left_PID(target);
         i2c.write(0x10, true_migimae_data,     1, false);
@@ -225,7 +225,7 @@
         wait_us(20);
 }
 
-void front_PID(int target) {
+void front_PID(unsigned int target) {
 
         //センサ出力値の最小、最大(とりあえずint型が持てる範囲に設定)
         migimae.setInputLimits(-2147483648,     2147483647);
@@ -300,7 +300,7 @@
         }
 }
 
-void back_PID(int target) {
+void back_PID(unsigned int target) {
     
         //センサ出力値の最小、最大(とりあえずint型が持てる範囲に設定)
         migimae.setInputLimits(-2147483648,     2147483647);
@@ -310,14 +310,14 @@
 
         //制御量の最小、最大
         //逆転(目標に達してない)
-        if((abs(y_pulse1) < abs(target)) || (abs(y_pulse2) < abs(target))) {
+        if((abs(y_pulse1) < target) && (abs(y_pulse2) < target)) {
             migimae.setOutputLimits(0x00,     0x7B);
             migiusiro.setOutputLimits(0x00,   0x7B);
             hidarimae.setOutputLimits(0x00,   0x7B);
             hidariusiro.setOutputLimits(0x0, 0x7B);
         }
         //正転(目標より行き過ぎ)
-        else if((abs(y_pulse1) > abs(target)) || (abs(y_pulse2) > abs(target))) {
+        else if((abs(y_pulse1) > target) && (abs(y_pulse2) > target)) {
             migimae.setOutputLimits(0x84,     0xFF);
             migiusiro.setOutputLimits(0x84,   0xFF);
             hidarimae.setOutputLimits(0x84,   0xFF);
@@ -336,10 +336,10 @@
         hidariusiro.setMode(AUTO_MODE);
 
         //目標値
-        migimae.setSetPoint(abs(target));
-        migiusiro.setSetPoint(abs(target));
-        hidarimae.setSetPoint(abs(target));
-        hidariusiro.setSetPoint(abs(target));
+        migimae.setSetPoint(target);
+        migiusiro.setSetPoint(target);
+        hidarimae.setSetPoint(target);
+        hidariusiro.setSetPoint(target);
 
         //センサ出力
         migimae.setProcessValue(abs(y_pulse1));
@@ -355,14 +355,14 @@
 
         //制御量をPWM値に変換
         //逆転(目標に達してない)
-        if((abs(y_pulse1) < abs(target)) || (abs(y_pulse2) < abs(target))) {
+        if((abs(y_pulse1) < target) && (abs(y_pulse2) < target)) {
             true_migimae_data[0]     = 0x7B - migimae_data[0];
             true_migiusiro_data[0]   = 0x7B - migiusiro_data[0];
             true_hidarimae_data[0]   = 0x7B - hidarimae_data[0];
             true_hidariusiro_data[0] = 0x7B - hidariusiro_data[0];
         }
         //正転(目標より行き過ぎ)
-        else if((abs(y_pulse1) > abs(target)) || (abs(y_pulse2) > abs(target))) {
+        else if((abs(y_pulse1) > target) && (abs(y_pulse2) > target)) {
             true_migimae_data[0]     = migimae_data[0];
             true_migiusiro_data[0]   = migiusiro_data[0];
             true_hidarimae_data[0]   = hidarimae_data[0];
@@ -375,7 +375,7 @@
         }
 }
 
-void right_PID(int target) {
+void right_PID(unsigned int target) {
 
         //センサ出力値の最小、最大
         migimae.setInputLimits(-2147483648,     2147483647);
@@ -445,7 +445,7 @@
         }
 }
 
-void left_PID(int target) {
+void left_PID(unsigned int target) {
     
         //センサ出力値の最小、最大
         migimae.setInputLimits(-2147483648,     2147483647);
@@ -455,14 +455,14 @@
 
         //制御量の最小、最大
         //左進(目標まで達していない)
-        if((abs(x_pulse1) < abs(target)) && (abs(x_pulse2) < abs(target))) {
+        if((abs(x_pulse1) < target) && (abs(x_pulse2) < target)) {
             migimae.setOutputLimits(0x84,     0xFF);
             migiusiro.setOutputLimits(0x00,   0x7B);
             hidarimae.setOutputLimits(0x00,   0x7B);
             hidariusiro.setOutputLimits(0x84, 0xFF);
         }
         //右進(目標より行き過ぎ)
-        else if((abs(x_pulse1) > abs(target)) && (abs(x_pulse2) > abs(target))) {
+        else if((abs(x_pulse1) > target) && (abs(x_pulse2) > target)) {
             migimae.setOutputLimits(0x00,     0x7B);
             migiusiro.setOutputLimits(0x84,   0xFF);
             hidarimae.setOutputLimits(0x84,   0xFF);
@@ -476,10 +476,10 @@
         hidariusiro.setMode(AUTO_MODE);
 
         //目標値
-        migimae.setSetPoint(abs(target));
-        migiusiro.setSetPoint(abs(target));
-        hidarimae.setSetPoint(abs(target));
-        hidariusiro.setSetPoint(abs(target));
+        migimae.setSetPoint(target);
+        migiusiro.setSetPoint(target);
+        hidarimae.setSetPoint(target);
+        hidariusiro.setSetPoint(target);
 
         //センサ出力
         migimae.setProcessValue(abs(x_pulse1));
@@ -495,14 +495,14 @@
 
         //制御量をPWM値に変換
         //左進(目標まで達していない)
-        if((abs(x_pulse1) < abs(target)) && (abs(x_pulse2) < abs(target))) {     
+        if((abs(x_pulse1) < target) && (abs(x_pulse2) < target)) {     
             true_migimae_data[0]     = migimae_data[0];
             true_migiusiro_data[0]   = 0x7B - migiusiro_data[0];
             true_hidarimae_data[0]   = 0x7B - hidarimae_data[0];
             true_hidariusiro_data[0] = hidariusiro_data[0];
         }
         //右進(目標より行き過ぎ)
-        else if((abs(x_pulse1) > abs(target)) && (abs(x_pulse2) > abs(target))) {
+        else if((abs(x_pulse1) > target) && (abs(x_pulse2) > target)) {
             true_migimae_data[0]     = 0x7B - migimae_data[0];
             true_migiusiro_data[0]   = migiusiro_data[0];
             true_hidarimae_data[0]   = hidarimae_data[0];
@@ -515,7 +515,7 @@
         }
 }
 
-void turn_right_PID(int target) {
+void turn_right_PID(unsigned int target) {
 
         //センサ出力値の最小、最大(とりあえずint型が持てる範囲に設定)
         migimae.setInputLimits(-2147483648,     2147483647);
@@ -585,7 +585,7 @@
         }
 }
 
-void turn_left_PID(int target) {
+void turn_left_PID(unsigned int target) {
             
         //センサ出力値の最小、最大(とりあえずint型が持てる範囲に設定)
         migimae.setInputLimits(-2147483648,     2147483647);
@@ -616,10 +616,10 @@
         hidariusiro.setMode(AUTO_MODE);
 
         //目標値
-        migimae.setSetPoint(abs(target));
-        migiusiro.setSetPoint(abs(target));
-        hidarimae.setSetPoint(abs(target));
-        hidariusiro.setSetPoint(abs(target));
+        migimae.setSetPoint(target);
+        migiusiro.setSetPoint(target);
+        hidarimae.setSetPoint(target);
+        hidariusiro.setSetPoint(target);
 
         //センサ出力
         migimae.setProcessValue(abs(x_pulse1));
@@ -635,7 +635,7 @@
 
         //制御量をPWM値に変換
         //右旋回(目標に達してない)
-        if((abs(x_pulse1) < abs(target)) && (x_pulse2 < target) && (y_pulse1 < target) && (abs(y_pulse2) < abs(target))) {
+        if((abs(x_pulse1) < target) && (x_pulse2 < target) && (y_pulse1 < target) && (abs(y_pulse2) < target)) {
             true_migimae_data[0]     = migimae_data[0];
             true_migiusiro_data[0]   = migiusiro_data[0];
             true_hidarimae_data[0]   = 0x7B - hidarimae_data[0];