//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);
}