Ciao a tutti,
Sto costruendo un radar con un sensore a ultrasuoni hc-sr04, cercando su internet ho trovato molti esempi di programmi già fatti con processing per creare lo schermo radar; sono tutti molto belli ma quello che mi è piaciuto di più è questo:
Processing:
import processing.serial.*;
int distance;
int angle=0;
int direction=1;
int[] alphaVal = new int[100];
int[] distance2 = new int[100];
int lineSize = 4;
String comPortString;
Serial comPort;
/*---------------------SETUP---------------------------*/
void setup( ) {
size(displayWidth,displayHeight);
smooth();
background(0);
comPort = new Serial(this, "COM9", 9600);
comPort.bufferUntil('\n');
for(int i=0; i<91; i++){
alphaVal[i] = 0;
}
}
/*---------------------DRAW-----------------*/
void draw( ) {
background(0);
for(int i=0; i<91; i++){
alphaVal[i]=alphaVal[i]-4;
if(alphaVal[i]<0){
alphaVal[i]=0;
}
stroke(255,distance2[i],0,alphaVal[i]);
strokeWeight(2);
line(width/2, height, (width/2)-cos(radians(i*2))*(distance2[i]*lineSize), height-sin(radians(i*2))*(distance2[i]*lineSize));
stroke(255);
strokeWeight(1);
ellipse((width/2)-cos(radians(i*2))*(distance2[i]*lineSize), height-sin(radians(i*2))*(distance2[i]*lineSize),5,5);
}
}
void mousePressed(){
sendAngle();
}
void serialEvent(Serial cPort){
comPortString = cPort.readStringUntil('\n');
if(comPortString != null) {
comPortString=trim(comPortString);
distance = int(map(Integer.parseInt(comPortString),1,200,1,height));
drawSonar(angle,distance);
sendAngle();
}
}
/*---------------------------sendAngle() FUNCTION----------------*/
void sendAngle(){
comPort.write(angle+".");
angle=angle+(2*direction);
if(angle>178||angle<1){
direction=direction*-1;
}
}
/*-----------------sketchFullScreen(): Allows for FullScreen view------*/
boolean sketchFullScreen() {
return true;
}
/*----------------- drawSonar(): update the line/dot positions---------*/
void drawSonar(int sonAngle, int newDist){
alphaVal[sonAngle/2] = 180;
distance2[sonAngle/2] = newDist;
}
Arduino:
#include <Servo.h>
Servo servo1;
static const int minAngle = 0;
static const int maxAngle = 180;
int servoAngle;
int servoPos;
int servoPin = 4;
#define echoPin A0
#define trigPin A1
#define LEDPin 13
long duration;
long HR_dist=0;
int HR_angle=0;
int HR_dir=1;
int minimumRange=2;
int maximumRange=500;
/*--------------------SETUP()------------------------*/
void setup() {
Serial.begin (9600);
servo1.attach(servoPin);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(LEDPin, OUTPUT);
}
/*----------------------LOOP()--------------------------*/
void loop() {
if (Serial.available()) {
HR_angle = Serial.parseInt();
if(HR_angle>-1){
servoPos = constrain(map(HR_angle, 0,180,minAngle,maxAngle),minAngle,maxAngle);
servo1.write(servoPos);
getDistance();
}
}
}
/*--------------------getDistance() FUNCTION ---------------*/
void getDistance(){
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
HR_dist = duration/58.2;
if (HR_dist >= maximumRange || HR_dist <= minimumRange){
Serial.println("0");
digitalWrite(LEDPin, HIGH);
} else {
Serial.println(HR_dist);
digitalWrite(LEDPin, LOW);
}
}
Se lo guardate su youtube si chiama: arduino sonic radar
Il mio problema è il seguente:
Ora la schermata di processing è a 180 gradi, io vorrei portarla a 360 ma non ho proprio idea di come fare ![]()
Aiutatemi vi prego!!
Grazie
edit by mod: per favore includi il codice usando gli appositi tag