summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJustyna Att Ilczuk <justyna.ilczuk@gmail.com>2012-11-10 20:28:03 +0100
committerJustyna Att Ilczuk <justyna.ilczuk@gmail.com>2012-11-10 20:28:03 +0100
commit25e533df4f2e1eb7336dcc07875c37645acefe3a (patch)
tree1a2f4a5ff87d4b1574596f1a06daaec6fc5e9970
parent01e56514ebc51aa0e0e16fe7d90e2c3098c39b8c (diff)
downloadlaserz_und_stuff-25e533df4f2e1eb7336dcc07875c37645acefe3a.tar.gz
laserz_und_stuff-25e533df4f2e1eb7336dcc07875c37645acefe3a.tar.bz2
laserz_und_stuff-25e533df4f2e1eb7336dcc07875c37645acefe3a.tar.xz
laserz_und_stuff-25e533df4f2e1eb7336dcc07875c37645acefe3a.zip
Serial and better validation during calibration
-rw-r--r--Lasers_und_stuff/main.py67
1 files changed, 51 insertions, 16 deletions
diff --git a/Lasers_und_stuff/main.py b/Lasers_und_stuff/main.py
index bd5adcb..6951fb4 100644
--- a/Lasers_und_stuff/main.py
+++ b/Lasers_und_stuff/main.py
@@ -10,6 +10,8 @@ import random, pygame, sys
from pygame.locals import *
from math import fabs
from math import ceil
+import serial
+
#import and init pygame
pygame.init()
@@ -82,22 +84,20 @@ def main():
screen.communicates.remove("Laser disabled")
screen.communicates.append("Laser enabled")
elif event.type == KEYUP and event.key == K_c:
- point1 = [float(x) for x in ask(window, "Point 1 ").split(",")]
- point2 = [float(x) for x in ask(window, "Point 2 ").split(",")]
- point3 = [float(x) for x in ask(window, "Point 3 ").split(",")]
+ point1 = get_calibration_point(window, "Point1")
+ point2 = get_calibration_point(window, "Point2")
+ point3 = get_calibration_point(window, "Point3")
print point1, point2, point3
gunpoint.calibrate(point1, point2, point3)
print gunpoint.horizontal_angle, gunpoint.vertical_angle
elif event.type == MOUSEBUTTONUP:
- print "mouse button up"
mouseClicked = True
screen.change_color()
-
+ cannon.send_data()
if mouseClicked :
- print("Mouse was clicked!")
coords = [gunpoint.aim((x/10.0,x/10.0)) for x in range(0,11)]
samples = [(x/10.0,x/10.0) for x in range(0, 11)]
print samples
@@ -145,7 +145,22 @@ def ask(screen, question):
display_box(screen, question + ": " + "".join(current_string), 20, 400)
return "".join(current_string)
-
+def get_calibration_point(screen, message):
+ point_string = ask(screen, message)
+ while(not (is_valid_point(point_string)) ):
+ point_string = ask(screen, "Again, " + message)
+ return [float(x) for x in point_string.split(",")]
+
+def is_valid_point(string):
+ point = string.split(',')
+ if (len(point) != 2):
+ return False
+ if((not point[0].isdigit()) or (not point[1].isdigit())):
+ return False
+ if(float(point[0]) > 255 or float(point[1]) > 255 or float(point[0])< 0 or float(point[1]) <0 ):
+ return False
+ return True
+
class Screen:
def __init__(self, window, colors):
@@ -169,7 +184,7 @@ class Screen:
if cannon.fired:
self.print_text("Fired!", 20, 150, (150, 20, 40), 40, self.window)
- self.print_text(cannon.get_data_to_send().__str__(), 20, 300, (0, 0, 0), 30, self.window)
+ self.print_text([str(x) for x in cannon.get_data()].__str__(), 20, 300, (0, 0, 0), 30, self.window)
pygame.display.flip()
def print_text(self, text,xx,yy,color,text_size, screen):
@@ -195,22 +210,25 @@ class CannonController :
self.laser = False
def move_left(self, change):
- self.position[0] -= change
+ if(self.position[0] >= change):
+ self.position[0] -= change
+
def move_right(self, change):
- self.position[0] += change
+ if(self.position[0] < 255 - change):
+ self.position[0] += change
def move_up(self, change):
- self.position[1] += change
+ if(self.position[1] < 255 - change):
+ self.position[1] += change
def move_down(self, change):
- self.position[1] -= change
+ if(self.position[1] >= change):
+ self.position[1] -= change
def check_validity_of_data(self):
if(fabs(self.position[0]) > 255):
return False
if (fabs(self.position[1]) > 255):
return False
return True
-
- def get_data_to_send(self):
- # ('a' - os X, 'b' - os Y, 'c' - Strzal, 'd' - laser)
+ def get_data(self):
if self.check_validity_of_data():
data = []
data.extend(self.position)
@@ -225,9 +243,26 @@ class CannonController :
data.append(0)
return data
+
else:
return [0, 0, 0, 0]
-
+
+ def get_data_to_send(self):
+ data = self.get_data()
+ return [chr(x) for x in data]
+
+ def send_data(self):
+ ser = serial.Serial("/dev/ttyACM0", 115200, timeout=1)
+ data = self.get_data_to_send()
+ ser.write('a')
+ ser.write(data[0])
+ ser.write('b')
+ ser.write(data[1])
+ ser.write('c')
+ ser.write(data[2])
+ ser.write('d')
+ ser.write(data[3])
+
class Gunpoint :
def __init__(self, point1, point2, point3):
self.vertical_angle = point3[1] - point1[1]