Advertisement
Corbinhol

Safe Controller

Sep 26th, 2022 (edited)
848
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 2.72 KB | None | 0 0
  1. --Safe Code
  2. --local basalt = require("basalt")
  3. local doorStatus = false; --False Means Closed. True Means Open.
  4. local modemSide = "front";
  5. local protocol = "SAFE";
  6.  
  7. rednet.open(modemSide);
  8. rednet.host(protocol, "safeController");
  9. print("Opened Connection");
  10.  
  11. function save()
  12.     local file = fs.open("save.dat", "w");
  13.     file.write(tostring(doorStatus));
  14.     file.close();
  15. end
  16.  
  17. function load()
  18.     if fs.exists("save.dat") == true then
  19.         local file = fs.open("save.dat", "r");
  20.         doorStatus = file.readAll("save.dat");
  21.         file.close();
  22.  
  23.         if doorStatus == "false" then doorStatus = false; end
  24.         if doorStatus == "true" then doorStatus = true; end
  25.         if doorStatus == "opening" then doorStatus = true; end
  26.         if doorStatus == "closing" then doorStatus = false; end
  27.     end
  28. end
  29.  
  30. load();
  31.  
  32.  
  33. function doorOperator() --Specifically Controls Door Operations.
  34.     while true do
  35.         local from, message = rednet.receive("SAFE");
  36.         print(message);
  37.         if message == "open" then
  38.             open(from);
  39.         elseif message == "close" then
  40.             close(from);
  41.         end
  42.         sleep(0);
  43.     end
  44. end
  45.  
  46.  
  47.  
  48. function openDoor()
  49.     redstone.setOutput("back", false);
  50.     redstone.setOutput("left", true);
  51.     sleep(.5);
  52.     redstone.setOutput("left", false);
  53. end
  54.  
  55. function closeDoor()
  56.     redstone.setOutput("back", true);
  57.     redstone.setOutput("left", true);
  58.     sleep(.5);
  59.     redstone.setOutput("left", false);
  60. end
  61.  
  62. function turnWheelRight()
  63.     redstone.setOutput("top", true);
  64.     redstone.setOutput("right", true);
  65. end
  66.  
  67.  
  68. function turnWheelLeft()
  69.     redstone.setOutput("top", false);
  70.     redstone.setOutput("right", true);
  71. end
  72.  
  73. function stopWheel()
  74.     redstone.setOutput("right", false);
  75. end
  76.  
  77. function open(client) --Operation To Open Door
  78.     print("Opening Door...");
  79.     doorStatus = "opening";
  80.     save();
  81.     turnWheelLeft();
  82.     sleep(5);
  83.     stopWheel();
  84.     sleep(.5);
  85.     openDoor();
  86.     sleep(5);
  87.     doorStatus = true;
  88.     save()
  89.     sleep(1);
  90.     rednet.send(client, "opened", protocol);
  91. end
  92.  
  93. function close(client) -- Operation To Close Door
  94.     print("Closing Door...");
  95.     doorStatus = "closing";
  96.     save();
  97.     closeDoor();
  98.     sleep(5);
  99.     turnWheelRight();
  100.     sleep(5);
  101.     stopWheel();
  102.     doorStatus = false;
  103.     save();
  104.     sleep(1);
  105.     rednet.send(client, "closed", protocol);
  106. end
  107.  
  108. function api() --Specifically manages data being sent to and from tablet.
  109.     while true do
  110.         local from, message = rednet.receive("API");
  111.         if message == "getDoorStatus" then
  112.             rednet.send(from, doorStatus, "API");
  113.         end
  114.     end
  115. end
  116.  
  117. parallel.waitForAny(api, doorOperator);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement