initial
This commit is contained in:
commit
a257d18c11
1 changed files with 147 additions and 0 deletions
147
shittyrobot.py
Normal file
147
shittyrobot.py
Normal file
|
|
@ -0,0 +1,147 @@
|
|||
import network
|
||||
import time
|
||||
import socket
|
||||
import select
|
||||
import neopixel
|
||||
from machine import Pin
|
||||
|
||||
def do_connect(tries=0):
|
||||
if tries > 3:
|
||||
machine.reset()
|
||||
print('Trying to connect to Wifi')
|
||||
sta_if = network.WLAN(network.WLAN.IF_STA)
|
||||
sta_if.active(True)
|
||||
sta_if.disconnect()
|
||||
attempts = 0
|
||||
while True:
|
||||
attempts += 1
|
||||
print(' Scan: ', sta_if.scan())
|
||||
sta_if.connect("39C3-open", "")
|
||||
time.sleep(10)
|
||||
if not sta_if.isconnected():
|
||||
print(' Failed to connect. Sleeping 5s')
|
||||
sta_if.disconnect()
|
||||
time.sleep(5)
|
||||
if attempts > 3:
|
||||
sta_if.active(False)
|
||||
do_connect(tries+1)
|
||||
else:
|
||||
print(sta_if.ifconfig())
|
||||
return
|
||||
|
||||
|
||||
def setup_listener():
|
||||
addr = socket.getaddrinfo('0.0.0.0', 1337)[0][-1]
|
||||
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
||||
s.bind(addr)
|
||||
s.listen(3)
|
||||
#s.setblocking(False)
|
||||
return s
|
||||
|
||||
|
||||
MOTOR_A0 = Pin(0, Pin.OUT, drive=Pin.DRIVE_0)
|
||||
MOTOR_A1 = Pin(1, Pin.OUT, drive=Pin.DRIVE_0)
|
||||
MOTOR_B0 = Pin(2, Pin.OUT, drive=Pin.DRIVE_0)
|
||||
MOTOR_B1 = Pin(3, Pin.OUT, drive=Pin.DRIVE_0)
|
||||
LED_DAT = Pin(5, Pin.OUT)
|
||||
LED_NP = neopixel.NeoPixel(LED_DAT, 8)
|
||||
|
||||
|
||||
do_connect()
|
||||
s = setup_listener()
|
||||
c = []
|
||||
|
||||
def controlloop(last_start, next_action):
|
||||
if time.time() < last_start + 0.5:
|
||||
return last_start
|
||||
|
||||
if next_action is None and time.time() > last_start + 1.000:
|
||||
next_action = (0,0)
|
||||
elif next_action is None:
|
||||
return last_start
|
||||
|
||||
print('Starting action: ', next_action)
|
||||
|
||||
if next_action[0] == 1:
|
||||
MOTOR_A0.on()
|
||||
MOTOR_A1.off()
|
||||
elif next_action[0] == -1:
|
||||
MOTOR_A0.off()
|
||||
MOTOR_A1.on()
|
||||
else:
|
||||
MOTOR_A0.off()
|
||||
MOTOR_A1.off()
|
||||
|
||||
if next_action[1] == 1:
|
||||
MOTOR_B0.on()
|
||||
MOTOR_B1.off()
|
||||
elif next_action[1] == -1:
|
||||
MOTOR_B0.off()
|
||||
MOTOR_B1.on()
|
||||
else:
|
||||
MOTOR_B0.off()
|
||||
MOTOR_B1.off()
|
||||
|
||||
# we just started new action
|
||||
return time.time()
|
||||
|
||||
|
||||
def mainloop(s):
|
||||
poller = select.poll()
|
||||
poller.register(s, select.POLLIN)
|
||||
|
||||
last_action_start = 0
|
||||
ctr = 0
|
||||
|
||||
next_action = None
|
||||
while True:
|
||||
# run one iteration of control loop
|
||||
last_action_start = controlloop(last_action_start, next_action)
|
||||
LED_NP[ctr % 8] = (ctr*3 % 255, ctr*2 % 255, (ctr+1)*3 % 255)
|
||||
|
||||
# wait for up to 100ms
|
||||
res = poller.poll(100)
|
||||
if not res:
|
||||
next_action = None
|
||||
continue
|
||||
|
||||
for x in res:
|
||||
print(x)
|
||||
if x[0] == s:
|
||||
print('Accepting connection')
|
||||
(y, origin_sockaddr) = s.accept()
|
||||
#y.write("\377\375\042\377\373\001Welcome!\nPress wasd to move!\n>")
|
||||
y.write("\255\254\34Welcome!\nPress wasd to move!\n>")
|
||||
#c.append(y)
|
||||
print(' Registering handler')
|
||||
poller.register(y, select.POLLIN)
|
||||
else:
|
||||
# some user socket
|
||||
user_s = x[0]
|
||||
if x[1] == select.POLLIN:
|
||||
a = user_s.read(1)
|
||||
print('Read character: ', a)
|
||||
if a == b'w':
|
||||
next_action = (1, 1)
|
||||
elif a == b'a':
|
||||
next_action = (0, 1)
|
||||
elif a == b'd':
|
||||
next_action = (1, 0)
|
||||
elif a == b's':
|
||||
next_action = (-1, -1)
|
||||
elif a == b'':
|
||||
print('EOF in ', x[0], ' Removing it.')
|
||||
poller.unregister(x[0])
|
||||
x[0].close()
|
||||
elif x[1] in [select.POLLHUP, select.POLLERR]:
|
||||
print('Error in ', x[0], ' Removing it.')
|
||||
poller.unregister(x[0])
|
||||
#del c[x[0]]
|
||||
x[0].close()
|
||||
|
||||
|
||||
|
||||
|
||||
mainloop(s)
|
||||
|
||||
|
||||
Loading…
Add table
Add a link
Reference in a new issue