-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdcmotor.py
70 lines (63 loc) · 1.84 KB
/
dcmotor.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
import time
class DCMotor:
def __init__(self, pin1, pin2, pin3, pin4, enablea, enableb, min_duty=750, max_duty=1023):
self.pin1=pin1
self.pin2=pin2
self.pin3=pin3
self.pin4=pin4
self.enablea_pin=enablea
self.enableb_pin=enableb
self.min_duty = min_duty
self.max_duty = max_duty
def forward(self,speed):
self.speed = speed
self.enablea_pin.duty(self.duty_cycle(self.speed))
self.enableb_pin.duty(self.duty_cycle(self.speed))
self.pin1.value(1)
self.pin2.value(0)
self.pin3.value(1)
self.pin4.value(0)
def right(self,speed):
self.speed = speed
self.enablea_pin.duty(self.duty_cycle(self.speed))
self.enableb_pin.duty(self.duty_cycle(self.speed))
self.pin1.value(1)
self.pin2.value(0)
self.pin3.value(0)
self.pin4.value(1)
def left(self,speed):
self.speed = speed
self.enablea_pin.duty(self.duty_cycle(self.speed))
self.enableb_pin.duty(self.duty_cycle(self.speed))
self.pin1.value(0)
self.pin2.value(1)
self.pin3.value(1)
self.pin4.value(0)
def backwards(self, speed):
self.speed = speed
self.enablea_pin.duty(self.duty_cycle(self.speed))
self.enableb_pin.duty(self.duty_cycle(self.speed))
self.pin1.value(0)
self.pin2.value(1)
self.pin3.value(0)
self.pin4.value(1)
def stop(self, speed):
step = 5
while speed > 0:
self.speed(speed)
speed -= step
time.sleep(0.1)
self.speed = 0
time.sleep(0.01)
self.enablea_pin.duty(0)
self.enableb_pin.duty(0)
self.pin1.value(0)
self.pin2.value(0)
self.pin3.value(0)
self.pin4.value(0)
def duty_cycle(self, speed):
if self.speed <= 0 or self.speed > 100:
duty_cycle = 0
else:
duty_cycle = int(self.min_duty + (self.max_duty - self.min_duty)*((self.speed-1)/(100-1)))
return duty_cycle