-
Notifications
You must be signed in to change notification settings - Fork 0
/
bit_bot.py
140 lines (106 loc) · 2.74 KB
/
bit_bot.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
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
def lft_fwd():
#Move left motor forward full speed
pin0.write_digital(1)
pin8.write_digital(0)
def lft_bck():
#Move left motor reverse full speed
pin0.write_digital(0)
pin8.write_digital(1)
def rgt_fwd():
#Move right motor forward full speed
pin1.write_digital(1)
pin12.write_digital(0)
def rgt_bck():
#Move right motor reverse full speed
pin1.write_digital(0)
pin12.write_digital(1)
def lft_fwd_speed(speed):
#Move left motor forward at a speed between 0 and 1024
pin0.write_analog(speed)
pin8.write_digital(0)
def rgt_fwd_speed(speed):
#Move right motor forward at a speed between 0 and 1024
pin1.write_analog(speed)
pin12.write_digital(0)
def lft_bck_speed(speed):
#Move left motor backward at a speed between 0 and 1024
pin0.write_analog(speed)
pin8.write_digital(1)
def rgt_bck_speed(speed):
#Move right motor backward at a speed between 0 and 1024
pin1.write_analog(speed)
pin12.write_digital(1)
def forward(speed):
# drive forward
rgt_fwd_speed(speed)
lft_fwd_speed(speed)
def backward(speed):
# drive backward
rgt_bck_speed(speed)
lft_bck_speed(speed)
def stop():
pin0.write_digital(0)
pin8.write_digital(0)
pin1.write_digital(0)
pin12.write_digital(0)
def turn(direction, angle):
# Direction given as 'left' or 'right'
# Angle between 0 and 90 degrees
angle = round(angle/90 * 1023)
if direction == 'left':
rgt_fwd_speed(angle)
lft_bck_speed(angle)
else:
lft_fwd_speed(angle)
rgt_bck_speed(angle)
sleep(500) # this might need tweaking to get the right angle
stop()
def follow_line():
# Follow a black line on a white background
lft = pin16.read_digital()
rgt = pin14.read_digital()
if lft==0 and rgt==1:
turn('right', 45)
elif lft==1 and rgt==0:
turn('left', 45)
elif rgt==1 and lft==1:
forward(400)
sleep(20)
def neo_init():
# initialise neopixel library and set colours
import neopixel
global np
global colours
np = neopixel.NeoPixel(pin13, 8)
colours = {
'purple': (40, 0, 40),
'red': (255 , 0, 0),
'green': (0, 255, 0),
'blue': (0, 0, 255),
}
def neo_on(number, colour):
np[number] = colours[colour]
np.show( )
def neo_off(number):
np[number] = (0, 0, 0)
np.show( )
def neo_all_off():
for number in range(8):
np[number] = (0, 0, 0)
np.show()
from machine import time_pulse_us
def ultra_init():
global trig
trig = pin15
trig.write_digital(0)
def get_distance():
trig.write_digital(1)
sleep_us(10)
trig.write_digital(0)
while trig.read_digital() == 0:
pass
micros = time_pulse_us(trig, 1)
t_echo = micros/1000000
dist_cm = (t_echo / 2) *34300
sleep(100)
return dist_cm