#include <Servo.h>

#define TRIG_PIN 9
#define ECHO_PIN 10
#define MOISTURE_PIN A0
#define SERVO_PIN 6

Servo sorterServo;

const int moistureThreshold = 500;

void setup() {
  pinMode(TRIG_PIN, OUTPUT);
  pinMode(ECHO_PIN, INPUT);

  sorterServo.attach(SERVO_PIN);
  sorterServo.write(90);

  Serial.begin(9600);
}

void loop() {

  long duration;
  int distance;

  digitalWrite(TRIG_PIN, LOW);
  delayMicroseconds(2);

  digitalWrite(TRIG_PIN, HIGH);
  delayMicroseconds(10);
  digitalWrite(TRIG_PIN, LOW);

  duration = pulseIn(ECHO_PIN, HIGH);

  distance = duration * 0.034 / 2;

  if (distance < 10) {

    delay(1000);

    int moistureValue = analogRead(MOISTURE_PIN);

    Serial.print("Moisture: ");
    Serial.println(moistureValue);

    if (moistureValue > moistureThreshold) {
      sorterServo.write(30);   // Dry waste bin
    }
    else {
      sorterServo.write(150);  // Wet waste bin
    }

    delay(2000);

    sorterServo.write(90);

    delay(1000);
  }

  delay(200);
}