0

Help me please. This is an arduino uno radar project using servo motor, ultrasonic sensor, piezo buzzer and a tft display. I hope to use a 2.8in st7789 tft-lcd to display the movement of the radar and the detected objects. I can't seem to make it work though, I have this code in processing ide that displays the moving radar on my laptop

import processing.serial.*;
import java.awt.event.KeyEvent;
import java.io.IOException;

Serial myPort;
String angle = "";
String distance = "";
String data = "";
String noObject;
float pixsDistance;
int iAngle, iDistance;
int index1 = 0;
int index2 = 0;
PFont orcFont;

void setup() {
  size(1280, 720);
  smooth();
  myPort = new Serial(this, "COM10", 9600);
  myPort.bufferUntil('.');
}

void draw() {
  fill(98, 245, 31);
  noStroke();
  fill(0, 4);
  rect(0, 0, width, height - height * 0.065);
  
  fill(98, 245, 31);
  drawRadar();
  drawLine();
  drawObject();
  drawText();
}

void serialEvent(Serial myPort) {
  data = myPort.readStringUntil('.');
  data = data.substring(0, data.length() - 1);
  
  index1 = data.indexOf(",");
  angle = data.substring(0, index1);
  distance = data.substring(index1 + 1, data.length());
  
  iAngle = int(angle);
  iDistance = int(distance);
}

void drawRadar() {
  pushMatrix();
  translate(width / 2, height - height * 0.074);
  noFill();
  strokeWeight(2);
  stroke(98, 245, 31);
  arc(0, 0, (width - width * 0.0625), (width - width * 0.0625), PI, TWO_PI);
  arc(0, 0, (width - width * 0.27), (width - width * 0.27), PI, TWO_PI);
  arc(0, 0, (width - width * 0.479), (width - width * 0.479), PI, TWO_PI);
  arc(0, 0, (width - width * 0.687), (width - width * 0.687), PI, TWO_PI);
  line(-width / 2, 0, width / 2, 0);
  line(0, 0, (-width / 2) * cos(radians(30)), (-width / 2) * sin(radians(30)));
  line(0, 0, (-width / 2) * cos(radians(60)), (-width / 2) * sin(radians(60)));
  line(0, 0, (-width / 2) * cos(radians(90)), (-width / 2) * sin(radians(90)));
  line(0, 0, (-width / 2) * cos(radians(120)), (-width / 2) * sin(radians(120)));
  line(0, 0, (-width / 2) * cos(radians(150)), (-width / 2) * sin(radians(150)));
  line((-width / 2) * cos(radians(30)), 0, width / 2, 0);
  popMatrix();
}

void drawObject() {
  pushMatrix();
  translate(width / 2, height - height * 0.074);
  pixsDistance = iDistance * ((height - height * 0.1666) * 0.025);
  
  if (iDistance < 150) {
    // Calculate the dot size based on the distance
    float dotSize = map(iDistance, 0, 150, 60, 10);
    
    float x = pixsDistance * cos(radians(iAngle));
    float y = -pixsDistance * sin(radians(iAngle));
    
    noStroke();
    fill(255, 10, 10);
    ellipse(x, y, dotSize, dotSize);
  }
  
  popMatrix();
}

void drawLine() {
  pushMatrix();
  strokeWeight(9);
  stroke(30, 250, 60);
  translate(width / 2, height - height * 0.074);
  float x = (height - height * 0.12) * cos(radians(iAngle));
  float y = -(height - height * 0.12) * sin(radians(iAngle));
  point(x, y);
  popMatrix();
}

void drawText() {
  pushMatrix();
  if (iDistance > 150) {
    noObject = "Out of Range";
  } else {
    noObject = "In Range";
  }
  
  fill(0, 0, 0);
  noStroke();
  rect(0, height - height * 0.0648, width, height);
  fill(98, 245, 31);
  textSize(25);
  text("25cm", width - width * 0.3854, height - height * 0.0833);
  text("50cm", width - width * 0.281, height - height * 0.0833);
  text("100cm", width - width * 0.177, height - height * 0.0833);
  text("150cm", width - width * 0.0729, height - height * 0.0833);
  textSize(40);
  text("Object: " + noObject, width - width * 0.875, height - height * 0.0277);
  text("Angle: " + iAngle + " °", width - width * 0.48, height - height * 0.0277);
  text("Distance: ", width - width * 0.30, height - height * 0.0277);
  
  if (iDistance < 150) {
    text("        " + iDistance + " cm", width - width * 0.225, height - height * 0.0277);
  }
  
  textSize(25);
  fill(98, 245, 60);
  translate((width - width * 0.4994) + width / 2 * cos(radians(30)), (height - height * 0.0907) - width / 2 * sin(radians(30)));
  rotate(-radians(-60));
  text("30°", 0, 0);
  resetMatrix();
  translate((width - width * 0.503) + width / 2 * cos(radians(60)), (height - height * 0.0888) - width / 2 * sin(radians(60)));
  rotate(-radians(-30));
  text("60°", 0, 0);
  resetMatrix();
  translate((width - width * 0.507) + width / 2 * cos(radians(90)), (height - height * 0.0833) - width / 2 * sin(radians(90)));
  rotate(radians(0));
  text("90°", 0, 0);
  resetMatrix();
  translate(width - width * 0.513 + width / 2 * cos(radians(120)), (height - height * 0.07129) - width / 2 * sin(radians(120)));
  rotate(radians(-30));
  text("120°", 0, 0);
  resetMatrix();
  translate((width - width * 0.5104) + width / 2 * cos(radians(150)), (height - height * 0.0574) - width / 2 * sin(radians(150)));
  rotate(radians(-60));
  text("150°", 0, 0);
  popMatrix();
}

How do I incorporate this to my existing arduino ide code?

// Includes the Servo and lcd library
#include <Servo.h> 



// Defines Tirg and Echo pins of the Ultrasonic Sensor
const int trigPin = 10;
const int echoPin = 9;

//Defines piezo pin
const int piezoPin = 8;

// Variables for the duration and the distance
long duration;
int distance;


int notes[] = {1000, 2000, 3000, 4000, 5000}; // Enter here the notes you like

Servo myServo; // Creates a servo object for controlling the servo motor

void setup() {
  pinMode(trigPin, OUTPUT); // Sets the trigPin as an Output
  pinMode(echoPin, INPUT); // Sets the echoPin as an Input
  Serial.begin(9600);
  myServo.attach(12); // Defines on which pin is the servo motor attached
}

void loop() {
  
  // rotates the servo motor from 15 to 165 degrees
  for(int i=0;i<=180;i++){  
  myServo.write(i);

  distance = calculateDistance();// Calls a function for calculating the distance measured by the Ultrasonic sensor for each degree
  
  //beep sequence
  if(distance > 150){
    noTone(piezoPin);
     delay(10);
    noTone(piezoPin);
    delay(30);
  }
  else if (distance <= 150 && distance > 100){
    tone(piezoPin, notes[1]);
     delay(10);
    noTone(piezoPin);
    delay(30);
  }
  else if (distance <= 100 && distance > 50){
    tone(piezoPin,notes[2]);
     delay(10);
    noTone(piezoPin);
    delay(30);
  }
  else if (distance <= 50 && distance > 25){
    tone(piezoPin,notes[3]);
     delay(10);
    noTone(piezoPin);
    delay(30);
  }
  else {
    tone(piezoPin,notes[4]);
     delay(10);
    noTone(piezoPin);
    delay(30);
  }
     
      
  Serial.print(i); // Sends the current degree into the Serial Port
  Serial.print(","); // Sends addition character right next to the previous value needed later in the Processing IDE for indexing
  Serial.print(distance); // Sends the distance value into the Serial Port
  Serial.print("."); // Sends addition character right next to the previous value needed later in the Processing IDE for indexing
  }
  // Repeats the previous lines from 165 to 15 degrees
  for(int i=180;i>0;i--){  
  myServo.write(i);
 
  distance = calculateDistance();
  if(distance > 150){
    noTone(piezoPin);
    delay(10);
    noTone(piezoPin);
    delay(30);
  }
  else if (distance <= 150 && distance > 100){
    tone(piezoPin, notes[1]);
     delay(10);
    noTone(piezoPin);
    delay(30);
  }
  else if (distance <= 100 && distance > 50){
    tone(piezoPin,notes[2]);
     delay(10);
    noTone(piezoPin);
    delay(30);
  }
  else if (distance <= 50 && distance > 25){
    tone(piezoPin,notes[3]);
     delay(10);
    noTone(piezoPin);
    delay(30);
  }
  else {
    tone(piezoPin,notes[4]);
    delay(10);
    noTone(piezoPin);
    delay(30);
  }
     
  Serial.print(i);
  Serial.print(",");
  Serial.print(distance);
  Serial.print(".");
  
  }
}
// Function for calculating the distance measured by the Ultrasonic sensor
int calculateDistance(){ 
  
  digitalWrite(trigPin, LOW); 
  delayMicroseconds(2);
  // Sets the trigPin on HIGH state for 10 micro seconds
  digitalWrite(trigPin, HIGH); 
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  duration = pulseIn(echoPin, HIGH); // Reads the echoPin, returns the sound wave travel time in microseconds
  //U(m/s)=dX(m)/dT(s) 
  //in this case Duration(time)= 2*Distance/SpeedOfSound=> 
  //Distance=SpeedOfSound*Duration/2
  // In dry air at 20 °C, the speed of sound is 343.2 m/s or 0.003432 m/Microsecond or 0,03434 cm/Microseconds
  distance= duration*0.034/2; 
  return distance;
}

I've tried to code it, but nothing appears, screen flickers, and there are no colors.

0 Answers0