Processing/ControlP5 > Serial 전환 > Slidebar/Button 사용

8913 단어 processing#migrated
운영 환경
Processing 3.1.1
ControlP5ライブラリ
Windows 8.1 pro (64bit)

참고 ぃ tp // m / a ks pect / / ms / 6 a 574 12181c00125d40
  • slider에서 COM 포트 변경
  • Button 누르면 포트 오픈
  • COM으로부터의 통신을 콘솔 출력

  • code


    import processing.serial.*;
    import controlP5.*;
    
    Serial myPort;
    
    ControlP5 slider;
    int sliderValue;
    int numSerial = 5;
    int curSerial = -1;
    
    ControlP5 btnOpen;
    
    void setup() {
      size(500,500);
      slider = new ControlP5(this);
      slider.addSlider("COM")
        .setRange(-1, numSerial - 1)
        .setValue(-1)
        .setPosition(50,40)
        .setSize(200, 20)
        .setNumberOfTickMarks(numSerial + 1);
    
      btnOpen = new ControlP5(this);
      btnOpen.addButton("openPort")
        .setLabel("Open")
        .setPosition(275, 40)
        .setSize(100, 30);    
    }
    
    void controlEvent(ControlEvent theEvent) {
      if (theEvent.isController()) {
         if (theEvent.getName() == "COM") {
           if (curSerial != slider.getValue("COM")) {
             curSerial = (int)slider.getValue("COM");
           }
         }
      }
    }
    
    void serialEvent(Serial myPort) { 
       String mystr = myPort.readStringUntil('\n');
       mystr = trim(mystr);
       println(mystr);
    }
    
    void openPort() {
       println("Open Port"); 
       if (myPort != null) {
          myPort.stop(); 
       }
       myPort = new Serial(this, Serial.list()[(int)curSerial], 9600);
       myPort.bufferUntil('\n');
     }
    
    void draw() {
      background(0);  
    }
    

    실행 환경



    실행 환경
  • 시리얼 수신측: processing를 움직이는 PC (Windows 8.1pro)
  • 시리얼 송신 측: TeraTerm으로 송신 (Windows 7 pro)

  • 상기 2개의 단말을 시리얼의 케이블(크로스)로 접속한다.
    여기에서는 VM 이미지 2개로 named pipe를 사용하여 동작을 했다.
    송신측의 TeraTerm에서는 「설정 > 단말」에서 [CR]을 [CR+LF]로 변경한다. LF를 종단으로 인식하기 위하여.

    실행 예


  • Slider를 통신하려는 COM 포트로 이동
  • OPEN을 누르십시오
  • 송신자로부터 文字列+Enter
  • Processing 소프트웨어의 콘솔에 문자열이 표시됩니다.


  • COM1 연결시





    COM3 연결 시





    보충



    사실은 다른 일기



    사실 슬라이더 변경 시 포트 오픈을 하고 싶었는데 알 수 없는 에러가 나왔기 때문에 버튼을 추가했다.
    슬라이더 1개로 오픈까지 할 수 없다면, 슬라이더를 사용하는 의미는 없을 것 같다.

    TeraTerm의 함정



    TeraTerm은 송신을 「CR+LF」로 해 잊으면 실패하므로, 확인이 필요.

    자바



    자바는 아직 잘 모르겠다. 다음은
    if (myPort != null) {
       myPort.stop(); 
    }
    

    GC를 움직이기 위해 다음과 같이하는 것이 좋을까?
    if (myPort != null) {
       myPort.stop(); 
       myPort = null; // for GC
    }
    

    나중에 myPort = new Serial ()하고 있기 때문에 GC는 움직이는 것일까?

    좋은 웹페이지 즐겨찾기