Программа должна управлять ардуино по com порту. Из выпадающего списка выдаётся список доступных com портов, но порт не хочет открываться. Все работает если вручную указать компорт.
import controlP5.*;
ControlP5 cp5;
import processing.serial.*;
Serial serial;
int speed = 9600;
String portName;
void setup () {
size (400, 400);
cp5 = new ControlP5(this);
cp5.setFont(createFont("Ubuntu", 20));
serial = new Serial(this, "COM3", speed); //только если в ручную указать порт программа связывается с ардуино
String str[] = Serial.list();
println(str);
// кнопки для работы с выпадающим листом
cp5.addButton("Refresh").setPosition(228, 108).setWidth(100).setHeight(25);
cp5.addButton("OpenPORT").setPosition(8, 91).setWidth(200).setHeight(25);
cp5.addButton("ClosePort").setPosition(7, 125).setWidth(200).setHeight(25);
cp5.addScrollableList("ComList").close()
.setWidth(199)
.setBarHeight(40)
.setPosition(10, 10)
.setItemHeight(35)
.linebreak();
cp5.addButton("ledOn").setPosition(8, 180).setWidth(200).setHeight(25);
cp5.addButton("ledOff").setPosition(8, 220).setWidth(200).setHeight(25);
}
void draw() {
background(120);
}
void OpenPORT(){
serial = new Serial(this, portName, speed);
println(portName);
}
void Refresh() {
String list [] = Serial.list();
cp5.get(ScrollableList.class, "ComList").addItems(list);//получаем COM порты
}
void Comlist (int n) {
portName = Serial.list()[n];
}
void ledOn(){
serial.write('n');
delay(1000);
}
void ledOff(){
serial.write('f');
delay(1000);
}
void ClosePort() {
serial.stop();
}
-
добро пожаловать на stack overflow на русском! как задать хороший вопросaleksandr barakin– aleksandr barakin2023年08月24日 09:19:15 +00:00Commented 24 авг. 2023 в 9:19
-
Проверяли содержимое portName перед открытием порта?MBo– MBo2023年08月24日 09:26:53 +00:00Commented 24 авг. 2023 в 9:26
-
Порт открывается только если указать компорт в сетапеDmitriy– Dmitriy2023年08月24日 09:39:06 +00:00Commented 24 авг. 2023 в 9:39
-
Это я понял. В portName лежит именно "COM3"?MBo– MBo2023年08月24日 10:05:14 +00:00Commented 24 авг. 2023 в 10:05
-
Все разрешилось добавил проверку на наличие портаDmitriy– Dmitriy2023年08月24日 10:52:04 +00:00Commented 24 авг. 2023 в 10:52
1 ответ 1
добавил проверку на наличие порта и заработало вот итоговый код
int speed = 115200;
String portName; // имя порта
import processing.serial.*;
Serial serial;
import controlP5.*;
ControlP5 cp5;
void setup() {
size(500, 250); // размер окна
setupGUI(); // инициализация интерфейса
}
void draw() {
background(120); // заливаем фон
}
void ledOn(){
serial.write('n');
delay(1000);
}
void ledOff(){
serial.write('f');
delay(1000);
}
// ======= ИНИЦИАЛИЗАЦИЯ ИНТЕРФЕЙСА ========
void setupGUI() {
cp5 = new ControlP5(this);
cp5.setFont(createFont("Calibri", 16)); // сделаем шрифт побольше
// добавляем кнопки
cp5.addButton("open").setPosition(90, 10).setSize(80, 30);
cp5.addButton("close").setPosition(170, 10).setSize(80, 30).linebreak();
cp5.addButton("ledOn").setPosition(8, 180).setWidth(200).setHeight(25);
cp5.addButton("ledOff").setPosition(8, 220).setWidth(200).setHeight(25);
// выпадающий список
cp5.addScrollableList("com")
.setPosition(10, 10)
.setSize(80, 100)
.setBarHeight(30)
.setItemHeight(30)
.close()
.addItems(Serial.list());
;
}
// ==== ОБРАБОТЧИКИ ИНТЕРФЕЙСА =====
// список портов
void com(int n) {
portName = Serial.list()[n]; // запоминаем выбранный порт в portName
}
// кнопка открыть порт
void open() {
if (portName != null && serial == null) { // если выбран порт и сейчас он закрыт
serial = new Serial(this, portName, speed); // открываем portName
}
}
// кнопка закрыть порт
void close() {
if (serial != null) { // если порт открыт
serial.stop(); // закрываем portName
serial = null; // serial выключен
}
}
Начните задавать вопросы и получать на них ответы
Найдите ответ на свой вопрос, задав его.
Задать вопросdefault