You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

173 lines
4.9 KiB

#!/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()