Advertisement
DreamWolf

Flux ограничение на заряд

Jan 1st, 2025
5
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.88 KB | None | 0 0
  1. -- Программа для управления подачей энергии в хранилище Draconic Evolution
  2. -- 06.01.2025
  3.  
  4. local event = require "event"
  5. local component = require "component"
  6. local fs = require "filesystem"
  7. local term = require "term"
  8. local gpu = component.gpu
  9.  
  10. -- Подключаем хранилище энергии Draconic Evolution
  11. if component.isAvailable("draconic_rf_storage") then
  12. bb = component.draconic_rf_storage
  13. else
  14. error("Подключите хранилище энергии Draconic Evolution!")
  15. end
  16.  
  17. -- Подключаем flux-gate для регулировки энергии
  18. if component.isAvailable("flux_gate") then
  19. gate = component.flux_gate
  20. else
  21. error("Подключите флакс-гейт!")
  22. end
  23.  
  24. local capacity = bb.getMaxEnergyStored()
  25.  
  26. -- Функции для работы с энергией
  27. function detectEnergy()
  28. return bb.getEnergyStored()
  29. end
  30.  
  31. function setFlux(int)
  32. if int ~= nil then
  33. gate.setSignalLowFlow(int)
  34. end
  35. end
  36.  
  37. function convert(num)
  38. if num >= 10^11 then
  39. return string.format("%0.3f T", num/10^12)
  40. elseif num >= 10^9 then
  41. return string.format("%0.3f B", num/10^9)
  42. elseif num >= 10^6 then
  43. return string.format("%0.3f M", num/10^6)
  44. elseif num >= 10^3 then
  45. return string.format("%0.3f K", num/10^3)
  46. else
  47. return string.format("%d", num)
  48. end
  49. end
  50.  
  51. function pc(a, b)
  52. result = (a*100)/b
  53. return string.format("%.3f", result) .. "%"
  54. end
  55.  
  56. function fillBattery(energy, capacity)
  57. local percentage = (energy / capacity) * 100
  58. local w = math.floor((percentage / 100) * 45)
  59. gpu.setBackground(0x8E8E8E)
  60. gpu.fill(2, 12, 45, 3, " ")
  61.  
  62. if w <= 15 then
  63. gpu.setBackground(0xFF0000) -- Красный цвет для низкой энергии
  64. elseif w <= 30 then
  65. gpu.setBackground(0xFFFF00) -- Желтый цвет для средней энергии
  66. else
  67. gpu.setBackground(0x00FF00) -- Зеленый цвет для высокой энергии
  68. end
  69.  
  70. gpu.fill(2, 12, w, 3, " ")
  71. gpu.setBackground(0x242121)
  72. end
  73.  
  74. -- Функция для ввода данных вручную
  75. function askForTargetPercentage()
  76. gpu.set(1, 1, "Введите целевой процент энергии (0-100): ")
  77. term.setCursor(30, 1)
  78. local input = io.read()
  79. local percentage = tonumber(input)
  80.  
  81. if percentage and percentage >= 0 and percentage <= 100 then
  82. return percentage
  83. else
  84. print("Ошибка! Пожалуйста, введите число от 0 до 100.")
  85. return askForTargetPercentage() -- Повторяем запрос, если введено некорректное значение
  86. end
  87. end
  88.  
  89. -- Параметры программы
  90. local CONFIG = {
  91. targetPercentage = askForTargetPercentage(), -- Запрашиваем целевой процент при запуске программы
  92. tolerance = 0.2, -- Точность (в процентах), на которой подача энергии будет отключаться
  93. }
  94.  
  95. local time = os.time()
  96.  
  97. function main()
  98. local energy = detectEnergy()
  99. local energyPercentage = (energy / capacity) * 100
  100.  
  101. -- Вывод информации о состоянии в терминал
  102. gpu.set(1, 3, "Текущий уровень энергии: " .. convert(energy) .. " [" .. pc(energy, capacity) .. "]")
  103. gpu.set(1, 4, "Целевой уровень энергии: " .. CONFIG.targetPercentage .. "%")
  104. gpu.set(1, 5, "Текущий процент: " .. string.format("%.2f", energyPercentage) .. "%")
  105.  
  106. -- Отключаем подачу энергии, если процент превышает целевой на 0.2%
  107. if energyPercentage > (CONFIG.targetPercentage + CONFIG.tolerance) then
  108. gpu.set(1, 6, "Энергия превышает целевой уровень. Отключение подачи.")
  109. setFlux(0) -- Отключаем подачу энергии
  110. -- Включаем подачу энергии, если процент ниже целевого на 0.2%
  111. elseif energyPercentage < (CONFIG.targetPercentage - CONFIG.tolerance) then
  112. gpu.set(1, 6, "Энергия ниже целевого уровня. Включение подачи.")
  113. setFlux(800000) -- Включаем подачу энергии с максимальной мощностью
  114. else
  115. gpu.set(1, 6, "Энергия в пределах допустимого диапазона.")
  116. end
  117.  
  118. -- Отображение батареи
  119. fillBattery(energy, capacity)
  120. end
  121.  
  122. -- Основной цикл программы
  123. while true do
  124. main()
  125. os.sleep(1) -- Обновление каждую секунду
  126. end
  127.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement