lidar dla gosi

 avatar
unknown
c_cpp
2 months ago
2.3 kB
13
Indexable
import processing.serial.*; // Importuj bibliotekę do komunikacji szeregowej

Serial myPort; // Obiekt do komunikacji szeregowej
ArrayList<Integer> distances = new ArrayList<Integer>(); // Lista do przechowywania odległości

void setup() {
  size(800, 800); // Ustaw rozmiar okna
  String portName = Serial.list()[1]; // Wybierz pierwszy dostępny port
  myPort = new Serial(this, portName, 9600); // Otwórz port szeregowy
}

void draw() {
  // Sprawdź, czy są dostępne dane
  if (myPort.available() > 0) {
    String val = myPort.readStringUntil('\n'); // Odczytaj dane do nowej linii
    if (val != null) {
      // Przykład: "Number: 0 Distance: 48"
      String[] parts = split(trim(val), ' '); // Podziel dane na części
      if (parts.length == 4) {
        int currentNumber = int(parts[1]); // Odczytaj numer
        int distance = int(parts[3]); // Odczytaj odległość
        addDistance(currentNumber, distance); // Dodaj odległość do listy
      }
    }
  }
}

void addDistance(int number, int distance) {
  // Dodaj odległość do listy
  distances.add(distance);

  // Jeśli numer wynosi 0, narysuj mapę
  if (number == 0) {
    drawMap();
    distances.clear(); // Wyczyść listę po narysowaniu mapy
  }
}

void drawMap() {
  background(255); // Ustaw tło na białe
  translate(width / 2, height / 2); // Przesuń układ współrzędnych do środka okna
  stroke(0); // Ustaw kolor konturu na czarny
  noFill(); // Wyłącz wypełnienie

  // Rysuj pomieszczenie
  beginShape();
  for (int i = 0; i < distances.size(); i++) {
    float angle = map(i, 0, distances.size(), 0, TWO_PI); // Oblicz kąt dla każdego pomiaru
    float x = cos(angle) * distances.get(i); // Oblicz współrzędną x
    float y = sin(angle) * distances.get(i); // Oblicz współrzędną y
    vertex(x, y); // Dodaj wierzchołek do kształtu
  }
  endShape(CLOSE); // Zamknij kształt

  // Dodaj etykiety dla pomiarów
  for (int i = 0; i < distances.size(); i++) {
    float angle = map(i, 0, distances.size(), 0, TWO_PI);
    float x = cos(angle) * (distances.get(i) + 10); // Przesuń etykietę na zewnątrz
    float y = sin(angle) * (distances.get(i) + 10);
    textSize(12);
    textAlign(CENTER);
    text(distances.get(i), x, y); // Wyświetl odległość
  }
}
Editor is loading...
Leave a Comment