Model Elevator for Arduino UNO and 28BYJ-48 Stepper Motor (GR 10 TECH)

Copyright Claim

Model Elevator for Arduino UNO and 28BYJ-48 Stepper Motor (GR 10 TECH)

Boost
7
4
1

Print Profile(0)


Add the first print profile to earn points

Boost
7
4
1
0
9
0
Released

Description

For tech class

Comment & Rating (1)

Please fill in your opinion
(0/5000)

code #include #include // Pins & Devices int startButton = 4; int onLed = -1; int stepperPinStart = 9; int buzzerPin = 5; Stepper stepper(200, stepperPinStart, stepperPinStart+2, stepperPinStart+1, stepperPinStart+3); LiquidCrystal_I2C lcd(0x27,16,2); // Elevator specifics int elevatorFloorPins[4] = {6, 7, 13, 8}; int elevatorLightPins[4] = {A3, A2, 2, 3}; int elevatorFloorSteps[4] = {4300, 2860, 1300, 0}; int curFloorSteps = 0; char curFloor = -1; int steps = 0; int beeped = 0; int shownInactive = 0; int started = 0; // Queueing stack char queue[256] = {0}; // For memory conservation int queuePtr = 3; void handleBeep() { if(!beeped && curFloorSteps == steps) { Serial.println("Beeped"); beeped = 1; digitalWrite(buzzerPin, HIGH); delay(100); digitalWrite(buzzerPin, LOW); if(curFloor != -1) changeLed(curFloor); } } void handleButtons() { int i; for(i=0;i<4;i++) { if(digitalRead(elevatorFloorPins[i]) == LOW) { started = 1; if(queue[queuePtr] != i) { queue[++queuePtr] = i; Serial.println(i+1); } } } } // I understand this is an awful way to handle this but I can't think of something that’s both better and practical void popBottomOfQueue() { char temp[256]; int i; for(i=1;i= 0 || !shownInactive) { changeLcd(curFloor, queue[0]); if(queuePtr == -1) shownInactive = 1; } if(queuePtr >= 0) { shownInactive = 0; curFloorSteps = elevatorFloorSteps[queue[0]]; curFloor = queue[0]; Serial.println(curFloorSteps); popBottomOfQueue(); } } } void handleSteps() { if(steps < curFloorSteps) { beeped = 0; stepper.step(1); steps++; } if(steps > curFloorSteps) { beeped = 0; stepper.step(-1); steps--; } } void changeLed(char floor) { int i; for(i=0;i<4;i++) digitalWrite(elevatorLightPins[i], LOW); digitalWrite(elevatorLightPins[floor], HIGH); delay(200); digitalWrite(elevatorLightPins[floor], LOW); } void changeLcd(char floor, char nextFloor) { char msg[32]; if(!started) return; if(floor == -1) { lcd.clear(); lcd.setCursor(0, 0); lcd.print("Travelling"); lcd.setCursor(0, 1); sprintf(msg, "Next Floor %d", nextFloor+1); lcd.print(msg); return; } sprintf(msg, "Floor %d", floor + 1); // Floor starts at 0 lcd.clear(); lcd.setCursor(0, 0); lcd.print(msg); lcd.setCursor(0, 1); if(queuePtr == -1) { lcd.print("Queue empty"); return; } sprintf(msg, "Next Floor %d", nextFloor + 1); lcd.print(msg); } void setup() { queue[0] = 2; queue[1] = 3; queue[2] = 0; queue[3] = 1; pinMode(startButton, INPUT_PULLUP); pinMode(onLed, OUTPUT); pinMode(buzzerPin, OUTPUT); lcd.init(); lcd.backlight(); lcd.setCursor(0, 0); lcd.print("Press button"); lcd.setCursor(0, 1); lcd.print("to start"); int i; for(i=0;i<4;i++) pinMode(elevatorFloorPins[i], INPUT_PULLUP); for(i=0;i<4;i++) pinMode(elevatorLightPins[i], OUTPUT); while(digitalRead(startButton) == HIGH); // Await button press stepper.setSpeed(100); lcd.clear(); lcd.setCursor(0, 0); lcd.print("Floor 4"); lcd.setCursor(0, 1); lcd.print("Queue empty"); Serial.begin(9600); } void loop() { handleButtons(); handleSteps(); handleBeep(); handleQueue(); }
0
Reply
No more