import time
import machine
import keypad
import lcd
import servo
import sdcard
import network
import urequests
class VendingMachine:
def __init__(self):
self.roll_numbers = [12345, 54321]
self.pins = [1111, 2222]
self.pads_remaining = {
"large": 10,
"medium": 10
}
self.servo_large = servo.Servo(18)
self.servo_medium = servo.Servo(19)
self.keypad = keypad.Keypad(i2c=machine.I2C(scl=22, sda=21))
self.lcd = lcd.I2CLCD(i2c=machine.I2C(scl=22, sda=21), address=0x27)
self.sdcard = sdcard.SDCard(machine.Pin(4))
self.network = network.WLAN(sta_if=network.STAInterface())
self.urequests = urequests
# Connect to the Wi-Fi network
self.network.connect("YOUR_WIFI_SSID", "YOUR_WIFI_PASSWORD")
# Start the web server
self.web_server = urequests.Server()
self.web_server.route("/pads", self.get_pads)
self.web_server.start()
def dispense_pad(self, pad_size):
if self.pads_remaining[pad_size] > 0:
self.pads_remaining[pad_size] -= 1
if pad_size == "large":
self.servo_large.rotate(360)
else:
self.servo_medium.rotate(360)
# Check if the pad was dispensed successfully
ir_sensor = machine.Pin(21, machine.Pin.IN)
if not ir_sensor.value():
# The pad was dispensed successfully
return True
else:
# The pad was not dispensed successfully
self.lcd.print("System malfunctioned.")
return False
else:
self.lcd.print("No more pads of that size remaining.")
return False
def authenticate_user(self):
roll_number = self.keypad.get_key()
pin = self.keypad.get_key()
if roll_number in self.roll_numbers and pin == self.pins[self.roll_numbers.index(roll_number)]:
return True
else:
return False
def get_pads(self, request):
response = urequests.Response()
response.content_type = "application/json"
response.json = self.pads_remaining
return response
def run(self):
while True:
self.lcd.clear()
self.lcd.print("Enter your roll number:")
roll_number = self.keypad.get_key()
if roll_number in self.roll_numbers:
self.lcd.clear()
self.lcd.print("Enter your pin:")
pin = self.keypad.get_key()
if pin == self.pins[self.roll_numbers.index(roll_number)]:
self.lcd.clear()
self.lcd.print("Select pad size:")
self.lcd.print("A: Large")
self.lcd.print("B: Medium")
pad_size = self.keypad.get_key()
if pad_size == "A" or pad_size == "B":
success = self.dispense_pad(pad_size)
if success:
self.lcd.print("Pad dispensed successfully.")
else:
self.lcd.print("System malfunctioned.")
else:
self.lcd.print("Invalid pad size selected.")
else:
self.lcd.print("Incorrect pin.")
else:
self.lcd.print("Incorrect roll number.")
time.sleep(3)
self.lcd.clear()
if __name__ == "__main__":
vending_machine = VendingMachine()
vending_machine.run()