![](/media/cache/group/default_image.jpg.50x50_q85.jpg)
ver6_2の修正版 変更点 phase1のバグ kaisyu関数 tyokudo関数
Diff: main.cpp
- 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];