#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Data training
float trainingData[][2] = {
{6.0, 1}, // Data 1: Glucose = 6.0, Kelas = 1 (diabetes)
{5.4, 0}, // Data 2: Glucose = 5.4, Kelas = 0 (non-diabetes)
// Tambahkan data training lainnya sesuai kebutuhan
};
int k = 1; // Jumlah tetangga terdekat yang akan dipertimbangkan
// Pin sensor
int sensorPin = A0;
// Pin tombol
int buttonPin = 2;
bool buttonState = false;
bool lastButtonState = false;
// Objek LCD I2C
LiquidCrystal_I2C lcd(0x27, 16, 2); // Alamat I2C dan ukuran LCD (sesuaikan dengan modul Anda)
void setup() {
pinMode(buttonPin, INPUT_PULLUP);
lcd.begin(16, 2); // Inisialisasi LCD
lcd.backlight(); // Aktifkan backlight LCD
lcd.setCursor(0, 0);
lcd.print(" Diabetes KNN ");
delay(2000);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Glucose: ");
lcd.setCursor(0, 1);
lcd.print("Prediction: ");
delay(2000);
lcd.clear();
Serial.begin(9600);
}
void loop() {
// Baca status tombol
buttonState = digitalRead(buttonPin);
if (buttonState == LOW && lastButtonState == HIGH) {
// Baca nilai dari sensor
float sensorValue = analogRead(sensorPin);
float glucose = map(sensorValue, 0, 1023, 0, 10); // Konversi nilai sensor ke rentang 0-10
// Hitung jarak Euclidean antara data uji dan data training
float distances[2];
for (int i = 0; i < 2; i++) {
float diff = glucose - trainingData[i][0];
distances[i] = fabs(diff);
}
// Urutkan jarak dalam urutan menaik
int indices[2] = {0, 1};
for (int i = 0; i < 2; i++) {
for (int j = i + 1; j < 2; j++) {
if (distances[j] < distances[i]) {
float tempDistance = distances[i];
distances[i] = distances[j];
distances[j] = tempDistance;
int tempIndex = indices[i];
indices[i] = indices[j];
indices[j] = tempIndex;
}
}
}
// Hitung jumlah kelas tetangga terdekat
int classCount[2] = {0, 0};
for (int i = 0; i < k; i++) {
int classLabel = trainingData[indices[i]][1];
classCount[classLabel]++;
}
// Tentukan kelas mayoritas
// Tentukan kelas mayoritas
int predictedClass;
if (classCount[0] > classCount[1]) {
predictedClass = 0; // Non-diabetes
} else {
predictedClass = 1; // Diabetes
}
lcd.clear();
// Tampilkan hasil klasifikasi pada LCD
lcd.setCursor(7, 0);
lcd.print(glucose, 1);
lcd.setCursor(2, 1);
if (predictedClass == 0) {
lcd.print("Non-Diabetes");
} else {
lcd.print("Diabetes");
}
delay(1000);
}
lastButtonState = buttonState;
}