Serial indput from arduino

edited July 2014 in Arduino

I cant get my instrument to work :-(

I have got this instrument to work, with mouseX in the lines (78 and 79) Now i have tried to use inByte instead of mouseX I have got a test program running with println. writing the arduino number in the Lower window

the attached program is a mixed program, doing all but moving the meter pin. no errors occure.

  import processing.serial.*;
  Serial myPort;
  float brightness = 0;
  void setup ()
  {
    background (240,200,0);
    float Xverdi;
    float Yverdi;
    float Xverdiextra;
    float Yverdiextra;
    float tal;
    float vinkel;

    int   qrt;
    int   i;
    size(600, 300);   

//  Opsætning af skala i 10 trin fra vinkel 0  
    for (tal = 0; tal < 11; tal = tal+1)
 {
     vinkel=tal*(PI/10);
     Yverdi=(-sin(vinkel))*200;
     Xverdi=(cos(vinkel))*200;
     Yverdiextra=(-sin(vinkel))*230;
     Xverdiextra=(cos(vinkel))*230;    
     line(300+Xverdi, 270+Yverdi, 300+Xverdiextra, 270+Yverdiextra);
  }    
 //  Opsætning af skala i 10 mellemtrin fra vinkel 0  
   for (tal = 0.5; tal < 10.5; tal = tal+1)
 {
     vinkel=tal*(PI/10);
     Yverdi=(-sin(vinkel))*200;
     Xverdi=(cos(vinkel))*200;
     Yverdiextra=(-sin(vinkel))*220;
     Xverdiextra=(cos(vinkel))*220;    
     line(300+Xverdi, 270+Yverdi, 300+Xverdiextra, 270+Yverdiextra);
 }        
 //  Opsætning af skala i 10 mellemtrin fra vinkel 0  
 for (tal = 0; tal < 10; tal = tal+0.1)
 {
     vinkel=tal*(PI/10);
     Yverdi=(-sin(vinkel))*200;
     Xverdi=(cos(vinkel))*200;
     Yverdiextra=(-sin(vinkel))*215;
     Xverdiextra=(cos(vinkel))*215;    
     line(300+Xverdi, 270+Yverdi, 300+Xverdiextra, 270+Yverdiextra);
 }            
 // Den følgende del tager sig af at skrive skalaen på instrumentet
 for (tal = 0; tal < 11; tal = tal+1)
 {
     vinkel=tal*(PI/10);
     Yverdi=(-sin(vinkel))*250;
     Xverdi=(cos(vinkel))*250;
     qrt=10-(round(vinkel*3.1)); 
     //rotate(1);
     textSize(30);
     textAlign(CENTER, CENTER);
     text (qrt, 300+Xverdi, 270+Yverdi);
 }  
 }
 // opsætning af viser til instrument denne del gentages for evigt
     float Xverdi;
     float Yverdi;
     float inByte=0;
     void draw ()
 {
 // ***************************************************************************
 //      Her skal indsættes en del der henter fra microcontroler og 
 //      Tilpasser til det rette format
 //      Husk også at rette i det punkt hvor Enheden skrives på
          myPort = new Serial (this, "COM7", 9600);
          myPort.bufferUntil ('\n');
          inByte = myPort.read();
         // ***************************************************************************
          stroke(240,200,0);  
          fill (240,200,0);
          ellipse (300, 270, 400, 400);
          Yverdi=(-sin((PI/598)*inByte))*195; //i øjeblikket er max sat til 600
          Xverdi=(cos((PI/598)*inByte))*195;_
          stroke(0);
          strokeWeight(4);
          line (302, 270, Xverdi+302, Yverdi+270); 
   }

Answers

  • edited July 2014

    Siger med det samme jeg er ny her, og jeg ejer ikke en adrduino så kan ik teste det.

    Men tænker måske du ikke skal starte ny serial forbindelse hele tiden i draw og bare sæt den en gang i setup istedet.

    fra draw
    myPort = new Serial (this, "COM7", 9600);

    til setup

    og måske hvis du arbejder med små tal(ikke 0-600) vil du slet ikke kunne se nogen forskel.

    og self som der også står i kommentarne, tjek at det er den rigtige com port den er sat til.

    bare de fejl kilder jeg kunne komme på best of luck

  • edited July 2014
    import processing.serial.*;
    Serial myPort;
    float brightness = 0;
    
    void setup ()
    {
      background (240, 200, 0);
      float Xverdi;
      float Yverdi;
      float Xverdiextra;
      float Yverdiextra;
      float tal;
      float vinkel;
    
      int   qrt;
      int   i;
      size(600, 300);   
      myPort = new Serial (this, "COM7", 9600);
      //  Opsætning af skala i 10 trin fra vinkel 0  
      for (tal = 0; tal < 11; tal = tal+1)
      {
        vinkel=tal*(PI/10);
        Yverdi=(-sin(vinkel))*200;
        Xverdi=(cos(vinkel))*200;
        Yverdiextra=(-sin(vinkel))*230;
        Xverdiextra=(cos(vinkel))*230;    
        line(300+Xverdi, 270+Yverdi, 300+Xverdiextra, 270+Yverdiextra);
      }    
      //  Opsætning af skala i 10 mellemtrin fra vinkel 0  
      for (tal = 0.5; tal < 10.5; tal = tal+1)
      {
        vinkel=tal*(PI/10);
        Yverdi=(-sin(vinkel))*200;
        Xverdi=(cos(vinkel))*200;
        Yverdiextra=(-sin(vinkel))*220;
        Xverdiextra=(cos(vinkel))*220;    
        line(300+Xverdi, 270+Yverdi, 300+Xverdiextra, 270+Yverdiextra);
      }        
      //  Opsætning af skala i 10 mellemtrin fra vinkel 0  
      for (tal = 0; tal < 10; tal = tal+0.1)
      {
        vinkel=tal*(PI/10);
        Yverdi=(-sin(vinkel))*200;
        Xverdi=(cos(vinkel))*200;
        Yverdiextra=(-sin(vinkel))*215;
        Xverdiextra=(cos(vinkel))*215;    
        line(300+Xverdi, 270+Yverdi, 300+Xverdiextra, 270+Yverdiextra);
      }            
      // Den følgende del tager sig af at skrive skalaen på instrumentet
      for (tal = 0; tal < 11; tal = tal+1)
      {
        vinkel=tal*(PI/10);
        Yverdi=(-sin(vinkel))*250;
        Xverdi=(cos(vinkel))*250;
        qrt=10-(round(vinkel*3.1)); 
        //rotate(1);
        textSize(30);
        textAlign(CENTER, CENTER);
        text (qrt, 300+Xverdi, 270+Yverdi);
      }
    }
    // opsætning af viser til instrument denne del gentages for evigt
    float Xverdi;
    float Yverdi;
    float inByte=0;
    void draw ()
    {
      // ***************************************************************************
      //      Her skal indsættes en del der henter fra microcontroler og 
      //      Tilpasser til det rette format
      //      Husk også at rette i det punkt hvor Enheden skrives på
      if ( myPort.available() > 0) {  // If data is available,
        inByte = myPort.read();
        println(inByte);
      }
      // ***************************************************************************
      stroke(240, 200, 0);  
      fill (240, 200, 0);
      ellipse (300, 270, 400, 400);
      Yverdi=(-sin((PI/598)*inByte))*195; //i øjeblikket er max sat til 600
      Xverdi=(cos((PI/598)*inByte))*195;
      stroke(0);
      strokeWeight(4);
      line (302, 270, Xverdi+302, Yverdi+270);
    }
    
  • thank you Jellyfish

    I do only send a 127 from the arduino so the value should be within a byte

    The serial port I am using is the same used when programing the arduino. only 2 ports are shown in the arduino, and when i use COM7 in the test program i get my "127".

    the program send did work as the old one :-)

  • forstår ikke.. så det virker? ellers har jeg lige ændret lidt i koden oven over.

  • Hej Jellyfish

    Den serielle del virker stadig ikke. pilen på instrumentet bevæger sig stadig ikke jeg har lige set, at den virkede forkert men nu har jeg skiftet de -sin((PI til -sin((PI og sat inByteInt til 166 for at vise hvordan det skal se ud når jeg får en byte ind

    void draw ()
    {
      inByteInt=166;
      stroke(240, 200, 0); 
      fill (240, 200, 0);
      ellipse (300, 270, 400, 400);
      Yverdi=(sin((PI/127)*inByteInt))*195; //i øjeblikket er max sat til 600
      Xverdi=(cos((PI/127)*inByteInt))*195;
      stroke(0);
      strokeWeight(4);
      line (302, 270, Xverdi+302, Yverdi+270);
    }
    
    void serialEvent(Serial myPort) {
      inByte = myPort.readString();
      inByteInt = Integer.parseInt(inByte);
      println(inByte);
    }  
    
  • edited July 2014

    nonsense message deleted

  • Hej Jellyfish

    Den serielle del virker stadig ikke. pilen på instrumentet bevæger sig stadig ikke. Jeg har lige set, at den virkede forkert, men nu har jeg skiftet de "-sin((PI" til "-sin((PI" og sat inByteInt til 166 for at vise hvordan det skal se ud når jeg får en byte ind.

    void draw ()
    {
      inByteInt=166;
      stroke(240, 200, 0); 
      fill (240, 200, 0);
      ellipse (300, 270, 400, 400);
      Yverdi=(sin((PI/127)*inByteInt))*195; //i øjeblikket er max sat til 600
      Xverdi=(cos((PI/127)*inByteInt))*195;
      stroke(0);
      strokeWeight(4);
      line (302, 270, Xverdi+302, Yverdi+270);
    }
    
    void serialEvent(Serial myPort) {
      inByte = myPort.readString();
      inByteInt = Integer.parseInt(inByte);
      println(inByte);
    }  
    
  • Hej Jellyfish

    Den serielle del virker stadig ikke. pilen på instrumentet bevæger sig stadig ikke. Jeg har lige set, at den virkede forkert, men nu har jeg skiftet de "-sin((PI" til "-sin((PI" og sat inByteInt til 166 for at vise hvordan det skal se ud når jeg får en byte ind.

    void draw ()
    {
      inByteInt=166;
      stroke(240, 200, 0); 
      fill (240, 200, 0);
      ellipse (300, 270, 400, 400);
      Yverdi=(sin((PI/127)*inByteInt))*195; //i øjeblikket er max sat til 600
      Xverdi=(cos((PI/127)*inByteInt))*195;
      stroke(0);
      strokeWeight(4);
      line (302, 270, Xverdi+302, Yverdi+270);
    }
    
    void serialEvent(Serial myPort) {
      inByte = myPort.readString();
      inByteInt = Integer.parseInt(inByte);
      println(inByte);
    }  
    
  • Answer ✓

    Har du prøvet et af de eksempler der kommer med processing og fået det til at virke? så kan vi finde ud af om det er koden det er galt. prøv Filer -> exampels -> serial -> simple read

  • Hej Jellyfish

    jeg har bygget mit program på et jeg lånte på processing, men det har jeg smadret

    Dette program virker, Skriver i meddeleses feltet og farver firkanten.

    jeg vender tilbage i aften, når jeg har prøvet at tilpasse det

    import processing.serial.*;
    
    Serial port;  // Create object from Serial class
    int val; // Data received from the serial port
        void setup()  
    {
     size(200, 200);
     frameRate(10);
     // Open the port that the board is connected to and use the same speed (9600 bps)
     port = new Serial(this, "COM7", 9600);
    }
        void draw()
    {  
    val=0;
     if (0 < port.available()) {  // If data is available,
       val = port.read();    // read it and store it in val
       println(val);
     }
          background(255);   // Set background to white
     if (val == 0) {    // If the serial value is 0,
       fill(0);    // set fill to black
     }  
     else {        // If the serial value is not 0,
       fill(204);       // set fill to light gray
     }
     rect(50, 50, 100, 100);
     }
    
  • edited July 2014 Answer ✓

    ok har ændret koden i comment 2 igen. Hvis det ikke virker må jeg nok indrømme jeg er for noob til at kunne hjælpe.

    Prøv også at sende som byte fra arduino

    Serial.print(166, BYTE); 
    
  • Hej Jellyfish

    Jeg prøvede at trække mit program over i det nye eksempel jeg viste dig i min sidste kommentar og nu virker det rimeligt. viseren flakker meget men det regner jeg med ligger i adkonverteringen, og den programering jeg har lavet der.

    Du skal have mange tak for din hjælp!

    Der er imidlertid lige et spørgsmål mere :-) hvis du gider

    Jeg definere alle mine variable i starten af programmet men den vil ikke accepterer Xverdi og Yverdi når jeg kommer ned i draw

    // *************************************************************
    // Initialisation off serial port 
    import processing.serial.*;
    Serial port;  // Create object from Serial class
    int val; // Data received from the serial port
    // *************************************************************
    void setup()  
    {
      background (240, 200, 0);
      size(600, 300);
     frameRate(10);
      float Xverdi;
      float Yverdi;
      float Xverdiextra;
      float Yverdiextra;
      float tal;
      float vinkel;
      int   qrt;
      int   i;
     // Open the port that the board is connected to and use the same speed (9600 bps)
     port = new Serial(this, "COM7", 9600);
      //  Opsætning af skala i 10 trin fra vinkel 0 
      for (tal = 0; tal < 11; tal = tal+1)
      {
        vinkel=tal*(PI/10);
        Yverdi=(-sin(vinkel))*200;
        Xverdi=(cos(vinkel))*200;
        Yverdiextra=(-sin(vinkel))*230;
        Xverdiextra=(cos(vinkel))*230;   
        line(300+Xverdi, 270+Yverdi, 300+Xverdiextra, 270+Yverdiextra);
      }   
     //  Opsætning af skala i 10 mellemtrin fra vinkel 0 
      for (tal = 0.5; tal < 10.5; tal = tal+1)
      {
        vinkel=tal*(PI/10);
        Yverdi=(-sin(vinkel))*200;
        Xverdi=(cos(vinkel))*200;
        Yverdiextra=(-sin(vinkel))*220;
        Xverdiextra=(cos(vinkel))*220;   
        line(300+Xverdi, 270+Yverdi, 300+Xverdiextra, 270+Yverdiextra);
      }  
      //  Opsætning af skala i 10 mellemtrin fra vinkel 0 
      for (tal = 0; tal < 10; tal = tal+0.1)
      {
        vinkel=tal*(PI/10);
        Yverdi=(-sin(vinkel))*200;
        Xverdi=(cos(vinkel))*200;
        Yverdiextra=(-sin(vinkel))*215;
        Xverdiextra=(cos(vinkel))*215;   
        line(300+Xverdi, 270+Yverdi, 300+Xverdiextra, 270+Yverdiextra);
      }           
      // Den følgende del tager sig af at skrive skalaen på instrumentet
      for (tal = 0; tal < 11; tal = tal+1)
      {
        vinkel=tal*(PI/10);
        Yverdi=(-sin(vinkel))*250;
        Xverdi=(cos(vinkel))*250;
        qrt=10-(round(vinkel*3.1));
        //rotate(1);
        textSize(30);
        textAlign(CENTER, CENTER);
        text (qrt, 300+Xverdi, 270+Yverdi);
      }  
    }
    
    void draw()
    {  
    val=0;
      float Xverdi;
      float Yverdi;
     if (0 < port.available()) {  // If data is available,
       val = port.read();    // read it and store it in val
      stroke(240, 200, 0); 
      fill (240, 200, 0);
      ellipse (300, 270, 400, 400);
      Yverdi=(sin((PI/127)*val))*195; //i øjeblikket er max sat til 600
      Xverdi=(cos((PI/127)*val))*195;
      stroke(0);
      strokeWeight(4);
      line (302, 270, Xverdi+302, Yverdi+270);
     }
    
    
    }
    
  • edited July 2014 Answer ✓

    når du laver en variabel inde under en funktion (her setup) er den variabel lokal dvs. du kan kun få adgang til den variabel under den funktion, den findes ingen andre steder. Men hvis du istedte starter variablen udenfor en funktion (oftest helt i toppen /istarten) så er det en "global" variabel som kan ændres i hvilken somhelst funktion. din "int val;" er global.

    Nice det fungerer! :)

Sign In or Register to comment.