// Fungsi keanggotaan suhu
double suhuRendah(double x) {
if (x >= 20 && x <= 50) return 1.0;
else if (x > 50 && x <= 60) return (60 - x) / 10.0;
else return 0.0;
}
double suhuSedang(double x) {
if (x >= 50 && x <= 65) return (x - 50) / 15.0;
else if (x > 65 && x <= 80) return (80 - x) / 15.0;
else return 0.0;
}
double suhuTinggi(double x) {
if (x >= 70 && x <= 80) return (x - 70) / 10.0;
else if (x > 80 && x <= 100) return 1.0;
else return 0.0;
}
// Fungsi keanggotaan berat
double beratRingan(double x) {
if (x >= 30 && x <= 40) return 1.0;
else if (x > 40 && x <= 50) return (50 - x) / 10.0;
else return 0.0;
}
double beratSedang(double x) {
if (x >= 40 && x <= 55) return (x - 40) / 15.0;
else if (x > 55 && x <= 70) return (70 - x) / 15.0;
else return 0.0;
}
double beratBerat(double x) {
if (x >= 60 && x <= 70) return (x - 60) / 10.0;
else if (x > 70 && x <= 80) return 1.0;
else return 0.0;
}
// Fungsi inferensi fuzzy
double inferensi(double suhu, double berat) {
double r1 = fmin(suhuRendah(suhu), beratRingan(berat)); // Cepat
double r2 = fmin(suhuRendah(suhu), beratSedang(berat)); // Sedang
double r3 = fmin(suhuRendah(suhu), beratBerat(berat)); // Lama
double r4 = fmin(suhuSedang(suhu), beratRingan(berat)); // Cepat
double r5 = fmin(suhuSedang(suhu), beratSedang(berat)); // Sedang
double r6 = fmin(suhuSedang(suhu), beratBerat(berat)); // Lama
double r7 = fmin(suhuTinggi(suhu), beratRingan(berat)); // Cepat
double r8 = fmin(suhuTinggi(suhu), beratSedang(berat)); // Sedang
double r9 = fmin(suhuTinggi(suhu), beratBerat(berat)); // Lama
double cepat = fmax(fmax(r1, r4), r7) * 240; // 4 menit
double sedang = fmax(fmax(r2, r5), r8) * 540; // 9 menit
double lama = fmax(fmax(r3, r6), r9) * 660; // 11 menit
double totalBobot = (r1 + r4 + r7) + (r2 + r5 + r8) + (r3 + r6 + r9);
if (totalBobot == 0) return 11.0; // Default waktu jika tidak ada aturan aktif
return (cepat + sedang + lama) / totalBobot;
}
void setup(){
Serial.begin(115200);
Serial.println(inferensi(77.61, 43.86));
}
void loop(){
}