diff --git a/main.py b/main.py new file mode 100644 index 0000000..df721fb --- /dev/null +++ b/main.py @@ -0,0 +1,82 @@ +import GPUtil +import time + +from pySerialTransfer import pySerialTransfer as txfer + +try: + # --- + # You will need to customize port to your own computer; to find your port: + # With your Arduino plugged in, open Arduino IDE, and click "Select Board". Then, you can see the port. + # On Linux, it will be "/dev/ttyXXX#", like "/dev/ttyACM0" or "/dev/ttyUSB0". I think macOS is the same. + # On Windows, it will be "COM#", like "COM3" + # --- + port = '/dev/ttyACM0' + link = txfer.SerialTransfer(port, 115200, timeout=.1) + + link.open() + time.sleep(2) + + # GPUtil setup + gpus = GPUtil.getGPUs() + + while True: + time.sleep(1) + temp = max(gpu.temperature for gpu in gpus) + + speed = int(((temp - 40) / 40) * 100) + if speed < 40: + speed = 40 + elif speed > 100: + speed = 100 + + print(f'Temp: {temp}') + print(f'Speed: {speed}') + + ################################################################################################################ + # Send data to the Arduino + ################################################################################################################ + + # send_size will be increased when data is added to payload + send_size = 0 + + # Adds data to payload + int_size = link.tx_obj(speed, send_size) - send_size + send_size += int_size + + # Sends data to Arduino + link.send(send_size) + + # Waits for response from Arduino, and reports errors while receiving packets + while not link.available(): + if link.status < 0: + if link.status == txfer.CRC_ERROR: + print('Error: CRC_ERROR') + elif link.status == txfer.PAYLOAD_ERROR: + print('Error: PAYLOAD_ERROR') + elif link.status == txfer.STOP_BYTE_ERROR: + print('Error: STOP_BYTE_ERROR') + else: + print('Error: {}'.format(link.status)) + + # Parse response from Arduino + rec_int = link.rx_obj(obj_type=int, obj_byte_size=int_size, start_pos=(send_size - int_size)) + + # Evaluate for comm. errors + if speed != rec_int: + print(f'Error: sent {speed}, received {rec_int}') + +except KeyboardInterrupt: + try: + link.close() + except: + pass + +except: + import traceback + + traceback.print_exc() + + try: + link.close() + except: + pass