102 lines
2.7 KiB
Python
Executable File
102 lines
2.7 KiB
Python
Executable File
#!/usr/bin/python
|
|
|
|
import serial
|
|
import json
|
|
from datetime import datetime
|
|
|
|
JSON_PATH = './Alkator.json'
|
|
|
|
data_dict = ''
|
|
|
|
try:
|
|
with open(JSON_PATH, 'r') as file:
|
|
file_content = file.read()
|
|
data_dict = json.loads(file_content)
|
|
print('json_exists')
|
|
except:
|
|
data_dict = {}
|
|
|
|
def get_seconds():
|
|
current_time = datetime.now()
|
|
hours = current_time.hour
|
|
mins = current_time.minute
|
|
secs = current_time.second
|
|
us = current_time.microsecond
|
|
seconds = hours*3600 + mins*60 + secs
|
|
seconds = float(str(seconds) + '.' + str(us))
|
|
return seconds
|
|
|
|
def read(ser):
|
|
while True:
|
|
mes = ser.read_until(b'\r')
|
|
if b'Reading ntag' in mes:
|
|
print('reading')
|
|
if b'Data' in mes:
|
|
data = mes.decode('utf-8')
|
|
data = data[6:].replace('\x00', '').replace('\r', '').split(' ')
|
|
print('data read done')
|
|
try:
|
|
lap_secs = get_seconds() - data_dict[data[0]]['time']
|
|
print(lap_secs)
|
|
lap = data_dict[data[0]]['laps']
|
|
try:
|
|
data_dict[data[0]]['lap_time'][lap] = lap_secs
|
|
except:
|
|
data_dict[data[0]]['lap_time'] = {lap: lap_secs}
|
|
lap += 1
|
|
data_dict[data[0]]['laps'] = lap
|
|
data_dict[data[0]]['time'] = get_seconds()
|
|
|
|
except:
|
|
data_dict[data[0]] = {'name': data[1]}
|
|
data_dict[data[0]]['time'] = get_seconds()
|
|
data_dict[data[0]]['laps'] = 0
|
|
|
|
data_json = json.dumps(data_dict, indent=4)
|
|
print(data_json)
|
|
with open(JSON_PATH, 'w') as file:
|
|
file.write(data_json)
|
|
|
|
def write(ser):
|
|
while True:
|
|
data = input('ID:')
|
|
data = data + '\r'
|
|
ser.write(data.encode())
|
|
while True:
|
|
mes = ser.read_until(b'\r')
|
|
if b'Waiting' in mes:
|
|
print('Waiting for card')
|
|
if b'Erasing' in mes:
|
|
print('Erasing card')
|
|
if b'Writing' in mes:
|
|
print('Writing data to card')
|
|
if b'done' in mes:
|
|
print('Write done')
|
|
break
|
|
|
|
def main():
|
|
s = serial.Serial(port="/dev/ttyACM3", parity=serial.PARITY_EVEN, stopbits=serial.STOPBITS_ONE, timeout=1)
|
|
s.flush()
|
|
|
|
rw = input('Read or Write tags? [R/w]')
|
|
rw = rw.lower()
|
|
|
|
if rw == 'w':
|
|
s.write('w\r'.encode())
|
|
write(s)
|
|
elif rw == 'r':
|
|
s.write('r\r'.encode())
|
|
read(s)
|
|
elif rw == '':
|
|
s.write('r\r'.encode())
|
|
read(s)
|
|
|
|
else:
|
|
print('Invalid option')
|
|
|
|
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|