Untitled

 avatar
unknown
plain_text
a month ago
2.6 kB
4
Indexable
#include <Servo.h>
#include <Pitches.h>
#define NOTE_G5 784
#define NOTE_F5 698

const int yellowLED = 4;  
const int redLED = 8;     
const int greenLED = 12;  
const int buzzer = 2;     
const int button = A1;    

Servo servo_9;
const int SERVO_PIN = 11;       
const int SERVO_MIN_ANGLE = 0;  
const int SERVO_MAX_ANGLE = 180;
int servoAngle = SERVO_MIN_ANGLE;
const int RPM = 60;             
const int SERVO_DELAY = 100;    

char state = 'w';  
long motorStartTime, warningStartTime, buzzerStartTime, lastMotorMoveTime;
const int motorHoldTime = 5000; 
const int warningDelay = 250;   
const int buzzerDelay = 500;    

bool redLightOn = false;  
bool buzzerToneG5 = true; 

void setup() {
  Serial.begin(9600);

  pinMode(buzzer, OUTPUT);
  pinMode(yellowLED, OUTPUT);
  pinMode(redLED, OUTPUT);
  pinMode(greenLED, OUTPUT);
  pinMode(button, INPUT);

  servo_9.attach(SERVO_PIN);
  servo_9.write(servoAngle);

  motorStartTime = millis();
  warningStartTime = millis();
  buzzerStartTime = millis();
  lastMotorMoveTime = millis();

  delay(2000);
}

void loop() {
  Serial.println(state);

  if (state == 'w') {
    noTone(buzzer);
    digitalWrite(greenLED, HIGH);
    digitalWrite(redLED, LOW);
    digitalWrite(yellowLED, LOW);

    if (digitalRead(button) == LOW) {
      state = 'd';
    }
  }

  if (state == 'd' || state == 'p' || state == 'u') {
    if (millis() - warningStartTime >= warningDelay) {
      redLightOn = !redLightOn;
      digitalWrite(redLED, redLightOn ? HIGH : LOW);
      digitalWrite(yellowLED, redLightOn ? LOW : HIGH);
      digitalWrite(greenLED, LOW);
      warningStartTime = millis();
    }

    if (millis() - buzzerStartTime >= buzzerDelay) {
      if (buzzerToneG5) {
        tone(buzzer, NOTE_G5, 100);
      } else {
        tone(buzzer, NOTE_F5, 100);
      }
      buzzerToneG5 = !buzzerToneG5; 
      delay(250);
      noTone(buzzer);
      buzzerStartTime = millis();
    }
  }

  if (millis() - lastMotorMoveTime >= SERVO_DELAY) {
    lastMotorMoveTime = millis();

    if (state == 'd') {
      if (servoAngle < SERVO_MAX_ANGLE) {
        servoAngle += 6;  
        servo_9.write(servoAngle);
      } else {
        state = 'p';
        motorStartTime = millis();
      }
    } else if (state == 'p') {
      if (millis() - motorStartTime >= motorHoldTime) {
        state = 'u';
      }
    } else if (state == 'u') {
      if (servoAngle > SERVO_MIN_ANGLE) {
        servoAngle -= 6;  
        servo_9.write(servoAngle);
      } else {
        state = 'w';
      }
    }
  }
}
Editor is loading...
Leave a Comment