#!/usr/bin/env python3
|
|
'''Hello to the world from ev3dev.org'''
|
|
|
|
import os
|
|
import sys
|
|
import time
|
|
import json
|
|
import datetime
|
|
import urllib3
|
|
import requests
|
|
|
|
from ev3dev2.motor import LargeMotor, OUTPUT_A, OUTPUT_B, SpeedPercent, MoveTank
|
|
from ev3dev2.sensor import INPUT_1,INPUT_2
|
|
from ev3dev2.sensor.lego import TouchSensor
|
|
from ev3dev2.sensor.lego import UltrasonicSensor
|
|
from ev3dev2.sound import Sound
|
|
from ev3dev2.button import Button
|
|
|
|
ON = True
|
|
OFF = False
|
|
|
|
|
|
def debug_print(*args, **kwargs):
|
|
print(*args, **kwargs, file=sys.stderr)
|
|
|
|
|
|
def reset_console():
|
|
print('\x1Bc', end='')
|
|
|
|
|
|
def set_cursor(state):
|
|
if state:
|
|
print('\x1B[?25h', end='')
|
|
else:
|
|
print('\x1B[?25l', end='')
|
|
|
|
|
|
def set_font(name):
|
|
'''Sets the console font
|
|
|
|
A full list of fonts can be found with `ls /usr/share/consolefonts`
|
|
'''
|
|
os.system('setfont ' + name)
|
|
|
|
def raise_ramp():
|
|
print("Raising ramp")
|
|
|
|
def get_closest_time(times, time):
|
|
closest = 0
|
|
times = [datetime.datetime.strptime(i,"%H:%M") for i in times]
|
|
time = datetime.datetime.strptime(time,"%H:%M")
|
|
for i in times:
|
|
if i.hour < time.hour or (i.hour == time.hour and i.minute < time.minute):
|
|
continue
|
|
else:
|
|
if closest == 0:
|
|
closest = i
|
|
continue
|
|
if abs(i.hour - time.hour) < abs(closest.hour - time.hour):
|
|
closest = i
|
|
continue
|
|
elif abs(i.hour - time.hour) == abs(closest.hour - time.hour):
|
|
if i.minute - time.minute < closest.minute - time.minute:
|
|
closest = i
|
|
|
|
return closest.strftime("%H:%M")
|
|
|
|
|
|
def time_diff(t1, t2):
|
|
time1 = datetime.datetime.strptime(t1, "%H:%M")
|
|
time2 = datetime.datetime.strptime(t2, "%H:%M")
|
|
response = ""
|
|
if abs(time2.hour - time1.hour) < 10:
|
|
response += "0"
|
|
if time2.minute - time1.minute >= 0:
|
|
response += str(abs(time2.hour - time1.hour))
|
|
else:
|
|
response += str(abs(time2.hour - time1.hour) - 1)
|
|
|
|
response += ":"
|
|
|
|
if abs(time2.minute - time1.minute) < 10:
|
|
response += "0"
|
|
|
|
response += str(abs(time2.minute - time1.minute))
|
|
|
|
return response
|
|
|
|
|
|
def raise_ramp(motor1):
|
|
motor1.on_for_rotations(SpeedPercent(75), 5)
|
|
|
|
def main():
|
|
|
|
start = time.time()
|
|
file = open("times.json","r")
|
|
time_data = json.loads(file.read())
|
|
stop_data = [i for i in time_data.keys()]
|
|
debug_print(stop_data)
|
|
file.close()
|
|
time_start = "10:02"
|
|
debug_print('Started Code')
|
|
reset_console()
|
|
set_cursor(OFF)
|
|
set_font('Lat15-Terminus24x12')
|
|
alarms = [0,0,0]
|
|
stop = "11222"
|
|
|
|
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
|
|
|
|
print('AKILLI DURAK')
|
|
|
|
sound = Sound()
|
|
|
|
|
|
us = UltrasonicSensor(INPUT_2)
|
|
us.MODE_US_DIST_CM
|
|
btn = Button()
|
|
m1 = LargeMotor(OUTPUT_A)
|
|
|
|
ts = TouchSensor(INPUT_1)
|
|
|
|
while 1:
|
|
if us.distance_centimeters < 15:
|
|
sound.speak("Please select a stop")
|
|
i = 0
|
|
reset_console()
|
|
print(stop_data[i%len(stop_data)])
|
|
while not btn.enter:
|
|
if btn.up:
|
|
i += 1
|
|
reset_console()
|
|
print(stop_data[i%len(stop_data)])
|
|
time.sleep(0.1)
|
|
if btn.down:
|
|
i -= 1
|
|
reset_console()
|
|
print(stop_data[i%len(stop_data)])
|
|
time.sleep(0.1)
|
|
closest = datetime.datetime.strptime(time_diff(time_start,get_closest_time(time_data[stop_data[i%len(stop_data)]]["weekday"][:],time_start)),"%H:%M")
|
|
difference = datetime.timedelta(hours=closest.hour,minutes=closest.minute).total_seconds()+start
|
|
|
|
if not difference in alarms:
|
|
alarms[i%len(stop_data)] = difference
|
|
r = requests.get("https://192.168.44.50:5000/bus?line={}&stop={}".format(stop_data[i%len(stop_data)],stop), verify=False)
|
|
|
|
print(difference-time.time())
|
|
time.sleep(1)
|
|
reset_console()
|
|
print("AKILLI DURAK")
|
|
|
|
for i in range(len(alarms)):
|
|
if alarms[i] == 0:
|
|
continue
|
|
else:
|
|
if alarms[i]-time.time()<0:
|
|
reset_console()
|
|
print("Bus no {} has arrived".format(stop_data[i%len(stop_data)]))
|
|
sound.speak("Bus no {} has arrived".format(stop_data[i%len(stop_data)]))
|
|
sound.speak("Would you like a ramp?")
|
|
waiter = time.time()
|
|
pressed = True
|
|
while time.time()-waiter < 10 and pressed:
|
|
if ts.is_pressed:
|
|
pressed = False
|
|
raise_ramp(m1)
|
|
reset_console()
|
|
print("AKILLI DURAK")
|
|
alarms[i] = 0
|
|
|
|
|
|
if __name__ == '__main__':
|
|
main()
|