//kotak sampah otomatis 
// https://www.youtube.com/@hendrykurniawan
#include <Servo.h>
#define ECHO_PIN 8
#define TRIG_PIN 9
#define  PIN_SERVO A0
Servo myservo;
float distance;

void setup() 
{
  myservo.attach(PIN_SERVO);
  Serial.begin(115200);
  pinMode(TRIG_PIN, OUTPUT);
  pinMode(ECHO_PIN, INPUT);
  myservo.write(0);
  delay(500);
}

void loop()
{ 
  //Tutup terbuka cepat, tunda beberapa saat, lalu tutup tertutup dengan lambat
  digitalWrite(TRIG_PIN, LOW);
  delayMicroseconds(2);
  digitalWrite(TRIG_PIN, HIGH);
  delayMicroseconds(10);
  digitalWrite(TRIG_PIN, LOW);
  int duration = pulseIn(ECHO_PIN, HIGH);
  float distance = duration * 0.034 / 2;

  Serial.print("Jarak: ");
  Serial.print(distance);
  Serial.println(" cm");
  
  if(distance<=30)
  {
    //servoSpeed(Servo servo, int sudut, uint8_t Speed)
    servoSpeed(myservo, 110, 255);  //100 derajat, speed full 255
    Serial.println("Kondisi Kotak Sampah Terbuka");
    delay(3000);
    servoSpeed(myservo, 0, 100);  //0 derajat, speeed lambat 100
    Serial.println("Kondisi Kotak Sampah Tertutup1");
    servoSpeed(myservo, 0, 0);  //stop
    Serial.println("standbye1");
    delay(500);
  }

  else
  {
    servoSpeed(myservo, 0, 0);  //Stop
    Serial.println("standbye2");
    delay(500);
  }
  
  
}

void servoSpeed(Servo servo, int sudut, uint8_t Speed)
{
  if(Speed == 0)
  {
    return;
  }
  int posisiSekarang = servo.read();
  for (int i = posisiSekarang; i != sudut; (posisiSekarang > sudut) ? i-- : i++)
  {
    servo.write(i);
    if (Speed > 174)
    {
      delayMicroseconds((256 - Speed) * 200);//0.12 detik/60 derajat
    }
    else
    {
      delay((uint16_t)(256 - Speed) * 0.2f);//0.12 detik/60 derajat
    }
  }
  servo.write(sudut);
}
uno:A5.2
uno:A4.2
uno:AREF
uno:GND.1
uno:13
uno:12
uno:11
uno:10
uno:9
uno:8
uno:7
uno:6
uno:5
uno:4
uno:3
uno:2
uno:1
uno:0
uno:IOREF
uno:RESET
uno:3.3V
uno:5V
uno:GND.2
uno:GND.3
uno:VIN
uno:A0
uno:A1
uno:A2
uno:A3
uno:A4
uno:A5
servo1:GND
servo1:V+
servo1:PWM
ultrasonic1:VCC
ultrasonic1:TRIG
ultrasonic1:ECHO
ultrasonic1:GND