voidwait_for_connection(boolbeep){//функция, которая мигает светодиодом и пищит (если beep == true) до тех пор, пока не будет установлено соединение с ПК
Serial.println("start_transmission");
digitalWrite(LED_PIN,1);
unsignedlonglast_blink_time=millis();
while(Serial.available()==0){//ждем ответа
if(millis()>=last_blink_time+BLINK_INTERVAL*2){
digitalWrite(LED_PIN,1);
last_blink_time=millis();
}
elseif(millis()>=last_blink_time+BLINK_INTERVAL){
digitalWrite(LED_PIN,0);
}
if(beep){
if(millis()>=last_beep_time+BEEP_INTERVAL*2){
analogWrite(SOUND_PIN,BEEP_STRENGTH);
last_beep_time=millis();
}
elseif(millis()>=last_beep_time+BEEP_INTERVAL){
analogWrite(SOUND_PIN,0);
}
}
}
digitalWrite(LED_PIN,0);//гасим светодиод
analogWrite(SOUND_PIN,0);//и выключаем пищалку
while(Serial.available()){// очистка буфера
Serial.readString();
}
}
voidtempFromPc()// получаем температуру от пк
{
Stringrpm_string="send_rpm_";
for(inti=0;i<6;i++){
rpm_string+=String(rpms[i]);
if(i<5){
rpm_string+="_";
}
}
Serial.println("req_temperature_"+rpm_string);//запрос к пк
unsignedlongquery_time=millis();
while(Serial.available()==0){//ждем пока ответит
if(millis()>=query_time+GET_TEMP_TIMEOUT){//если слишком долго не отвечает
POLL_SLEEP_TIME=0.05#Задержка между проверками наличия запроса от ардуины
RECONNECT_SLEEP_TIME=1#Задержка между попытками открыть serial порт при потере связи
TIMEOUT_TIME=3#Считается что ардуина перестала отвечать, если от нее не было запросов в течение этого времени
SERIAL_SPEEDS=[300,1200,2400,4800,9600,19200,38400,57600,74880,115200,230400,250000,500000,1000000,2000000]#Тут только те, которые доступны в arduino IDE
serial_port.write(temp.encode())#отправка значения
serial_port.write(('temperature_'+temp+'\n').encode())#отправка значения
else:
output=str(subprocess.Popen(['netcat','localhost','7634'],stdout=subprocess.PIPE,stderr=subprocess.STDOUT).communicate()[0])#получаем output от hddtemp
#b'|/dev/sda2|ST340014A|41|C|'
...
...
@@ -154,13 +158,16 @@ while True:
try:
int(temp)
#print(temp + ' C')
serial_port.write('a'.encode())
serial_port.write(temp.encode())#отправка значения
serial_port.write(('temperature_'+temp+'\n').encode())#отправка значения
exceptValueError:
print('Error: Failed to get a temperature value from hddtemp output')
else:
print('Unknown query from serial device')
if'send_rpm'inincoming_line:
send_rpm_pos=incoming_line.find('send_rpm')
rpm_str=incoming_line[send_rpm_pos+9:]
ifargs.manual:print()
print('Fan RPMs: '+rpm_str)
ifargs.manual:print('Enter the temperature value: ')