Fórum témák

» Több friss téma
Cikkek » HMC6352 iránytűmodul - I2C (TWI) használata AVR-rel
HMC6352 iránytűmodul - I2C (TWI) használata AVR-rel
Szerző: Fizikus, idő: Nov 27, 2010, Olvasva: 23919, Oldal olvasási idő: kb. 1 perc
Lapozás: OK   6 / 9

Irányadatok grafikus megjelenítése Processing-gel I.

Az alábbi Processing programmal, az AVR által a soros porton keresztül küldött adatokat feldolgozva,  a képernyőn megjeleníthetünk egy az iránytűmodul irányszögét mutató nyilat

(a videóhoz kattints a képre)

  1. import processing.serial.*;   // soros portokat kezelo konyvtar importalasa
  2.  
  3. int graphPosition = 0;       // nyil kezdeti poziciojanak megadasa
  4.  
  5. // valtozok definialasa
  6. int [ ] vals = new int[1];      
  7. float position;                    
  8.  
  9. Serial myPort;                    
  10. boolean madeContact = false;  
  11.  
  12. void setup()
  13. {
  14.     background(255); // hatterszin (feher) beallitasa
  15.     size(300, 300);     // ablak merete
  16.     position = width/2;    // calculate position:
  17.  
  18. // a Processing a 2. betukeszletenek importalasa:
  19.   PFont myFont = createFont(PFont.list()[2], 14);
  20.   textFont(myFont);
  21.  
  22. // az USB-TTL atalakito COM1 port sorszama: [0]
  23.   myPort = new Serial(this, Serial.list()[0], 9600);
  24.  
  25. // a soros porton beerkezo adatokat "ujsor" karakterig puffereljuk
  26.   myPort.bufferUntil('\r');
  27.   // grafikus kirajzolas beallitasa:
  28.   noStroke();
  29.   smooth();
  30. }
  31.  
  32. void draw()
  33. {
  34.   background(204);
  35.   text("N",145,110);
  36.   text("|",150,120);
  37.   text("S",146,200);
  38.   text("|",150,187);
  39.   text("E",192,155);
  40.   text("_",180,149);
  41.   text("W",95,155);
  42.   text("_",113,149);
  43.  
  44.   // ha az AVR-tol nem erkezik valasz, akkor addig kuldjuk ujra az `m`-et, amig valasz nem erkezik
  45.   if (madeContact == false)
  46.   {
  47.     myPort.write('m');
  48.   }
  49.  
  50.   // az iranytumodul altal mert iranyszog atkonvertalasa fokrol radianra
  51.   float a = 2*PI*vals[0]/3600;
  52.   // nyil kirajzolasa a mert iranyszoggel:
  53.   drawArrow(a);
  54. }
  55.  
  56. void drawArrow(float a)   // nyilrajzolo rutin
  57. {
  58.   translate(width/2, height/2);
  59.   // vilagoskek kor kirajzolasa
  60.   fill(80,200,230);
  61.   ellipse(0,0,50,50);
  62.   // nyil szinenek (fekete) megadasa:
  63.   fill(0);
  64.   // iranyszoggel torteno forgatas
  65.   rotate(a);
  66.   // egy negyzetbol es egy haromszogbol allo nyil megrajzolasa:
  67.   triangle(-15, 0, 0, -20, 15, 0);
  68.   rect(-5,0, 10,20);
  69. }
  70.  
  71. void serialEvent(Serial myPort)
  72. {
  73.   // ha van a soros porton keresztul bejovo adat, akkor a kapcsolat letrejott:
  74.   madeContact = true;
  75.   // a bejovo adatokat beolvassuk egy pufferbe, amig egy ujsor karakter nem erkezik:
  76.   String myString = myPort.readStringUntil('\n');
  77.   // ha a bejovo karakterek az ujsor karaktertol kulonbozoek, akkor a bejovo karaktereket a vesszoknel szetvalasztjuk es ujra szamma alakitjuk
  78.   if (myString != null)
  79.   {
  80.     myString = trim(myString);
  81.     int sensors[] = int(split(myString, ','));
  82.     if (sensors.length >= 1)
  83.     {
  84.       vals[0] = sensors[0];
  85.       delay(100);
  86.    // a mert iranyszogertek kiirasa a kepernyore:
  87.       println(sensors[0]);  
  88.    // `m` karakter kuldese az AVR-nek, hogy vegezzen el egy uj merest
  89.       myPort.write('m');
  90.     }
  91.  }
  92. }


A cikk még nem ért véget, lapozz!
Következő: »»   6 / 9
Értékeléshez bejelentkezés szükséges!
Bejelentkezés

Belépés

Hirdetés
XDT.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem