From ee6b3fc3ad303822b4f5ff491ad8023715e55ef4 Mon Sep 17 00:00:00 2001
From: Sara Falcone <sara.falcone@cba.mit.edu>
Date: Mon, 3 Dec 2018 13:50:50 -0500
Subject: [PATCH] added color bank in global name space
---
run-solleroot.py | 53 +++++++++++++++++++++++++++++++++++-------------
1 file changed, 39 insertions(+), 14 deletions(-)
diff --git a/run-solleroot.py b/run-solleroot.py
index 0d8658f..3185587 100644
--- a/run-solleroot.py
+++ b/run-solleroot.py
@@ -1,8 +1,8 @@
-#!/usr/bin/env python3
+# python3
import gatt
import threading
-import time
+import time #not working...
# BLE UUID's
@@ -11,13 +11,18 @@ uart_service_uuid = '6e400001-b5a3-f393-e0a9-e50e24dcca9e'
tx_characteristic_uuid = '6e400002-b5a3-f393-e0a9-e50e24dcca9e' # Write
rx_characteristic_uuid = '6e400003-b5a3-f393-e0a9-e50e24dcca9e' # Notify
-
+# message types
DATA_TYPE_COLOR_SENSOR = 4
DATA_TYPE_BUMPER = 12
DATA_TYPE_LIGHT = 13
DATA_TYPE_TOUCH = 17
DATA_TYPE_CLIFF = 20
+# color classifications
+color_black = [17, 68]
+color_red = [34]
+color_green = [51]
+
class BluetoothDeviceManager(gatt.DeviceManager):
robot = None # root robot device
@@ -30,9 +35,12 @@ class BluetoothDeviceManager(gatt.DeviceManager):
self.robot.connect()
class RootDevice(gatt.Device):
+ # states for our robot primatives
edge_following_enabled = False
patterning_lines_enabled = False
+ # "message" allows last sensor readings to be stored in the robot object for each robot
+ message = "no message yet"
def print_message(self):
print(self.message)
@@ -80,25 +88,43 @@ class RootDevice(gatt.Device):
if new_data[0] == DATA_TYPE_CLIFF: type = "Cliff Sensor"
# print("{}: {}".format(type, new_data))
- # Do the thing!
+ # Perimeter detect, then other color functions
if new_data[0] == DATA_TYPE_COLOR_SENSOR:
+ print("new data - calling perimeter")
did_adjust = self.adjust_for_perimeter_if_needed(new_data)
if did_adjust:
return
if type == "Color Sensor" and self.edge_following_enabled:
+ print("new data - calling edge following")
self.follow_edge(new_data)
if type == "Color Sensor" and self.patterning_lines_enabled:
self.pattern_dashes(new_data)
- def adjust_for_perimeter_if_needed(self, data):
- adjusted = False
-
- # TODO: Check to see if you're at perimeter! If you are, update your state and set
- # adjusted = True
-
+ def adjust_for_perimeter_if_needed(self, message):
+ # Check to see if you're at perimeter! If you are, turn and update your state
+ print("IN ADJUST PERIMETER")
+ n = 0
+ for i in range(3,5):
+ if message[i] in color_black:
+ n += 1
+ if n > 1:
+ self.turn_rate(-45)
+ adjusted = True
+ else:
+ adjusted = False
+ n = 0
+ for i in range(16,18):
+ if message[i] in color_black:
+ n += 1
+ if n > 1:
+ self.turn_rate(45)
+ adjusted = True
+ else:
+ adjusted = False
return adjusted
-
+
def pattern_dashes(self, message):
+ print("IN PATTERN DASHES")
#pen down, pen up, so many times...
count = 0
while count < 3: # number of lines robot will draw
@@ -126,6 +152,7 @@ class RootDevice(gatt.Device):
def follow_edge(self, message):
+ print("IN FOLLOW EDGE")
if message[3] != 0 or message[4] != 0:
#drive_root("l")
self.turn_rate(-45)
@@ -163,9 +190,7 @@ class RootDevice(gatt.Device):
#drive_root("v")
turn_state = 2
else:
- drive_root("f")
- #manager.robot.drive_forward_slow()
- #drive_root("a")
+ self.drive_forward()
def drive_forward(self):
self.tx_characteristic.write_value([0x01, 0x04, 0x00, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD1])
--
GitLab