Salve da ieri sto provando a creare una sorta di "radar" dove utilizzando un sensore ad ultrasuoni( montato su un servomotore) si venga a creare una sorta di mappa degli oggetti prendenti nel raggio di 10 cm. Sto riscontrando un problema riguardo il SerialEvent() di Processing poichè mi viene disabilitato a causa di un valore Null.
Error, disabling SerialEvent() for COM3
null
Allego i due codici ( non fate caso al codice processing che non disegna bene il point poichè vorrei prima risolvere questo problema prima di implementare completamente il codice):
Arduino :
/*
Radar con sensore ad ultrasuoni montato su servomotore da modellismo.
*/
#include <Servo.h>
Servo myservo;
int triggerPort = 9;
int echoPort = 10;
void setup()
{
Serial.begin(9600);
myservo.attach(8);
pinMode( triggerPort, OUTPUT );
pinMode( echoPort, INPUT );
myservo.write(0);
}
void loop()
{
for ( int i = 0; i < 180; i++)
{
myservo.write(i);
//porta bassa l'uscita del trigger
digitalWrite( triggerPort, LOW );
//invia un impulso di 10microsec su trigger
digitalWrite( triggerPort, HIGH );
delayMicroseconds( 10 );
digitalWrite( triggerPort, LOW );
long duration = pulseIn( echoPort, HIGH );
long r = 0.034 * duration / 2;
if (r<10)
{
Serial.print ( r );
Serial.print ('\n');
Serial.print ( i );
Serial.print ('\n');
}
else
{
Serial.print (0);
Serial.print ('\n');
}
}
delay(1000);
}
Non conosco bene Processing, il quale si programma in Java.
Detto questo, se l'evento serialEvent riceve il parametro myPort come seriale, da quello devi leggere. Magari va bene anche myboard, ma dubito:
void serialEvent(Serial myPort){
String inString = myPort.readStringUntil('\n'); // myPort e non myboard
Salve, innanzitutto grazie per le vostre risposte. Ho provato a splittare i valori letti da seriale ma il problema sussisteva ancora, ho eliminato l' "else" nel programma Arduino e ora non mi si presenta più il null . Problema risolto , grazie.
Un'ultima cosa avete qualche consiglio su come posso riportare questi punti sulla semicirconferenza ? Perchè ora i punti creano delle linee orizzontali in base all'oggetto rilevato dal sensore, volendo trasformare queste rette in archi ? non so se mi sono spiegato! Grazie.
ho cancellato il post precedente, leggendo meglio.. credo che sia più idoneo prendere spunto da qui
void setup() {
size (1000, 1000);//dimensione schermo
}
void draw() {
background (0); //sfondo
strokeWeight (1);// larghezza bordo
translate (500, 500);//sposto al centro
stroke(255, 40, 40); // colore bordo
noFill(); //elimino il colore corpo
arc(0, 0, 160, 160, radians (180), radians (180+mouseX/2));//al posto di mouseX/2 mettere
// Distanza che è da mappare
}
arc (coordinate x, coordinate Y, larghezza, altezza, punto di partenza, punto di fine);
con arduino puoi modificare ogni singolo parametro
l'inserimento di "radians" serve per convertire radianti con gradi (puoi non usare radians),
infatti il 180 che ho messo è per fare partile l'arco a sinistra del centro, lo zero è a destra del centro