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]