Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- -- Программа для управления подачей энергии в хранилище Draconic Evolution
- -- 06.01.2025
- local event = require "event"
- local component = require "component"
- local fs = require "filesystem"
- local term = require "term"
- local gpu = component.gpu
- -- Подключаем хранилище энергии Draconic Evolution
- if component.isAvailable("draconic_rf_storage") then
- bb = component.draconic_rf_storage
- else
- error("Подключите хранилище энергии Draconic Evolution!")
- end
- -- Подключаем flux-gate для регулировки энергии
- if component.isAvailable("flux_gate") then
- gate = component.flux_gate
- else
- error("Подключите флакс-гейт!")
- end
- local capacity = bb.getMaxEnergyStored()
- -- Функции для работы с энергией
- function detectEnergy()
- return bb.getEnergyStored()
- end
- function setFlux(int)
- if int ~= nil then
- gate.setSignalLowFlow(int)
- end
- end
- function convert(num)
- if num >= 10^11 then
- return string.format("%0.3f T", num/10^12)
- elseif num >= 10^9 then
- return string.format("%0.3f B", num/10^9)
- elseif num >= 10^6 then
- return string.format("%0.3f M", num/10^6)
- elseif num >= 10^3 then
- return string.format("%0.3f K", num/10^3)
- else
- return string.format("%d", num)
- end
- end
- function pc(a, b)
- result = (a*100)/b
- return string.format("%.3f", result) .. "%"
- end
- function fillBattery(energy, capacity)
- local percentage = (energy / capacity) * 100
- local w = math.floor((percentage / 100) * 45)
- gpu.setBackground(0x8E8E8E)
- gpu.fill(2, 12, 45, 3, " ")
- if w <= 15 then
- gpu.setBackground(0xFF0000) -- Красный цвет для низкой энергии
- elseif w <= 30 then
- gpu.setBackground(0xFFFF00) -- Желтый цвет для средней энергии
- else
- gpu.setBackground(0x00FF00) -- Зеленый цвет для высокой энергии
- end
- gpu.fill(2, 12, w, 3, " ")
- gpu.setBackground(0x242121)
- end
- -- Функция для ввода данных вручную
- function askForTargetPercentage()
- gpu.set(1, 1, "Введите целевой процент энергии (0-100): ")
- term.setCursor(30, 1)
- local input = io.read()
- local percentage = tonumber(input)
- if percentage and percentage >= 0 and percentage <= 100 then
- return percentage
- else
- print("Ошибка! Пожалуйста, введите число от 0 до 100.")
- return askForTargetPercentage() -- Повторяем запрос, если введено некорректное значение
- end
- end
- -- Параметры программы
- local CONFIG = {
- targetPercentage = askForTargetPercentage(), -- Запрашиваем целевой процент при запуске программы
- tolerance = 0.2, -- Точность (в процентах), на которой подача энергии будет отключаться
- }
- local time = os.time()
- function main()
- local energy = detectEnergy()
- local energyPercentage = (energy / capacity) * 100
- -- Вывод информации о состоянии в терминал
- gpu.set(1, 3, "Текущий уровень энергии: " .. convert(energy) .. " [" .. pc(energy, capacity) .. "]")
- gpu.set(1, 4, "Целевой уровень энергии: " .. CONFIG.targetPercentage .. "%")
- gpu.set(1, 5, "Текущий процент: " .. string.format("%.2f", energyPercentage) .. "%")
- -- Отключаем подачу энергии, если процент превышает целевой на 0.2%
- if energyPercentage > (CONFIG.targetPercentage + CONFIG.tolerance) then
- gpu.set(1, 6, "Энергия превышает целевой уровень. Отключение подачи.")
- setFlux(0) -- Отключаем подачу энергии
- -- Включаем подачу энергии, если процент ниже целевого на 0.2%
- elseif energyPercentage < (CONFIG.targetPercentage - CONFIG.tolerance) then
- gpu.set(1, 6, "Энергия ниже целевого уровня. Включение подачи.")
- setFlux(800000) -- Включаем подачу энергии с максимальной мощностью
- else
- gpu.set(1, 6, "Энергия в пределах допустимого диапазона.")
- end
- -- Отображение батареи
- fillBattery(energy, capacity)
- end
- -- Основной цикл программы
- while true do
- main()
- os.sleep(1) -- Обновление каждую секунду
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement