GMTROM/Archiv/pi_numbers_separated_USB.py

81 lines
2.7 KiB
Python

from math import fabs as fabs
from math import sqrt as sqrt
import os
import serial
import time
from StartUpTest import StartUPTest
from TotOnline import TotOnline
ser = serial.Serial('/dev/ttyACM0', 115200) # change port to input port from arduino
# define the number of numbers and bits per number to generate
num_numbers = 4
bits_per_number = 5000
# calculate the total file size in bits
filesize = num_numbers * bits_per_number
# define the filename
filename = f'{num_numbers}numbers_{bits_per_number}bits'
start_time = time.time() # start time of read
with open(filename + '.bin', 'wb') as file:
for i in range(num_numbers):
# write the separator between numbers except for the last one
if i != num_numbers - 1:
file.write(b'' + b'')
for j in range(bits_per_number // 8):
# read one byte from the serial port
byte = ser.read(1)
file.write(byte)
end_time = time.time() # end time of read
elapsed_time = end_time - start_time
seconds = int(elapsed_time)
milliseconds = int((elapsed_time % 1) * 1000)
new_filename = f"{filename}_TimeInSeconds_{seconds}_{milliseconds}.bin" # filename in format filename_seconds_milliseconds as txt with needed time to finish read
os.rename(filename + '.bin', new_filename) # change filename to new filename
# Open the file in binary mode
with open(new_filename, 'rb') as f:
# Read the contents of the file as bytes
content = f.read()
result = StartUPTest.monobit_test(content)
print(result[0])
print(result[1])
result = StartUPTest.autocorrelation_test(content)
print(result[1])
# Convert the bytes to a string of hexadecimal digits with zero padding
hex_str = ''.join(format(byte, '02x') for byte in content).zfill(num_numbers * (bits_per_number // 4))
# Write the hex string to the file with separators and newlines
with open(filename + '.txt', 'w') as f:
for i in range(num_numbers):
hex_number = hex_str[i * (bits_per_number // 4) : (i+1) * (bits_per_number // 4)]
# write the separator between numbers except for the last one
if i != num_numbers - 1:
hex_number += '//'
f.write(hex_number + '\n')
print(f"time needed in seconds: {elapsed_time:.2f}. New filename: {new_filename}.") # console write
# Open the file in binary mode
with open(new_filename, 'rb') as f:
# Read the contents of the file as bytes
content = f.read()
# Convert the bytes to a string of binary digits
binary_str = ''.join(format(byte, '08b') for byte in content)
# Write the binary string back to the file with separators
with open(filename + '_binary.txt', 'w') as f:
for i in range(0, len(binary_str), bits_per_number):
binary_number = binary_str[i:i+bits_per_number]
f.write(binary_number + '\n')