#include "SPI.h"
#include "Adafruit_GFX.h"
#include "Adafruit_ILI9341.h"

#define TFT_DC 2 //D2
#define TFT_CS 3 //D3

#define PIN_BUTTON A1  
#define PIN_TRIG A3
#define PIN_ECHO A2
#define vert A4
#define orange A5
#define rouge A0 
#define BUZZER_PIN A5

Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC);

void setup() {
  Serial.begin(115200);
  pinMode(BUZZER_PIN, OUTPUT);  // Set the buzzer pin as an output
  pinMode(PIN_BUTTON, INPUT);  
  pinMode(PIN_TRIG, OUTPUT);
  pinMode(PIN_ECHO, INPUT);
  pinMode(rouge, OUTPUT);
  pinMode(orange, OUTPUT);
  pinMode(vert, OUTPUT);

  //Serial.println("Hello, WOKWI");
  tft.begin();

  //tft.setCursor(20, 120);
  //tft.setTextColor(ILI9341_RED);
  //tft.setTextSize(3);
  //tft.println("Hello STM2");
  
  //tft.setCursor(24, 160);
  //tft.setTextColor(ILI9341_GREEN);
  //tft.setTextSize(2);
  //tft.println("I can do SPI :-)");

}

void loop() {
  int button_state=digitalRead(PIN_BUTTON) ;
  if (button_state==LOW) 
  {
    delay(10); 
    digitalWrite(PIN_TRIG, HIGH);
    delayMicroseconds(10);
    digitalWrite(PIN_TRIG, LOW);

    int duration = pulseIn(PIN_ECHO, HIGH);
    float distance = duration / 58.0;  
    Serial.print("Distance in CM: ");
    Serial.println(distance);
    
    tft.setCursor(20, 120);
    tft.setTextColor(ILI9341_RED);
    tft.setTextSize(3);
    tft.println("distance");
    
    delay(500);
    if(distance <= 30) {
      tone(BUZZER_PIN, 440, 0);
      digitalWrite(rouge, HIGH);
      digitalWrite(orange, LOW);
      digitalWrite(vert, LOW);
    }
    else if ((distance > 30 )&& (distance <= 120)) {
    digitalWrite(rouge, LOW);
    digitalWrite(orange, HIGH);
    digitalWrite(vert, LOW);
    
    int dur = map(distance - 30, 90, 0, 1000,0);
    
    tone(BUZZER_PIN,440);
    delay(200);
    noTone(BUZZER_PIN);
    digitalWrite(BUZZER_PIN, LOW);
    delay(dur);
    }
    else if(distance > 120) {
        digitalWrite(rouge, LOW);
        digitalWrite(orange, LOW);
        digitalWrite(vert, HIGH);
        noTone(BUZZER_PIN);
    }
  }
}