From 2ca19bf287e1018b5acf0835a2d502234c2e5eee5137740b48fc17ed0bc2cbed Mon Sep 17 00:00:00 2001 From: yenru0 Date: Wed, 10 Dec 2025 00:12:53 +0900 Subject: [PATCH] =?UTF-8?q?=EC=95=BD=EA=B0=84=EC=9D=98=20=EC=88=98?= =?UTF-8?q?=EC=A0=952?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ccs/ir.c | 2 +- ccs/main.c | 46 +++++++++++++++++++++++++++++++++++++++++++++- ccs/state.c | 2 -- 3 files changed, 46 insertions(+), 4 deletions(-) diff --git a/ccs/ir.c b/ccs/ir.c index e84dca4..301ddb5 100755 --- a/ccs/ir.c +++ b/ccs/ir.c @@ -42,7 +42,7 @@ void test_ir(void) { ir_ready_ready(); ir_read_value(&ir_value); print_binary(ir_value); - printf("\n";) + printf("\n"); ir_read_off(); } } diff --git a/ccs/main.c b/ccs/main.c index f3bcb00..ac682b8 100755 --- a/ccs/main.c +++ b/ccs/main.c @@ -13,7 +13,7 @@ #define TRUE 1 #define FALSE 0 -#define PRACTICE 3 +#define PRACTICE 4 #if PRACTICE == 1 @@ -514,6 +514,48 @@ void position_init_led(void) { } +#elif PRACTICE == 4 + +void LineTracerPrac4(void) { + Clock_Init48MHz(); + ir_init(); + motor_init(); + + // PID Constants + const float Kp = 0.005f; + const float Kd = 0.02f; + const int BASE_SPEED = 10; + const int MAX_DRV = 20; + + int error = 0; + int prev_error = 0; + float pid_out = 0; + int speed_l, speed_r; + + while (1) { + uint8_t raw_val; + ir_read_ready(); + Clock_Delay1ms(1); + ir_read_value(&raw_val); + ir_read_off(); + + error = get_error(raw_val); + pid_out = (Kp * error) + (Kd * (error - prev_error)); + prev_error = error; + + speed_l = BASE_SPEED + (int)pid_out; + speed_r = BASE_SPEED - (int)pid_out; + + if (speed_l > MAX_DRV) speed_l = MAX_DRV; + if (speed_l < 0) speed_l = 0; + if (speed_r > MAX_DRV) speed_r = MAX_DRV; + if (speed_r < 0) speed_r = 0; + + motor_move_custom(speed_l, speed_r); + + Clock_Delay1ms(2); + } +} #endif int main(void) { @@ -523,6 +565,8 @@ int main(void) { LineTracerPrac2(); #elif PRACTICE == 3 LineTracerPrac3(); + #elif PRACTICE == 4 + LineTracerPrac4(); #else printf("No practice selected.\n"); #endif diff --git a/ccs/state.c b/ccs/state.c index 9aa683d..1dda911 100755 --- a/ccs/state.c +++ b/ccs/state.c @@ -37,8 +37,6 @@ void senbuf_get(SensorBuffer *sb, uint8_t *out, int lookahead) { } } - - // History Buffer void hisbuf_init(HistoryBuffer *sb) {