-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathpid controller
More file actions
102 lines (93 loc) · 2.19 KB
/
pid controller
File metadata and controls
102 lines (93 loc) · 2.19 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
#define led 13
#define dryrunswitch 12
#define actualrunswitch 11
#define AIN1 6
#define BIN1 9
#define AIN2 5
#define BIN2 8
#define PWM1 3
#define PWM2 10
#define stby 7
#define basespeed 120
#define Kp // to be determined
#define Kd 30
#define l 1
#define s 2
#define r 3
#define b 4
#define finish 5
void motor1(bool dir1,bool dir2,uint8_t pwm);
void motor2(bool dir1,bool dir2,uint8_t pwm);
void motor1(bool dir1,bool dir2,uint8_t pwm){
digitalWrite(AIN1,dir1);
digitalWrite(AIN2,dir2);
analogWrite(PWM1,pwm);
}
void motor2(bool dir1,bool dir2,uint8_t pwm){
digitalWrite(BIN1,dir1);
digitalWrite(BIN2,dir2);
analogWrite(PWM2,pwm);
}
int index=0;
int path [100];
bool linestate [5];
float error,error_prev;
int steeringval;
int leftmotspeed;
int rightmotspeed;
float numerator;
float denominator;
void readir(){
for(int i=0;i<5;i++){
linestate[i]=digitalRead(18-i);
Serial.print(linestate[i]);
Serial.print("\t");
}
Serial.println("");
}
void linefollow(){
error_prev=error;
numerator = ((linestate[0]*(-2))+(linestate[1]*(-1))+(linestate[3]) + (linestate[4]*2));
denominator = linestate[0]+linestate[1]+linestate[2]+linestate[3]+linestate[4];
error=(numerator)/(denominator);
Serial.print("Numerator: ");
Serial.print(numerator);
Serial.print("\t");
Serial.print("Dinominator: ");
Serial.print(denominator);
Serial.print("\n");
Serial.print("Error: ");
Serial.print(error);
Serial.print("\n");
steeringval = Kp*error + Kd*(error-error_prev);
leftmotspeed = (basespeed)+steeringval;
rightmotspeed = (basespeed)-steeringval;
motor1(1,0,(leftmotspeed<0?0:leftmotspeed));
Serial.print(leftmotspeed);
Serial.print("\t");
motor2(1,0,(rightmotspeed<0?0:rightmotspeed));
Serial.println(rightmotspeed);
}
void setup(){
Serial.begin(9600);
pinMode(14,INPUT);
pinMode(15,INPUT);
pinMode(16,INPUT);
pinMode(17,INPUT);
pinMode(18,INPUT);
pinMode(AIN1,OUTPUT);
pinMode(AIN2,OUTPUT);
pinMode(PWM1,OUTPUT);
pinMode(BIN1,OUTPUT);
pinMode(BIN2,OUTPUT);
pinMode(PWM2,OUTPUT);
pinMode(actualrunswitch,INPUT);
pinMode(dryrunswitch,INPUT);
pinMode(led,OUTPUT);
digitalWrite(stby,HIGH);
}
void loop(){
readir();
linefollow();
// delay(500);
}