#include <Servo.h>
Servo Servo1;
const int buttonPin = 4; // Pin push button
const int buzzerPin = 11; // Pin buzzer
const int ledPin = 7; // Pin LED
int lastButtonState = HIGH; // Status sebelumnya tombol (diasumsikan HIGH, tidak ditekan)
int servoAngle = 0; // Posisi awal servo
void setup() {
pinMode(3, OUTPUT);
pinMode(A0, INPUT);
pinMode(buttonPin, INPUT_PULLUP); // Menggunakan pull-up internal untuk tombol
pinMode(buzzerPin, OUTPUT);
pinMode(ledPin, OUTPUT);
Servo1.attach(3);
Serial.begin(9600);
}
void loop() {
int analogValue = analogRead(A0);
const float BETA = 3950;
float celsius = 1 / (log(1 / (1023. / analogValue - 1)) / BETA + 1.0 / 298.15) - 273.15;
Serial.print("Temperature: ");
Serial.print(celsius);
Serial.println(" ℃");
int newServoAngle = map(celsius, -24, 80, 0, 90);
Serial.print("Angle: ");
Serial.println(newServoAngle);
// Mengupdate posisi servo hanya jika nilai sudut baru berbeda dengan nilai sebelumnya
if (newServoAngle != servoAngle) {
servoAngle = newServoAngle;
Servo1.write(servoAngle);
delay(2000);
}
// Membaca status tombol
int buttonState = digitalRead(buttonPin);
// Memeriksa perubahan status tombol
if (buttonState == LOW && lastButtonState == HIGH) {
// Tombol baru saja ditekan, kembalikan posisi servo ke 0 derajat
Servo1.write(0);
delay(2000); // Delay untuk mencegah bouncing pada tombol
}
// Menyimpan status tombol untuk perbandingan di iterasi berikutnya
lastButtonState = buttonState;
// Memeriksa suhu untuk menentukan tindakan buzzer dan LED
if (celsius >= 60) {
// Jika suhu mencapai 60 derajat, aktifkan buzzer
tone (buzzerPin, 500);
} else {
// Jika tidak, matikan buzzer
noTone(buzzerPin);
}
// Memeriksa suhu untuk menentukan tindakan LED
if (celsius <= 24) {
// Jika suhu kurang dari atau sama dengan 24 derajat, hidupkan LED
digitalWrite(ledPin, HIGH);
} else {
// Jika tidak, matikan LED
digitalWrite(ledPin, LOW);
}
}