-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathredovan.py
116 lines (95 loc) · 1.99 KB
/
redovan.py
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
103
104
105
106
107
108
109
110
111
112
"""const int INPUT_PIN = A0;
const int OUTPUT_PIN = DD3;
double dt, last_time;
double integral, previous, output = 0;
double kp, ki, kd;
double setpoint = 75.00;
void setup()
{
kp = 0.8;
ki = 0.20;
kd = 0.001;
last_time = 0;
Serial.begin(9600);
analogWrite(OUTPUT_PIN, 0);
for(int i = 0; i < 50; i++)
{
Serial.print(setpoint);
Serial.print(",");
Serial.println(0);
delay(100);
}
delay(100);
}
void loop()
{
double now = millis();
dt = (now - last_time)/1000.00;
last_time = now;
double actual = map(analogRead(INPUT_PIN), 0, 1024, 0, 255);
double error = setpoint - actual;
output = pid(error);
analogWrite(OUTPUT_PIN, output);
// Setpoint VS Actual
Serial.print(setpoint);
Serial.print(",");
Serial.println(actual);
// Error
//Serial.println(error);
delay(300);
}
double pid(double error)
{
double proportional = error;
integral += error * dt;
double derivative = (error - previous) / dt;
previous = error;
double output = (kp * proportional) + (ki * integral) + (kd * derivative);
return output;
}
@marstheking
Comment
"""
import datetime
from time import time
import time
def pid(error):
integral=0
previous=0
proportional = error
integral += error * dt
derivative = (error - previous) / dt
previous = error
output = (kp * proportional) + (ki * integral) + (kd * derivative)
return output
output = 0
setpoint = 500
kp = 0.8
ki = 0.20
kd = 0.001
last_time = 0
i=0
trenutno=0
#trenutno=ENCODEROUTPUT
error=setpoint-trenutno
current_time_seconds = time.time()
now= int(round(current_time_seconds * 1000))
dt = (now - last_time)/1000.00
last_time = now
#output=pid(error)
while i<5:
time.sleep(0.5)
print(setpoint)
print(",")
print(trenutno)
print(",")
print(dt)
current_time_seconds = time.time()
now= int(round(current_time_seconds * 1000))
dt = (now - last_time)/1000.00
last_time = now
#pid(error)
print(",")
#print(output)
print("AAAAAA")
i+=1