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
113
114
115
116
117
|
# This version uses new-style automatic setup/destroy/mapping
# Need to change /etc/webiopi
# Imports
import webiopi
# Retrieve GPIO lib
GPIO = webiopi.GPIO
# -------------------------------------------------- #
# Constants definition #
# -------------------------------------------------- #
# Left motor GPIOs
L1=17 # H-Bridge 1
L2=18 # H-Bridge 2
LS=21 # H-Bridge 1,2EN
# Right motor GPIOs
R1=23 # H-Bridge 3
R2=24 # H-Bridge 4
RS=25 # H-Bridge 3,4EN
# -------------------------------------------------- #
# Convenient PWM Function #
# -------------------------------------------------- #
# Set the speed of two motors
def set_speed(speed):
GPIO.pulseRatio(LS, speed)
GPIO.pulseRatio(RS, speed)
# -------------------------------------------------- #
# Left Motor Functions #
# -------------------------------------------------- #
def left_stop():
GPIO.output(L1, GPIO.LOW)
GPIO.output(L2, GPIO.LOW)
def left_forward():
GPIO.output(L1, GPIO.HIGH)
GPIO.output(L2, GPIO.LOW)
def left_backward():
GPIO.output(L1, GPIO.LOW)
GPIO.output(L2, GPIO.HIGH)
# -------------------------------------------------- #
# Right Motor Functions #
# -------------------------------------------------- #
def right_stop():
GPIO.output(R1, GPIO.LOW)
GPIO.output(R2, GPIO.LOW)
def right_forward():
GPIO.output(R1, GPIO.HIGH)
GPIO.output(R2, GPIO.LOW)
def right_backward():
GPIO.output(R1, GPIO.LOW)
GPIO.output(R2, GPIO.HIGH)
# -------------------------------------------------- #
# Macro definition part #
# -------------------------------------------------- #
@webiopi.macro
def go_forward():
left_forward()
right_forward()
@webiopi.macro
def go_backward():
left_backward()
right_backward()
@webiopi.macro
def turn_left():
left_backward()
right_forward()
@webiopi.macro
def turn_right():
left_forward()
right_backward()
@webiopi.macro
def stop():
left_stop()
right_stop()
# Called by WebIOPi at script loading
def setup():
# Setup GPIOs
GPIO.setFunction(LS, GPIO.PWM)
GPIO.setFunction(L1, GPIO.OUT)
GPIO.setFunction(L2, GPIO.OUT)
GPIO.setFunction(RS, GPIO.PWM)
GPIO.setFunction(R1, GPIO.OUT)
GPIO.setFunction(R2, GPIO.OUT)
set_speed(0.5)
stop()
# Called by WebIOPi at server shutdown
def destroy():
# Reset GPIO functions
GPIO.setFunction(LS, GPIO.IN)
GPIO.setFunction(L1, GPIO.IN)
GPIO.setFunction(L2, GPIO.IN)
GPIO.setFunction(RS, GPIO.IN)
GPIO.setFunction(R1, GPIO.IN)
GPIO.setFunction(R2, GPIO.IN)
|