Skocz do zawartości

Arduino + Processing 3


slon

Pomocna odpowiedź

W tym temacie chciałem się podzielić doświadczeniami związanymi z Processing 3. Temat zamieściłem w dziale arduino z trzech powodów: Po pierwsze faktycznie wykorzystywałem arduino nano i uno do komunikacji między processing zainstalowanym na PC a płytką arduino. Powód drugi do fakty , że processing na początku wydał mi się bardzo podobny do arduino i mam tu na myśli zarówno edytor jak i reference.  Struktura szkicu w processing:

void setup() {
}

void draw() {
}

No i trzeci powód to fakt , że samo środowisko ma w znacznym stopniu ułatwiać wizualizacje danych czy po prostu tworzenie grafiki.

Poniżej prosty przykład z potencjometrem

kwadrat.thumb.gif.ae24a09337ef273173382a3aea117382.gif

Na smartfony z androidem można zainstalować APDE z google play

APDE.thumb.jpg.6ffe486f3c754be9caffeb5a55b3d5a8.jpg

aczkolwiek nie wszystkie biblioteki są dostępne w porównaniu do wersji PC.

Jeżeli ktoś już korzysta lub korzystał z processing niech podzieli się swoimi przemyśleniami.

  • Lubię! 1
Link do komentarza
Share on other sites

Ja do wizualizacji danych ominąłem processing, i skomunikowałem arduino z silnikiem unity 3D. Do arduino żyroskop, na monitorze kostka. Kostka się obracała tak jak obróciłem żyroskop, i na tym można tworzyć ciekawe gry 😉 processingu używam do prezentowania danych 2d. całkiem przejrzysta składnia, dużo wbudowanych narzędzi. Mi się podoba.

 

  • Lubię! 1
Link do komentarza
Share on other sites

@slon wydaje mi się, że Processing jest niedoceniany. Nieczęsto można spotkać projekty zbudowane w oparciu o to środowisko (szczególnie w Polsce), a daje naprawdę dużo możliwości.

14 godzin temu, slon napisał:

Poniżej prosty przykład z potencjometrem

Może wkleisz przykładowy kod takiego programu, aby wszyscy wiedzieli jak to w praktyce wygląda? 😉

Link do komentarza
Share on other sites

pewnie mówisz masz 😉

import processing.serial.*;

int literyH = 50;
int myInt;
float myFloat;
float theta;
int start = 0;

Serial myPort;  // The serial port

void setup() {
  size(300,300);
  myPort = new Serial(this, Serial.list()[1], 9600);
  myPort.clear();
}

void draw() {
  
  textSize(literyH);
  if (myPort.available() > 0) {
    myInt = myPort.read();
    myFloat = map(float(myInt), 33, 255, 10, 180);
    background(0);
    //println(myInt);
    
      fill(myFloat,myFloat*2,myFloat*3); // fiolet
      text("val: " + myInt,width/10, height/5);
    } 
    if (start==1) {
      translate(width/2,height/2);  // Translate to the center
      rotate(theta);   // Rotate by theta
      rect(-26, -26, 52, 52);
      if (myInt >49)
      theta += myFloat/1000;
    } else if (start==0)
    {
      translate(width/2,height/2);  // Translate to the center
      rotate(theta);   // Rotate by theta
      rect(-26, -26, 52, 52);
    }
  }
  
 void mousePressed() {
  if ((start==0) && (mouseX > width/2-26) && (mouseX < width/2+26) 
    && (mouseY > width/2-26) && (mouseY < width/2+26)) {
    start = 1;
    myPort.write(50);
  } else {
    start = 0;
    myPort.write(49);
  }
}

 

Jedyna " trudność" jaka może być przy podłączeniu arduino to wybór poprawnego  portu COM czyli :

myPort = new Serial(this, Serial.list()[1], 9600);

 

Serial.list()[1] nie oznacza , że to jest COM1 w moim wypadku to jest COM4 dla poprawnego określenia pod jakim portem jest arduino najlepiej użyć funkcji 

printArray(Serial.list());

ewentualnie jeżeli pod usb mamy podpięte tylko arduino i żadnych innych urządzeń to będzie to Serial.list()[0]. Jeżeli ktoś będzie tym bardziej zainteresowany to wieczorem mogę pokazać jak to będzie wyglądało. 

  • Lubię! 2
Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Ma potencjał. W jakimś stopniu alternatywa dla Qt z tą różnicą, że Qt może wiele więcej. Ciekawe ile potrzeba czasu na opanowanie tego środowiska. Niestety nie mam czasu aby to sprawdzić osobiście. Gdybym miał czas to zapewne wolałbym go inwestować w Qt.

Link do komentarza
Share on other sites

QT jeszcze trochę poczeka ale na pewno się tym zainteresuje. A co do nauki processing to jest naprawdę obszerny tutorial i sam reference ma sporo przykładów. Poniżej kod do tych pięciu kwadratów, które widać w moim pierwszym poście na ekranie smartfona.


kwadrat[] myKwadrat = new kwadrat[5];

 int[] start = new int[5];
 int[] x = new int[5];
 int[] y = new int[5];
 float s = 0.1;

void setup() {
 size(500,500);
 // kwadrat centralny
 x[0] = width/2;
 y[0] = height/2;
// kwadrat prawy dolny
 x[1] = width-100;
 y[1] = height-100;
// kwadrat lewy gorny
 x[2] = width+100-(width);
 y[2] = height+100-(height);
// kwadrat prawy gorny
 x[3] = width-100;
 y[3] = height+100-(height);
// kwadrat lewy dolny
 x[4] = width+100-(width);
 y[4] = height-100;
 
 background(0);
 for (int i = 0; i <5; i++) {
 myKwadrat[i] = new kwadrat(100,x[i],y[i]);
 }
}

void draw() {
  for (int i = 0; i <5; i++) {
  if (start[i] == 1) myKwadrat[i].move(s);
  myKwadrat[i].display();
  } 
}

class kwadrat {
  color c;
  int x;
  int y;
  float theta;
  int centX;
  int centY;
  int sizeX;
  int sizeY;

 kwadrat (color tempC, int tempX, int tempY) { 
  c = tempC;
  x = tempX;
  y = tempY;
  centX = -37;
  centY = -37;
  sizeX = 74;
  sizeY = 74;
 }
 
 void display() {
   pushMatrix();
   translate(x,y);  // Translate to the center
   rotate(theta);   // Rotate by thet
   fill(c);
   stroke(0);
   rect(centX, centY, sizeX, sizeY);
   popMatrix();
   
 }
 
 float move(float tempTheta) {
    c = 180;
    centX = -26;
    centY = -26;
    sizeX = 52;
    sizeY = 52;
    theta +=tempTheta;
    return theta;   
 }
 void moveStop() {
   c = 100;
   centX = -37;
   centY = -37;
   sizeX = 74;
   sizeY = 74;
   theta = 0.0;
 }
}

void mousePressed() {
  for (int i = 0; i <5; i++) {
  if ((start[i]==0) && (mouseX > x[i]-26) && (mouseX < x[i]+26) 
                 && (mouseY > y[i]-26) && (mouseY < y[i]+26)) {
    start[i] = 1;
    //myPort.write(50);
  } else if ((start[i] == 1) && (mouseX > x[i]-26) && (mouseX < x[i]+26) 
                          && (mouseY > y[i]-26) && (mouseY < y[i]+26)) {
    start[i] = 0;
    myKwadrat[i].moveStop();
    //myPort.write(49);
  }
 }
}

A co do tworzenia gier w processing to próbuję zrobić moda Contry z nesa 🙂 

  • Lubię! 1
Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.