Заготовка Меню с выбором номера и скорости порта PROCESSING
- Войдите на сайт для отправки комментариев
Вс, 05/12/2021 - 00:11

//PROCESSING sketch------------------------------------------------------------------
import processing.serial.*;
import controlP5.*;
Serial serial;
ControlP5 cp5;
Textarea myTextarea;//text окно
String portName;
boolean TheRec;
int speed = 9600;
int horizonTXT;
int verticalTXT;
String SostREC;
String inBuffer;
//--------------------------------------------------------------------------------
void setup() {
// List all the available serial ports:
printArray(Serial.list());//выводим список портов
serial = new Serial(this, Serial.list()[0], 9600);
size(960, 512, P3D);// P3D=во весь экран
cp5 = new ControlP5(this);
cp5.setFont(createFont("Calibri", 16)); // сделаем шрифт побольше
// кнопки
cp5.addToggle("Rec")
.setPosition(330, 80)
.setSize(20, 20)
.setValue(false);//true-on false-off
// кнопки --------------------------------------------------------------------------------
cp5.addButton("open").setPosition(170, 10).setSize(80, 20);
cp5.addButton("close").setPosition(250, 10).setSize(80, 20).linebreak();
//отправка--------------------------------------------------------------------------------
cp5.addTextfield("input").setPosition(330, 30).setSize(160, 20);
cp5.addButton("send").setPosition(330, 10).setSize(160, 20);
// выпадающий список--------------------------------------------------------------------------------
cp5.addScrollableList("com")
.setPosition(10, 10)
.setSize(80, 100)
.setBarHeight(20)
.setItemHeight(30)
.close()
.addItems(Serial.list()); // добавляем список портов
;
// ТЕКСТОВОЕ ОКНО--------------------------------------------------------------------------------
myTextarea = cp5.addTextarea("txt")
.setPosition(0,121)
.setSize(500,140)
.setFont(createFont("arial",12))
.setLineHeight(14)
.setColor(color(150))//цвет текста
.setColorBackground(color(155,80))
.setColorForeground(color(155,80));
;
myTextarea.setColor(0xffffffff);//цвет текста (белый)
// ТЕКСТОВОЕ СЛАЙДЕРЫ--------------------------------------------------------------------------------
cp5.addSlider("horizonTXT")
.setRange(100,400)
.setValue(200)
.setPosition(10,95)//позиция
.setSize(100,19)//размер
.setMin(0)//минимальное значение
.setMax(960)//максимальное значение
;
cp5.addSlider("verticalTXT")
.setRange(100,400)
.setValue(200)
.setPosition(10,75)//позиция
.setSize(100,19)//размер
.setMin(0)//минимальное значение
.setMax(512)//максимальное значение
;
// выпадающий список--------------------------------------------------------------------------------
cp5.addScrollableList("Speed")
.setPosition(90, 10)
.setSize(80, 100)
.setBarHeight(20)
.setItemHeight(30)
.close()
.addItem("300",1)
.addItem("1200",2)
.addItem("2400",3)
.addItem("4800",4)
.addItem("9600",5)
.addItem("19200",6)
.addItem("38400",7)
.addItem("57600",8)
.addItem("74880",9)
.addItem("115200",10)
.addItem("230400",11)
.addItem("250000",12)
;
}
//------------------------------------------
void Speed(int TheSpeed) {
//print(TheSpeed);print(" ");println(speed);
if(TheSpeed==0){speed=300;}
if(TheSpeed==1){speed=1200;}
if(TheSpeed==2){speed=2400;}
if(TheSpeed==3){speed=4800;}
if(TheSpeed==4){speed=9600;}
if(TheSpeed==5){speed=19200;}
if(TheSpeed==6){speed=38400;}
if(TheSpeed==7){speed=57600;}
if(TheSpeed==8){speed=74880;}
if(TheSpeed==9){speed=115200;}
if(TheSpeed==10){speed=230400;}
if(TheSpeed==11){speed=250000;}
}
//РАЗМЕР ТЕКСТОВОГО ОКНА------------------------------------------
void horizonTXT (int TheHtxt) {
//println(horizonTXT);
myTextarea.setWidth(TheHtxt);//назначаем горизот текст. окна
horizonTXT=TheHtxt;
}
void verticalTXT (int TheVtxt) {
//println(verticalTXT);
myTextarea.setHeight(TheVtxt);//назначаем вертикаль текст. окна
verticalTXT=TheVtxt;
}
//------------------------------------------
void Rec (boolean TheRec) {
if(TheRec==true){
//println("ON");
//ПРИЕМ ДАННЫХ С ПОРТА------------------------------------------
SostREC="ВКЛ.";
}else{
//println("OFF");
SostREC="ВЫКЛ.";}
}
//------------------------------------------
void com(int n) {
portName = Serial.list()[n];
}
//------------------------------------------
void open() {
serial = new Serial(this, portName, speed);
}
//------------------------------------------
void close() {
serial.stop();
}
//------------------------------------------
void send() {
serial.write("5,"+ cp5.get(Textfield.class, "input").getText() +";");
}
//------------------------------------------
void draw() {
if(SostREC=="ВКЛ."){
while (serial.available() > 0) {
inBuffer = serial.readString();
if (inBuffer != null) {
println(inBuffer);
}
}}
background(10,30,90);
LINE();TEXT();
cp5 = new ControlP5(this);
//TEXT----------------------------------------
myTextarea.setText(" Вы можете здесь выводить какую либо"
+" информацию\n"
+" Скорость Порта ровна : "+speed+"\n"
+" Выбранный ПОРТ : # "+portName+"\n"
+" Прием Данных ВКЛ.-ВЫКЛ. : "+SostREC+"\n"
+" Размер текстового окна : \n"
+" по горизонтали : "+ horizonTXT+"\n"
+" по вертикали : "+ verticalTXT+"\n"
+"\n"
+"Buffer >> "+inBuffer+"\n"
);
}
//------------------------------------------
void TEXT(){
textSize(18);
fill(0, 152, 253);
text("Port: ", 10, 50);
fill(0, 102, 153);
text(""+portName, 100, 50);
//------------------------------------------
if(speed==9600){
fill(0, 152, 253);
text("SpeedPort: ", 10, 70);
fill(0, 102, 153);
text(""+speed, 100, 70);
fill(0, 152, 253);
text( " Default", 140, 70);
}else
{fill(0, 152, 253);
text("SpeedPort: ", 10, 70);
fill(0, 102, 153);
text(""+speed, 100, 70);
fill(0, 152, 253);
text( "", 140, 70);}
//------------------------------------------
if(SostREC=="ВКЛ."){
textSize(32);
fill(50, 255, 053);
text("Receive", 355, 100);
}
//------------------------------------------
}
//------------------------------------------
void LINE(){
fill(10, 20, 70);//цвет прямоугольника
rect( 0, 0, 500, 120 );//прямоугольник меню 500х120
line(0, 120, 500, 120);//горизонтальная линия от0 - до 500
line(500, 120, 500, 0);//вертикальная от500 - до 500
}
//PROCESSING sketch------------------------------------------------------------------
Немного обновил ,добавил настроек по usb port'у
//PROCESSING sketch------------------------------------------------------------------------------------------------------------ import processing.serial.*; // библиотека serial import controlP5.*; // библиотека controlP5 -кнопки, слайдеры... Serial serial; // вкл. serial ControlP5 cp5; // вкл. controlP5 Textarea myTextarea; // вкл. text окно //НАСТРОЙКИ ПОРТА-------------------------------------------------------------------------------------------------------------- String portName; int baudRate = 9600; char parity='N'; int DataBits=8; float stopBits=1.0; //НАСТРОЙКИ МЕНЮ--------------------------------------------------------------------------------------------------------------- int horizonTXT; // состояние слайдера Горизонт int verticalTXT; // состояние слайдера Вертикаль String SostREC; // состояние кнопки REC (ВКЛ.\ВЫКЛ.) String inBuffer; // хроним данные Буффера boolean TheRec; // состояние кнопки приема сообщений Receive //ДАННЫЕ С ПОРТА--------------------------------------------------------------------------------------------------------------- String DATA; // принятые данные String OSTATOC2; // принятые данные инверт. String ADDR; // принятые данные адреса String ADDR_inv; // принятые данные адреса инверт. //КОД ПРОГРАММЫ---------------------------------------------------------------------------------------------------------------- void setup() { printArray(Serial.list()); // выводим список портов serial = new Serial(this, Serial.list()[0], 9600); // устанавливаем первоначальные настройки порта 0-коп порт 9600-битрейт size(960, 512, P3D); // указываем размер основного окна и P3D=весь экран cp5 = new ControlP5(this); // вкл. управление кнопками, слайдерами... cp5.setFont(createFont("Calibri", 16)); // сделаем шрифт побольше // кнопки Rec------------------------------------------------------------------------------------------------------------------ cp5.addToggle("Rec") .setPosition(620, 10) .setSize(60, 20) .setValue(false);//true-on false-off // кнопки open и close--------------------------------------------------------------------------------------------------------- cp5.addButton("open").setPosition(450, 10).setSize(80, 20); cp5.addButton("close").setPosition(520, 10).setSize(80, 20).linebreak(); // кнопки ввода и отправка----------------------------------------------------------------------------------------------------- cp5.addTextfield("input").setPosition(680, 10).setSize(210, 20); cp5.addButton("send").setPosition(891, 10).setSize(59, 20); // выпадающий список com------------------------------------------------------------------------------------------------------- cp5.addScrollableList("com") .setPosition(10, 10) // указываем позицию .setSize(80, 100) // указываем размер .setBarHeight(20) // .setItemHeight(30) // .close() .addItems(Serial.list()); // добавляем список портов ; // ТЕКСТОВОЕ ОКНО-------------------------------------------------------------------------------------------------------------- myTextarea = cp5.addTextarea("txt") .setPosition(0,121) // указываем позицию .setSize(500,140) // указываем размер .setFont(createFont("arial",12)) // указываем шрифт текста и размер .setLineHeight(14) .setColor(color(150)) //цвет текста .setColorBackground(color(155,80)) .setColorForeground(color(155,80)); ; myTextarea.setColor(0xffffffff); // цвет текста (белый) // ТЕКСТОВОЕ СЛАЙДЕРЫ horizonTXT----------------------------------------------------------------------------------------------- cp5.addSlider("horizonTXT") .setRange(100,400) .setValue(200) .setPosition(10,95) // указываем позицию .setSize(100,19) // указываем размер .setMin(0) // минимальное значение .setMax(960) // максимальное значение ; // ТЕКСТОВОЕ СЛАЙДЕРЫ verticalTXT---------------------------------------------------------------------------------------------- cp5.addSlider("verticalTXT") .setRange(100,400) .setValue(200) .setPosition(10,75) // указываем позицию .setSize(100,19) // указываем размер .setMin(0) //минимальное значение .setMax(512) //максимальное значение ; // выпадающий список parity----------------------------------------------------------------------------------------------------- cp5.addScrollableList("parity") .setPosition(340, 10) // указываем позицию .setSize(120, 170) // указываем размер .setBarHeight(20) .setItemHeight(30) .close() .addItem("'N' -default",1) //выплывающий список .addItem("'E' for even",2) .addItem("'O' for odd",3) .addItem("'M' for mark",4) .addItem("'S' or space",5) ; // выпадающий список DataBits-------------------------------------------------------------------------------------------------- cp5.addScrollableList("DataBits") .setPosition(180, 10) // указываем позицию .setSize(80, 150) // указываем размер .setBarHeight(20) .setItemHeight(30) .close() .addItem("5",1) // выплывающий список .addItem("6",2) .addItem("7",3) .addItem("8-Def",4) // значение default ; // выпадающий список StopBits-------------------------------------------------------------------------------- cp5.addScrollableList("StopBits") .setPosition(260, 10) // указываем позицию .setSize(80, 150) // указываем размер .setBarHeight(20) .setItemHeight(30) .close() .addItem("1-Def",1)//1.0 is the default .addItem("1.5",2) .addItem("2",3) ; // выпадающий список baudRate-------------------------------------------------------------------------------- cp5.addScrollableList("baudRate") .setPosition(90, 10) // указываем позицию .setSize(90, 400) // указываем размер .setBarHeight(20) .setItemHeight(30) .close() .addItem("300",1)// выплывающий список .addItem("1200",2) .addItem("2400",3) .addItem("4800",4) .addItem("9600",5) .addItem("19200",6) .addItem("38400",7) .addItem("57600",8) .addItem("74880",9) .addItem("115200",10) .addItem("230400",11) .addItem("250000",12) ; } //ФУНКЦИЯ baudRate(БИТРЕЙТ)--------------------------------------------------------------------------------- void baudRate(int TheSpeed) { //print(TheSpeed);print(" ");println(speed); if(TheSpeed==0){baudRate=300;} // значение списка равно 0 то скорость 300 бод if(TheSpeed==1){baudRate=1200;} // значение списка равно 1 то скорость 1200 бод if(TheSpeed==2){baudRate=2400;} // значение списка равно 2 то скорость 2400 бод if(TheSpeed==3){baudRate=4800;} // ... if(TheSpeed==4){baudRate=9600;} // ... if(TheSpeed==5){baudRate=19200;} // ... if(TheSpeed==6){baudRate=38400;} // ... if(TheSpeed==7){baudRate=57600;} // ... if(TheSpeed==8){baudRate=74880;} // ... if(TheSpeed==9){baudRate=115200;} // ... if(TheSpeed==10){baudRate=230400;} // ... if(TheSpeed==11){baudRate=250000;} // ... //println(baudRate); } //ФУНКЦИЯ DataBits (DATA БИТ)------------------------------------------------------------------------------- void DataBits(int TheDataBits) { //print(TheSpeed);print(" ");println(speed); if(TheDataBits==0){DataBits=5;} // значение списка равно 0 то DataBits равен 5 if(TheDataBits==1){DataBits=6;} //... if(TheDataBits==2){DataBits=7;} //... if(TheDataBits==3){DataBits=8;} //...значение default println(DataBits); } //ФУНКЦИЯ StopBits (СТОПОВЫЙ БИТ)--------------------------------------------------------------------------- void StopBits(int TheStopBits) { //print(TheSpeed);print(" ");println(speed); if(TheStopBits==0){stopBits=1;} // значение списка равно 0 то СТОПОВЫЙ БИТ равен 1 if(TheStopBits==1){stopBits=1.5;} //... if(TheStopBits==2){stopBits=2;} //... //println(stopBits); } //ФУНКЦИЯ parity (Перечисление)------------------------------------------------------------------------------ void parity(int TheParity) { //print(TheSpeed);print(" ");println(speed); if(TheParity==0){parity='N';} // значение default if(TheParity==1){parity='E';} // значение списка равно 1 то parity равен 'E' if(TheParity==2){parity='O';} //... if(TheParity==3){parity='M';} //... if(TheParity==4){parity='S';} //... println(TheParity); } //ФУНКЦИЯ РАЗМЕР ТЕКСТОВОГО ОКНА----------------------------------------------------------------------------- void horizonTXT (int TheHtxt) { //println(horizonTXT); myTextarea.setWidth(TheHtxt); // указываем горизот текст. окна horizonTXT=TheHtxt; } void verticalTXT (int TheVtxt) { //println(verticalTXT); myTextarea.setHeight(TheVtxt); // указываем вертикаль текст. окна verticalTXT=TheVtxt; } //ФУНКЦИЯ КНОПКИ ПРИЕМА ДАННЫХ Rec--------------------------------------------------------------------------- void Rec (boolean TheRec) { if(TheRec==true){ //println("ON"); SostREC="ВКЛ."; // поменять на состояние "ВКЛ." }else{ //println("OFF"); SostREC="ВЫКЛ.";} // поменять на состояние "ВЫКЛ." } //ФУНКЦИЯ КНОПКИ СПИСКА ПОРТОВ-------------------------------------------------------------------------------- void com(int n) { portName = Serial.list()[n]; } //ФУНКЦИЯ КНОПКИ open----------------------------------------------------------------------------------------- void open() { serial = new Serial(this, portName, baudRate, parity, DataBits, stopBits);// Открыть порт с нов.настройками } //ФУНКЦИЯ КНОПКИ close---------------------------------------------------------------------------------------- void close() { serial.stop(); // Прекратить прием-передачу через КОМ ПОРТ } //ФУНКЦИЯ КНОПКИ send----------------------------------------------------------------------------------------- void send() { serial.write("5,"+ cp5.get(Textfield.class, "input").getText() +";"); // Отправка сообщений через КОМ ПОРТ } //ОСНОВНОЙ КОД ПРОГРАММЫ-------------------------------------------- ----------------------------------------- void draw() { if(SostREC=="ВКЛ."){ while (serial.available() > 0) { inBuffer = serial.readString(); //println(inBuffer); if (inBuffer != null) { // если буфер не равен Null String myString = new String(inBuffer); // создаем новую строку для данных из буффера String st = myString; // строка ADDR = ""; // пустая строка String OSTATOC = ""; for (int j = 0; j < st.length(); j++) { if ( j < st.length() /5) { // отнимаем 4 символа справа ADDR += st.charAt(j); }else OSTATOC += st.charAt(j); } //--------------------------------------------------------------------------------------------------------------------- String st1 = OSTATOC; ADDR_inv = ""; String OSTATOC1 = ""; for (int j = 0; j < st1.length(); j++) { if ( j < st1.length() /4) { // отнимаем 3 символа справа ADDR_inv += st1.charAt(j); }else OSTATOC1 += st1.charAt(j); } //--------------------------------------------------------------------------------------------------------------------- String st2 = OSTATOC1; DATA = ""; OSTATOC2 = ""; for (int j = 0; j < st2.length(); j++) { if ( j < st2.length() /3) { // отнимаем 2 символа справа DATA += st2.charAt(j); }else OSTATOC2 += st2.charAt(j); } println("Значение ADDR : " + ADDR); // печатаем в порт полученные значение println("Значение ADDR_inv : " + ADDR_inv); // печатаем в порт полученные значение println("Значение DATA : " + DATA); // печатаем в порт полученные значение println("Значение DATA_inv : " + OSTATOC2); // печатаем в порт полученные значение println("---------------------------------------"); //--------------------------------------------------------------------------------------------------------------------- } }} PImage img; img = loadImage("3.jpg"); background(img); //background(10,30,90); LINE();TEXT(); cp5 = new ControlP5(this); //TEXT---------------------------------------- myTextarea.setText(" Вы можете здесь выводить какую либо" +" информацию\n" +" Выбранный ПОРТ : # "+portName+"\n" +" Скорость Порта ровна : "+baudRate+"\n" +" Контроль чётности Порта : "+parity+"\n" +" Количество битов Порта : "+DataBits+"\n" +" Стоповый бит Порта ровна : "+stopBits+"\n" +" Прием Данных ВКЛ.-ВЫКЛ. : "+SostREC+"\n" +" Размер текстового окна : \n" +" по горизонтали : "+ horizonTXT+"\n" +" по вертикали : "+ verticalTXT+"\n" +"\n" +"Buffer >> "+inBuffer+"\n" +"Значение ADDR : " + ADDR+"\n" +"Значение ADDR_inv : " + ADDR_inv+"\n" +"Значение DATA : " + DATA+"\n" +"Значение DATA_inv : " + OSTATOC2+"\n" ); } //ФУНКЦИЯ TEXT Port------------------------------------------------------------------------------------------ void TEXT(){ textSize(18); // Размер текста fill(0, 152, 253); // Цвет текста и Позиция text("Port: ", 10, 50); // Текст и Позиция fill(0, 102, 153); // Цвет текста и Позиция text(""+portName, 100, 50); // Текст и Позиция //ФУНКЦИЯ TEXT baudRate-------------------------------------------------------------------------------------- if(baudRate==9600){ // значение baudRate равно скорости 9600 бод ,то состояние поменять на "ВКЛ." fill(0, 152, 253); // Цвет текста и Позиция text("BaudRate: ", 10, 70); // Текст и Позиция fill(0, 102, 153); // Цвет текста и Позиция text(""+baudRate, 100, 70); // Текст и Позиция fill(0, 152, 253); // Цвет текста и Позиция text( " Default", 140, 70); // Текст и Позиция }else {fill(0, 152, 253); // Цвет текста и Позиция text("BaudRate: ", 10, 70); // Текст и Позиция fill(0, 102, 153); // Цвет текста и Позиция text(""+baudRate, 100, 70); // Текст и Позиция fill(0, 152, 253); // Цвет текста и Позиция text( "", 140, 70);} //ФУНКЦИЯ TEXT SostREC --------------------------------------------------------------------------------------- if(SostREC=="ВКЛ."){ // значение на REC равно "ВКЛ." textSize(32); // размер текста fill(50, 255, 053); // Цвет текста и Позиция text("Receive", 620, 100); // Текст и Позиция } textSize(18); // размер текста fill(0, 152, 253); // Цвет текста и Позиция text("DataBits: ", 220, 50); // Текст и Позиция fill(0, 102, 153); // Цвет текста и Позиция text(""+DataBits, 300, 50); // Текст и Позиция //ФУНКЦИЯ TEXT StopBits---------------------------------------------------------------------------------------- fill(0, 152, 253); // Цвет текста и Позиция text("StopBits: ", 220, 70); // Текст и Позиция fill(0, 102, 153); // Цвет текста и Позиция text(""+stopBits, 300, 70); // Текст и Позиция //ФУНКЦИЯ TEXT parity------------------------------------------------------------------------------------------ fill(0, 152, 253); // Цвет текста и Позиция text("parity: ", 350, 50); // Текст и Позиция fill(0, 102, 153); // Цвет текста и Позиция text(""+parity, 405, 50); // Текст и Позиция } //ФУНКЦИЯ LINE (ЛИНИИ)----------------------------------------------------------------------------------------- void LINE(){ fill(10, 20, 70, 180); //цвет прямоугольника g,g,b,alpha rect( 0, 0, 960, 120 ); //прямоугольник меню 500х120 line(0, 120, 960, 120); //горизонтальная линия от0 - до 500 line(610, 120, 610, 0); //вертикальная от500 - до 500 } //PROCESSING sketch--------------------------------------------------------------------------------------------вроде неплохо...
Да, сама идея выкладывать базовые примеры практического использования хороша.
:-)
Не хотите написать "процессинге" симулятор экранчика для ардуино, например на SSD1306 (128 * 64)?
Да, сама идея выкладывать базовые примеры практического использования хороша.
:-)
Не хотите написать "процессинге" симулятор экранчика для ардуино, например на SSD1306 (128 * 64)?
Чуть подробнее !,дисплеи обычно продаются в виде I2C- или SPI-модулей !
как эмулировать ? как подключать? Увы я сам изучаю Arduino Processing недавно .
Да идея простая. Пишите-рисуете в "процессинге" экранчик и соединяете ардуино с ПК. Ну и шлёте с неё данные для отображения на рисованом экранчике.
набросал заставку пока))
Да идея простая. Пишите-рисуете в "процессинге" экранчик и соединяете ардуино с ПК. Ну и шлёте с неё данные для отображения на рисованом экранчике.
будем пробовать!
задумка такая может создать каждый пиксель чтоб отображал именно так же как и оригинальный прибор
задумка такая может создать каждый пиксель чтоб отображал именно так же как и оригинальный прибор
Ну, да. В природе пока китайцы создали их 3 моноцветов - синий (ближе к голубому), жёлтый и белый.
задумка такая может создать каждый пиксель чтоб отображал именно так же как и оригинальный прибор
Ну, да. В природе пока китайцы создали их 3 моноцветов - синий (ближе к голубому), жёлтый и белый.
ПОКА ДУМАЮ КАК ПИКСЕЛИ ВЫВОДИТЬ
ПОКА ДУМАЮ КАК ПИКСЕЛИ ВЫВОДИТЬ
В виде квадратиков в поле экрана 128*64 квадратика.
Результат по МЕНЮХЕ добавил логику обработки ИК сигнала