Визуальное проектирование управляющей логики фитнес-браслета
Автор
using Sockets
# Создание обработчиков уведомлений
function create_notification_handler(message)
previous_value = nothing;
return function(current_value)
if current_value != previous_value
previous_value = current_value;
if Bool(current_value)
println(message);
end
end
end
end
send_need_action = create_notification_handler("Время отдыха превышает заданное!");
send_need_rest = create_notification_handler("Вы активно занимаетесь уже слишком долго!");
send_dangerous_heart_rate = create_notification_handler("Опасная частота сердечных сокращений!");
# Запуск симуляции
@async engee.run("fitness_tracker");
# Создание и привязка сокета
udp_r = UDPSocket();
bind(udp_r, ip"127.0.0.1", 50000);
try
previous_status = nothing;
while (true)
# Приём по UDP
(_, data) = recvfrom(udp_r);
# Завершение приёма
if data[] == 0
println("\nСимуляция завершена.")
break
end
# Извлечение данных
status = data[] >> 1 & 0b11;
need_action = Bool(data[] >> 5 & 1);
need_rest = Bool(data[] >> 4 & 1);
dangerous_heart_rate = Bool(data[] >> 3 & 1);
# Вывод текущего статуса и уведомлений
if (status != previous_status)
previous_status = status;
println("Выполнен переход в состояние: " * string(Activity(status)));
end
send_need_action(need_action)
send_need_rest(need_rest)
send_dangerous_heart_rate(dangerous_heart_rate)
end
finally
close(udp_r)
end