Commit f32efecc authored by Oleg Nikulin's avatar Oleg Nikulin

Улучшено раздельное управление вентиляторами. Исправлены проблемы с неправильной…

Улучшено раздельное управление вентиляторами. Исправлены проблемы с неправильной реакцией вентилятора на очень малые (< ~15) и большие (> ~250) значения скважности. Изменена передача 3-х значений: тепереь их нужно вводить через запятую
parent 6ee78744
......@@ -6,10 +6,11 @@ import argparse
from argparse import RawTextHelpFormatter
import datetime
import threading
import sys
POLL_SLEEP_TIME = 0.05 #Задержка между проверками наличия запроса от ардуины
RECONNECT_SLEEP_TIME = 1 #Задержка между попытками открыть serial порт при потере связи
TIMEOUT_TIME = 3 #Считается что ардуина перестала отвечать, если от нее не было запросов в течение этого времени
POLL_SLEEP_TIME = 0.05 #Задержка между проверками наличия запроса от ардуины (cек)
RECONNECT_SLEEP_TIME = 1 #Задержка между попытками открыть serial порт при потере связи (cек)
TIMEOUT_TIME = 3 #Считается что ардуина перестала отвечать, если от нее не было запросов в течение этого времени (cек)
SERIAL_SPEEDS = [300, 1200, 2400, 4800, 9600, 19200, 38400, 57600, 74880, 115200, 230400, 250000, 500000, 1000000, 2000000] #Тут только те, которые доступны в arduino IDE
PORT:str = None
......@@ -18,15 +19,46 @@ temp = '50'
connected = False
input_thread_running = False
def temp_input():
global temp
while True:
temp_input = input('Enter the temperature value: ')
try:
int(temp_input)
temp_input = input('\033[60C' + 'Enter up to 3 temperature values (comma-separated): ')
error = False
comma_pos = 0
find_start_index = 0
#парсим введенную строку:
for i in range(3):
comma_pos = temp_input.find(',', find_start_index) #поиск запятой
if comma_pos != -1 and i == 2: #если есть третья запятая
print("Can't be more than 3 values")
error = True
break
#выделяем число
if comma_pos == -1: #если запятой не найдено, то до конца строки
temp_substring = temp_input[find_start_index:]
else:
temp_substring = temp_input[find_start_index:comma_pos]
try: #проверка, введено ли число
int(temp_substring)
except ValueError:
print('Temperature value must be a number')
error = True
break
if comma_pos == -1: #если запятых больше нет, выходим из цикла
break
find_start_index = comma_pos + 1
if not error: #если всё хорошо, введенную строку можно отправлять
temp = temp_input
except ValueError:
print('Temperature value must be a number')
......@@ -93,7 +125,7 @@ if args.speed == None:
exit()
if args.manual:
input_thread = threading.Thread(target = temp_input)
temp = '50,51,52'
#ищем указанное serial устройство
if args.device in serial_devices:
......@@ -163,15 +195,17 @@ while True:
print('Error: Failed to get a temperature value from hddtemp output')
if 'send_rpm' in incoming_line:
send_rpm_pos = incoming_line.find('send_rpm')
rpm_str = incoming_line[send_rpm_pos + 9:]
if args.manual: print()
print('Fan RPMs: ' + rpm_str)
if args.manual: print('Enter the temperature value: ')
send_rpm_pos = incoming_line.find('send_rpm_')
rpm_string = incoming_line[send_rpm_pos + 9:]
rpm_string = rpm_string.replace('_', ' ')
rpm_string = rpm_string.replace('debug', 'debug:')
rpm_string = 'Fan RPMs: ' + rpm_string
#сохранение положения курсора, перервод в начало строки, перевод на 59 символов вправо, очистка всего перед курсором, курсор в начало строки, вывод оборотов, загрузка положения строки
print('\0337' + '\033[255D' +'\033[59C' + '\033[1K' + '\033[255D' + rpm_string + '\0338', end = '', flush=True)
except OSError:
if connected:
print('Serial divice was disconnected. Trying to reconnect...')
print('\nSerial divice was disconnected. Trying to reconnect...')
connected = False
try: #пытаемся снова открыть serial порт
......@@ -185,7 +219,7 @@ while True:
time.sleep(RECONNECT_SLEEP_TIME)
if connected and datetime.datetime.now().timestamp() - last_serial_input_time > TIMEOUT_TIME:
print('Serial device is not responding')
print('\nSerial device is not responding')
connected = False
#time.sleep(POLL_SLEEP_TIME)
\ No newline at end of file
time.sleep(POLL_SLEEP_TIME)
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment