1

Программа должна управлять ардуино по 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();
 
}
задан 24 авг. 2023 в 9:17
5
  • добро пожаловать на stack overflow на русском! как задать хороший вопрос Commented 24 авг. 2023 в 9:19
  • Проверяли содержимое portName перед открытием порта? Commented 24 авг. 2023 в 9:26
  • Порт открывается только если указать компорт в сетапе Commented 24 авг. 2023 в 9:39
  • Это я понял. В portName лежит именно "COM3"? Commented 24 авг. 2023 в 10:05
  • Все разрешилось добавил проверку на наличие порта Commented 24 авг. 2023 в 10:52

1 ответ 1

0

добавил проверку на наличие порта и заработало вот итоговый код

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 выключен
 }
}
ответ дан 24 авг. 2023 в 10:56

Ваш ответ

Черновик сохранён
Черновик удалён

Зарегистрируйтесь или войдите

Регистрация через Google
Регистрация через почту

Отправить без регистрации

Необходима, но никому не показывается

Отправить без регистрации

Необходима, но никому не показывается

Нажимая «Отправить ответ», вы соглашаетесь с условиями пользования и подтверждаете, что прочитали политику конфиденциальности.

Начните задавать вопросы и получать на них ответы

Найдите ответ на свой вопрос, задав его.

Задать вопрос

Изучите связанные вопросы

Посмотрите похожие вопросы с этими метками.