-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdippid_model.py
84 lines (63 loc) · 2.29 KB
/
dippid_model.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
import random
from time import sleep
'''
Model for reading sensor data and verify data.
Author: Sarah
Reviewer: Jonas
'''
class GameModel():
TEXT_BUTTON_LEFT = "Press the left button"
TEXT_BUTTON_MIDDLE = "Press the middle button"
TEXT_BUTTON_RIGHT = "Press the right button"
TEXT_TURN_LEFT = "Turn it to the left"
TEXT_TURN_RIGHT = "Turn it to the right"
def __init__(self):
super().__init__()
self.__command_list = [
self.TEXT_BUTTON_LEFT,
self.TEXT_BUTTON_MIDDLE,
self.TEXT_BUTTON_RIGHT,
self.TEXT_TURN_LEFT,
self.TEXT_TURN_RIGHT]
def generate_command_text(self):
return random.choice(self.__command_list)
def get_command_list(self):
return self.__command_list
def is_correct_button(self, text, button_num):
if text == self.TEXT_BUTTON_LEFT and button_num == 1:
return True
elif text == self.TEXT_BUTTON_MIDDLE and button_num == 2:
return True
elif text == self.TEXT_BUTTON_RIGHT and button_num == 3:
return True
return False
def is_mov_text(self, text):
if text == self.TEXT_TURN_LEFT or text == self.TEXT_TURN_RIGHT:
return True
return False
def is_correct_move(self, text, sensor):
SAMPLE_SIZE = 100
SAMPLE_RATE = 1 / 20 # 20 Hz
NUMBER_OF_VALUES = 5
data = [0] * NUMBER_OF_VALUES
for i in range(0, SAMPLE_SIZE):
data[i % NUMBER_OF_VALUES] = sensor.get_value('accelerometer')['x']
if all(x < -0.25 for x in data): # right
return self.__is_correct_move(text, 1)
if all(x > 0.25 for x in data): # left
return self.__is_correct_move(text, -1)
sleep(SAMPLE_RATE)
return False
def __is_correct_move(self, text, x):
if text == self.TEXT_TURN_LEFT and x < 0:
return True
if text == self.TEXT_TURN_RIGHT and x > 0:
return True
return False
def calculate_time_difference(self, start_time, end_time):
try:
return round((end_time - start_time).total_seconds(), 2)
except AttributeError:
return self.INVALID_TIME
except TypeError:
return self.INVALID_TIME