import processing.serial.*; // soros portokat kezelo konyvtar importalasa
int graphPosition = 0; // nyil kezdeti poziciojanak megadasa
// valtozok definialasa
int [ ] vals = new int[1];
float position;
Serial myPort;
boolean madeContact = false;
void setup()
{
background(255); // hatterszin (feher) beallitasa
size(300, 300); // ablak merete
position = width/2; // calculate position:
// a Processing a 2. betukeszletenek importalasa:
PFont myFont = createFont(PFont.list()[2], 14);
textFont(myFont);
// az USB-TTL atalakito COM1 port sorszama: [0]
myPort = new Serial(this, Serial.list()[0], 9600);
// a soros porton beerkezo adatokat "ujsor" karakterig puffereljuk
myPort.bufferUntil('\r');
// grafikus kirajzolas beallitasa:
noStroke();
smooth();
}
void draw()
{
background(204);
text("N",145,110);
text("|",150,120);
text("S",146,200);
text("|",150,187);
text("E",192,155);
text("_",180,149);
text("W",95,155);
text("_",113,149);
// ha az AVR-tol nem erkezik valasz, akkor addig kuldjuk ujra az `m`-et, amig valasz nem erkezik
if (madeContact == false)
{
myPort.write('m');
}
// az iranytumodul altal mert iranyszog atkonvertalasa fokrol radianra
float a = 2*PI*vals[0]/3600;
// nyil kirajzolasa a mert iranyszoggel:
drawArrow(a);
}
void drawArrow(float a) // nyilrajzolo rutin
{
translate(width/2, height/2);
// vilagoskek kor kirajzolasa
fill(80,200,230);
ellipse(0,0,50,50);
// nyil szinenek (fekete) megadasa:
fill(0);
// iranyszoggel torteno forgatas
rotate(a);
// egy negyzetbol es egy haromszogbol allo nyil megrajzolasa:
triangle(-15, 0, 0, -20, 15, 0);
rect(-5,0, 10,20);
}
void serialEvent(Serial myPort)
{
// ha van a soros porton keresztul bejovo adat, akkor a kapcsolat letrejott:
madeContact = true;
// a bejovo adatokat beolvassuk egy pufferbe, amig egy ujsor karakter nem erkezik:
String myString = myPort.readStringUntil('\n');
// ha a bejovo karakterek az ujsor karaktertol kulonbozoek, akkor a bejovo karaktereket a vesszoknel szetvalasztjuk es ujra szamma alakitjuk
if (myString != null)
{
myString = trim(myString);
int sensors[] = int(split(myString, ','));
if (sensors.length >= 1)
{
vals[0] = sensors[0];
delay(100);
// a mert iranyszogertek kiirasa a kepernyore:
println(sensors[0]);
// `m` karakter kuldese az AVR-nek, hogy vegezzen el egy uj merest
myPort.write('m');
}
}
}