Ardunio lab ikinci soru ```
int aPin = 22;
int bPin = 23;
int cPin = 24;
int dPin = 25;
int ePin = 26;
int fPin = 27;
int gPin = 28;
int GND[] = {33, 34, 35, 36};
const int buttons[] = {38, 39, 40, 41}; // SW0, SW1, SW2, SW3
const int leds[] = {43, 44, 45, 46}; // LEDs for Floor 1 to Floor 4
int oldFloor = 1;
bool buttonPressed[4] = {false, false, false, false}; // Button states
unsigned long lastMoveTime = 0; // For tracking random movement time
unsigned long randomDelay = 3000; // 3 seconds delay for random movement
void setup() {
Serial.begin(115200);
int pins[] = {aPin, bPin, cPin, dPin, ePin, fPin, gPin};
for (int i = 0; i < 7; i++) {
pinMode(pins[i], OUTPUT);
}
for (int i = 0; i < 4; i++) {
pinMode(GND[i], OUTPUT);
pinMode(leds[i], OUTPUT);
pinMode(buttons[i], INPUT_PULLUP); // Buttons with pull-up resistors
digitalWrite(GND[i], LOW);
}
}
void clearDisplay() {
int pins[] = {aPin, bPin, cPin, dPin, ePin, fPin, gPin};
for (int i = 0; i < 7; i++) {
digitalWrite(pins[i], LOW);
}
for (int i = 0; i < 4; i++) {
digitalWrite(GND[i], LOW);
}
}
void clearAllLEDs() {
for (int i = 0; i < 4; i++) {
digitalWrite(leds[i], LOW); // Turn off all LEDs
}
}
void displayFloor(int floor) {
clearDisplay();
clearAllLEDs(); // Turn off all LEDs before lighting the current one
digitalWrite(GND[0], HIGH); // Activate the first segment
switch (floor) {
case 1:
digitalWrite(bPin, HIGH);
digitalWrite(cPin, HIGH);
digitalWrite(leds[0], HIGH); // Light up LED for Floor 1
break;
case 2:
digitalWrite(aPin, HIGH);
digitalWrite(bPin, HIGH);
digitalWrite(gPin, HIGH);
digitalWrite(ePin, HIGH);
digitalWrite(dPin, HIGH);
digitalWrite(leds[1], HIGH); // Light up LED for Floor 2
break;
case 3:
digitalWrite(aPin, HIGH);
digitalWrite(bPin, HIGH);
digitalWrite(gPin, HIGH);
digitalWrite(cPin, HIGH);
digitalWrite(dPin, HIGH);
digitalWrite(leds[2], HIGH); // Light up LED for Floor 3
break;
case 4:
digitalWrite(fPin, HIGH);
digitalWrite(gPin, HIGH);
digitalWrite(bPin, HIGH);
digitalWrite(cPin, HIGH);
digitalWrite(leds[3], HIGH); // Light up LED for Floor 4
break;
}
oldFloor = floor;
}
void moveToFloor(int targetFloor) {
int step = (targetFloor > oldFloor) ? 1 : -1; // Move up or down
while (oldFloor != targetFloor) {
oldFloor += step; // Move step by step
displayFloor(oldFloor); // Display the current floor
delay(1000); // Simulate travel time between floors
}
delay(1000); // Wait for 1 second when reaching the target floor before moving randomly again
}
void randomMove() {
int targetFloor = random(1, 5); // Generate random number between 1 and 4
moveToFloor(targetFloor); // Move to the randomly selected floor
}
void loop() {
unsigned long currentMillis = millis();
// Check if it's time for random movement
if (currentMillis - lastMoveTime >= randomDelay) {
randomMove(); // Move randomly
lastMoveTime = currentMillis; // Update the last move time
}
// Button Press Handling: Move to the requested floor
for (int i = 0; i < 4; i++) {
if (digitalRead(buttons[i]) == LOW && !buttonPressed[i]) { // Button is pressed
moveToFloor(i + 1); // Move to the selected floor
buttonPressed[i] = true; // Mark the button as pressed
delay(500); // Debouncing for 500 ms
} else if (digitalRead(buttons[i]) == HIGH) {
buttonPressed[i] = false; // Button is released
}
}
}