from machine import ADC, Pin
import time
# ---------------- SENSOR CLASS ----------------
class MotorSensor:
def __init__(self, pin):
self.adc = ADC(Pin(pin))
self.adc.atten(ADC.ATTN_11DB)
def read(self):
# Convert to percentage (0–100)
return (self.adc.read() / 4095) * 100
# ---------------- ACTUATOR CLASSES ----------------
class Motor:
def __init__(self):
self.state = "OFF"
def run(self):
self.state = "RUNNING"
print("Motor: RUNNING")
def stop(self):
self.state = "SHUTDOWN"
print("Motor: SHUTDOWN")
class LED:
def __init__(self, pin):
self.led = Pin(pin, Pin.OUT)
def on(self):
self.led.value(1)
def off(self):
self.led.value(0)
# ---------------- OBJECT CREATION ----------------
sensor = MotorSensor(34)
green_led = LED(26) # RUNNING
red_led = LED(27) # SHUTDOWN
motor = Motor()
# ---------------- THRESHOLDS ----------------
SAFE_LIMIT = 50
# Lock system (prevents restart during fault)
fault_lock = False
# ---------------- MAIN LOOP ----------------
while True:
value = sensor.read()
print("Load/Temp:", round(value, 2), "%")
# ---------------- FAULT CONDITION ----------------
if value > SAFE_LIMIT:
fault_lock = True
# ---------------- STATE MACHINE ----------------
if fault_lock:
# SHUTDOWN STATE
motor.stop()
green_led.off()
red_led.on()
print("STATE: SHUTDOWN (FAULT ACTIVE)")
# Only reset when safe again
if value < SAFE_LIMIT:
fault_lock = False
print("Fault cleared → System ready")
else:
# RUNNING STATE
motor.run()
green_led.on()
red_led.off()
print("STATE: RUNNING (SAFE)")
time.sleep(1)