No title

 #include <Servo.h>

#include <SPI.h>

#include <Adafruit_GFX.h>

#include <Adafruit_ST7735.h>


#define TFT_CS 10

#define TFT_RST 8

#define TFT_DC 9


Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_RST);


#define trigPin 6

#define echoPin 5

#define servoPin 3


Servo myServo;


int centerX = 64;

int baseY = 120;

int radius = 100;


long duration;

int distance;


void setup() {

  Serial.begin(9600);


  pinMode(trigPin, OUTPUT);

  pinMode(echoPin, INPUT);


  myServo.attach(servoPin);


  tft.initR(INITR_BLACKTAB);

  tft.setRotation(1);

  tft.fillScreen(ST77XX_BLACK);


  drawRadarFrame();

}


void drawRadarFrame() {

  tft.drawCircle(centerX, baseY, 100, ST77XX_GREEN);

  tft.drawCircle(centerX, baseY, 70, ST77XX_GREEN);

  tft.drawCircle(centerX, baseY, 40, ST77XX_GREEN);


  tft.drawLine(0, baseY, 128, baseY, ST77XX_GREEN);

}


int getDistance() {

  digitalWrite(trigPin, LOW);

  delayMicroseconds(2);


  digitalWrite(trigPin, HIGH);

  delayMicroseconds(10);

  digitalWrite(trigPin, LOW);


  duration = pulseIn(echoPin, HIGH);

  return duration * 0.034 / 2;

}


void loop() {


  for (int angle = 0; angle <= 180; angle += 3) {


    myServo.write(angle);


    distance = getDistance();


    int x = centerX + radius * cos(radians(angle));

    int y = baseY - radius * sin(radians(angle));


    // erase previous line

    tft.drawLine(centerX, baseY, x, y, ST77XX_BLACK);


    // draw scan line

    tft.drawLine(centerX, baseY, x, y, ST77XX_GREEN);


    if (distance < 100) {

      int dx = centerX + distance * cos(radians(angle));

      int dy = baseY - distance * sin(radians(angle));


      tft.fillCircle(dx, dy, 2, ST77XX_RED);

    }


    delay(15); // FAST animation

  }


  for (int angle = 180; angle >= 0; angle -= 3) {


    myServo.write(angle);


    distance = getDistance();


    int x = centerX + radius * cos(radians(angle));

    int y = baseY - radius * sin(radians(angle));


    tft.drawLine(centerX, baseY, x, y, ST77XX_BLACK);

    tft.drawLine(centerX, baseY, x, y, ST77XX_GREEN);


    if (distance < 100) {

      int dx = centerX + distance * cos(radians(angle));

      int dy = baseY - distance * sin(radians(angle));


      tft.fillCircle(dx, dy, 2, ST77XX_RED);

    }


    delay(15);

  }

}

Post a Comment

Previous Post Next Post

Contact Form