1

Я написал программу в Processing 2.1.2, чтобы установить связь через последовательный порт между двумя машинами. На моем ноутбуке он работал нормально, но на моем рабочем столе, где доступно несколько последовательных портов, он не обнаруживает мой функциональный последовательный COM-порт.Выбор последовательного COM-порта DropDownList в обработке

Так что теперь я хочу, чтобы они появились на Combo Button, и я смогу выбрать один из них.

Можете ли вы посоветовать мне, как решить эту проблему?

import processing.serial.*; 

String input; 
Serial port; 

void setup() { 
    size(448, 299,P3D); 
    println(Serial.list()); 
    port = new Serial(this,Serial.list()[0], 9600); 
    port.bufferUntil('\n'); 
} 

void draw() { 
    background(0); 
    } 

void serialEvent(Serial port) 
{ 
input = port.readString(); 
if(input != null) { 
    String[] values = split(input, " "); 
    println(values[0]); 
    println(values[1]); 
    println(values[2]); 
    } 
} 
+0

Что ком порты вы получаете на рабочем столе? Кроме того, какой из них является COM-портом последовательного устройства, которое вы хотите использовать? –

+0

@GeorgeProfenza есть три COM-порта, показывающие COM1 COM3 COM4 ... теперь я хочу, чтобы они появлялись в окне, а затем я выбираю функциональный из списка ... Возможно ли это в 'Processing' .. –

+1

Да, это возможно , Вам нужно будет использовать пользовательский интерфейс по вашему выбору (компоненты Swing java или библиотека обработки, например [controlP5] (http://www.sojamo.de/libraries/controlP5/)) –

ответ

2

Как указано в комментарии, можно использовать библиотеку пользовательского интерфейса для отображения выпадающего списка. Сначала вам нужно выбрать библиотеку, например, controlP5, которая очень популярна при обработке. Вы можете использовать Swing с естественным видом & feel или G4P. Это полностью зависит от вас.

После этого должно быть включено подключение списка последовательных портов в раскрывающийся список и открытие последовательного соединения в выпадающем списке прослушивателя/обратного вызова.

пыльник является доказательством концепции эскиза на примере controlP5dropdownlist, который поставляется с библиотекой:

import processing.serial.*; 
import controlP5.*; 

ControlP5 cp5; 
DropdownList serialPortsList; 

Serial serialPort; 
final int BAUD_RATE = 9600; 

void setup() { 
    size(700, 400,P3D); 

    String[] portNames = Serial.list(); 

    cp5 = new ControlP5(this); 
    // create a DropdownList 
    serialPortsList = cp5.addDropdownList("serial ports").setPosition(10, 10).setWidth(200); 
    for(int i = 0 ; i < portNames.length; i++) serialPortsList.addItem(portNames[i], i); 
} 


void controlEvent(ControlEvent theEvent) { 
    // DropdownList is of type ControlGroup. 
    // A controlEvent will be triggered from inside the ControlGroup class. 
    // therefore you need to check the originator of the Event with 
    // if (theEvent.isGroup()) 
    // to avoid an error message thrown by controlP5. 
    if (theEvent.isGroup()) { 
    // check if the Event was triggered from a ControlGroup 
    println("event from group : "+theEvent.getGroup().getValue()+" from "+theEvent.getGroup()); 
    //check if there's a serial port open already, if so, close it 
    if(serialPort != null){ 
     serialPort.stop(); 
     serialPort = null; 
    } 
    //open the selected core 
    String portName = serialPortsList.getItem((int)theEvent.getValue()).getName(); 
    try{ 
     serialPort = new Serial(this,portName,BAUD_RATE); 
    }catch(Exception e){ 
     System.err.println("Error opening serial port " + portName); 
     e.printStackTrace(); 
    } 
    } 
    else if (theEvent.isController()) { 
    println("event from controller : "+theEvent.getController().getValue()+" from "+theEvent.getController()); 
    } 
} 

void draw() { 
    background(128); 
} 

заметить также любое существующее соединение будет закрыто при выборе нового последовательного порта и обработка ошибок открытие последовательного порта обрабатываются, поэтому программа не вылетает, если есть проблемы.

Например, на OSX вы получаете блютус последовательных портов, которые могут или не могут быть недоступны или использование:

serial ports list using controlP5 library

+0

работает отлично, когда я удаляю 'P3D 'from:' size (700, 400, P3D); 'вы можете мне плз меня? Я не принимаю' P3D'? –

+1

? Я немного смущен. Код должен работать с аргументом '' 'P3D'''' '' size() '' 'или нет. Образец controlP5, с которым я начал работать, имел это, и я не удалял его, но не стесняйтесь использовать все, что лучше подходит для вашего проекта. –

+0

Теперь я столкнулся с проблемой 'P3D' здесь http://stackoverflow.com/questions/29376404/java -lang-noclassdeffounderror-javax-media-opengl-glexception-at-processing-ope –

Смежные вопросы