//OSCAR ABDUL HAKIM
//(MBKM)21410300490
//TEKNIK ELEKTRO
int dataY[10]={11, 15, 39, 40, 54, 67, 78, 89, 90, 98};
int datax[10]={13, 14, 40, 60, 61, 78, 79, 90, 98, 99};
float mx[1];//inisisasi ukuran array untuk memori regresi dari nilai X
float my[1];//inisiasi ukuran array hasil nilai Y
int trig=9;//deklarasi pin 9(TRIGGER)
int echo=8;//deklarasi pin 8(ECHO)
long duration;//deklarasi tipe data feedback
float distance;//deklarasi tipe data jarak
float slope;
float intercept;
void setup()
{
Serial.begin(9600);
pinMode(trig,OUTPUT);
pinMode(echo, INPUT);
float sumX = 0, sumY = 0, sumXY = 0, sumX2 = 0;//inisisasi nilai untuk delta data X & Y
for (int i = 0; i < 15; i++) {
sumX += datax[i];//data durasi feedback echo
sumY += dataY[i];//data hasil jarak real
sumXY += datax[i] * dataY[i];
sumX2 += datax[i] * datax[i];
}
float slope = (15 * sumXY - sumX * sumY) / (15 * sumX2 - sumX * sumX);//perhitungan slope
float intercept = (sumY - slope * sumX) / 15;//perhitungan intercept
Serial.print("Slope: ");
Serial.println(slope);// display slope
Serial.print("Intercept: ");
Serial.println(intercept);// display intercept
mx[0]=slope;// memasukkan data perhitungan slope ke dalam array mx
my[0]=intercept;// memasukkan data perhitungan intercept ke dalam array my
}
void loop()
{
// inisiasi pin TRIGGER
digitalWrite(trig, LOW);
delayMicroseconds(2);
// Memancarkan sinyal Trigger selama 10 microseconds
digitalWrite(trig, HIGH);
delayMicroseconds(10);
digitalWrite(trig, LOW);
// Menghitung lamanya waktu agar sinyal trigger tertangkap echo
duration = pulseIn(echo, HIGH);
// menghitung jarak dengan menggunakan data perhitungan regresi
distance = duration*mx[0] + my[0];
//menampilkan hasil perhitungan jarak di serial monitor
Serial.print("Distance =");
Serial.println(distance);
delay(200);
}