#define BUTTON_PIN             2

#define SONIC_ECHO_PIN         3
#define SONIC_TRIG_PIN         4

const uint8_t debounceDelay = 50;   

void setup() 
{
  /* Käivitame jadaühenduse */
  Serial.begin(9600);

  /* Seadistame surunupu */
  pinMode(BUTTON_PIN, INPUT);

  /* Seadistame ultraheli sisendi ja väljundi */
  pinMode(SONIC_TRIG_PIN, OUTPUT);
  pinMode(SONIC_ECHO_PIN, INPUT);
}

void loop() 
{
  if (ButtonRead()) 
  {
    float distance = GetDistInCm();
    Serial.print("Roboti kaugus objektist on: ");
    Serial.println(distance);
  }
}

float GetDistInCm() 
{
  /* Saadame ultrahelilaine välja, kestvus 10 us */
  digitalWrite(SONIC_TRIG_PIN, HIGH);   
  delayMicroseconds(10);                
  digitalWrite(SONIC_TRIG_PIN, LOW);    

  /* Loeme signaali peegeldumise aja */
  uint16_t echoTime = pulseIn(SONIC_ECHO_PIN, HIGH);
  
  /* Asenda tagastus korrektse valemiga, mille leiad andmelehelt */
  return 0.0f; 
}

bool ButtonRead() 
{
  static bool lastButtonState = LOW;
  static uint32_t lastDebounceTime = 0;
  static bool buttonState = LOW;   

  bool btnReadValue = digitalRead(BUTTON_PIN);
  if (btnReadValue != lastButtonState) {
    lastDebounceTime = millis();
  }
  if ((millis() - lastDebounceTime) > debounceDelay) {
    if (btnReadValue != buttonState) {
      buttonState = btnReadValue;
      if (buttonState == HIGH) {
        return true;
      }
    }
  }
  lastButtonState = btnReadValue;
  return false;
}