약간의 수정2
This commit is contained in:
2
ccs/ir.c
2
ccs/ir.c
@@ -42,7 +42,7 @@ void test_ir(void) {
|
|||||||
ir_ready_ready();
|
ir_ready_ready();
|
||||||
ir_read_value(&ir_value);
|
ir_read_value(&ir_value);
|
||||||
print_binary(ir_value);
|
print_binary(ir_value);
|
||||||
printf("\n";)
|
printf("\n");
|
||||||
ir_read_off();
|
ir_read_off();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
46
ccs/main.c
46
ccs/main.c
@@ -13,7 +13,7 @@
|
|||||||
#define TRUE 1
|
#define TRUE 1
|
||||||
#define FALSE 0
|
#define FALSE 0
|
||||||
|
|
||||||
#define PRACTICE 3
|
#define PRACTICE 4
|
||||||
|
|
||||||
#if PRACTICE == 1
|
#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
|
#endif
|
||||||
|
|
||||||
int main(void) {
|
int main(void) {
|
||||||
@@ -523,6 +565,8 @@ int main(void) {
|
|||||||
LineTracerPrac2();
|
LineTracerPrac2();
|
||||||
#elif PRACTICE == 3
|
#elif PRACTICE == 3
|
||||||
LineTracerPrac3();
|
LineTracerPrac3();
|
||||||
|
#elif PRACTICE == 4
|
||||||
|
LineTracerPrac4();
|
||||||
#else
|
#else
|
||||||
printf("No practice selected.\n");
|
printf("No practice selected.\n");
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -37,8 +37,6 @@ void senbuf_get(SensorBuffer *sb, uint8_t *out, int lookahead) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// History Buffer
|
// History Buffer
|
||||||
|
|
||||||
void hisbuf_init(HistoryBuffer *sb) {
|
void hisbuf_init(HistoryBuffer *sb) {
|
||||||
|
|||||||
Reference in New Issue
Block a user