Форум программистов, компьютерный форум, киберфорум
Java
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
3 / 3 / 0
Регистрация: 22.08.2015
Сообщений: 125

Есть ява приложение с GUI. нужна фукнция для программы. как сделать ?

15.03.2016, 16:55. Показов 1613. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть прикладная задача - управление приточно-вытяжной установкой по уровню CO2 (замеряемому настольным датчиком) с помощью ИК сигналов

Есть приложение на ява
https://github.com/eschava/HT2000-java
там же исходники. умеет выдавать значение датчика на экран в ком. строке и через GUI интерфейс

нужно из этого сделать функцию возвращающую значение СО2

потом простейшую логику:
цикл (раз в 10 секунд например) вызывающий функцию замера CO2, анализирующий значение и включающий нужную скорость установки (всего скоростей три)
if СO2<500 then выключить_установку
elseif CO2>= 500 then скорость1
elseif CO2>= 700 then скорость2
elseif CO2>= 900 then скорость3

скорости можно переключать из ком. строки используя яваскрипт
node harmonyHubCLI.js -l 192.168.1.33 -d "VENTS VUT2" -c "Speed1"
Разобраться с запуском ява скрипта с github.com

есть аналогичные решения на питоне, яве,С++ но заработал корректно у меня только яваскрипт

вопрос на каком языке это логичнее всего собрать ?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
15.03.2016, 16:55
Ответы с готовыми решениями:

Как для программы на Си сделать Gui?
Прошу подсказать, можно ли на Си делать окошки и кнопки и если да, то какими командами или где об этом почитать? Если нельзя, то как...

Как сделать GUI приложение в IntelliJ IDEA 12
Здравствуйте , до этого времени писал в консоле только и работал с делфи. Но вот теперь нужно сделать программу с графическим интерфейсом...

Есть GUI как сделать программу?
Короч. Никогда раньше не занимался WinApi, но тут сказали надо. Есть GUI на как раз на WinApi. Надо написать прогу. Как это сделать? ...

7
 Аватар для reisal78
944 / 687 / 230
Регистрация: 28.04.2013
Сообщений: 1,925
15.03.2016, 20:14
diplom-electro, если я правильно понял ТЗ, то довольно простая задача.
0
3 / 3 / 0
Регистрация: 22.08.2015
Сообщений: 125
15.03.2016, 20:27  [ТС]
никто не спорит что она простая )) но в программировании я силен только на VBA
0
 Аватар для reisal78
944 / 687 / 230
Регистрация: 28.04.2013
Сообщений: 1,925
15.03.2016, 20:48
diplom-electro, вы спросили:
Цитата Сообщение от diplom-electro Посмотреть сообщение
вопрос на каком языке это логичнее всего собрать ?
на java это можно сделать довольно просто (Если наспех делать то минут на 5-10 развлекухи).
Другой вопрос как это сделать вам. Я могу выложить код, а вы с него сможете собрать jar?
Я могу выложить jar, но мне не начем протестировать работает оно или нет =)
0
3 / 3 / 0
Регистрация: 22.08.2015
Сообщений: 125
16.03.2016, 11:31  [ТС]
Другой вопрос как это сделать вам. Я могу выложить код, а вы с него сможете собрать jar?
не зря же в соседней ветке объясняли )) осталось ява сдк скачать и все получится
автор модуля предлагает mqtt использовать - но с ним пока глуховато
http://forum.ixbt.com/topic.cg... 05-52#1480

Добавлено через 14 часов 9 минут
благодаря reisal78 первая версия приложения родилась

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
package com.reisal78.app;
 
import com.eschava.ht2000.usb.HT2000State;
import com.eschava.ht2000.usb.HT2000UsbConnection;
import com.eschava.ht2000.usb.UsbException;
 
import java.io.IOException;
 
/**
 * Created by Astanid on 15.03.2016.
 */
public class RunApp {
 
    private static int fanSpeed = 0;
    private static boolean powerOn = true;
 
    public static void main(String[] args) {
//        /* Завершение работы (SIGTERM и т.д.) /
//        Runtime.getRuntime().addShutdownHook(new Thread() {
//            public void run() {
//                System.exit(1);
//            }
//        });
 
 
        HT2000UsbConnection usbConnection = null;
        try {
 
            usbConnection = new HT2000UsbConnection();
            usbConnection.open();
 
 
            while (true) {
                Thread.sleep(5000);
 
                HT2000State state = usbConnection.readState();
                changeSpeed(state.getCo2());
            }
 
        } catch (UsbException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            usbConnection.close();
            HT2000UsbConnection.shutdown();
        }
    }
 
    private static void changeSpeed(int co2) throws IOException {
        System.out.println("co2 = " + co2 + " " + fanSpeed + " " + powerOn);
 
 
        if (co2 <= 500 && powerOn==true) {
            //Выключается так?
            Runtime.getRuntime().exec("node c:\\Harmony\\AutoVent\\harmonyHubCLI\\harmonyHubCli.js -l 192.168.1.33 -d "VENTS VUT2" -c "Power Toggle"");
            powerOn = false;
 
            if (co2 <= 500 && powerOn == false) {
                Runtime.getRuntime().exec("node c:\\Harmony\\AutoVent\\harmonyHubCLI\\harmonyHubCli.js -l 192.168.1.33 -d "VENTS VUT2" -c "Power Toggle"");
                powerOn = true;
            }
        } else if (co2 > 500 && co2 <= 750 && fanSpeed != 1) {
            Runtime.getRuntime().exec("node c:\\Harmony\\AutoVent\\harmonyHubCLI\\harmonyHubCli.js -l 192.168.1.33 -d "VENTS VUT2" -c "Speed1"");
            fanSpeed = 1;
        } else if (co2 > 750 && co2 <= 800 && fanSpeed != 2) {
            Runtime.getRuntime().exec("node c:\\Harmony\\AutoVent\\harmonyHubCLI\\harmonyHubCli.js -l 192.168.1.33 -d "VENTS VUT2" -c "Speed2"");
            fanSpeed = 2;
        } else if (co2 >= 800 && fanSpeed != 3) {
            Runtime.getRuntime().exec("node c:\\Harmony\\AutoVent\\harmonyHubCLI\\harmonyHubCli.js -l 192.168.1.33 -d "VENTS VUT2" -c "Speed3"");
            fanSpeed = 3;
        }
    }
}
скорости запоминать в программе необходимо чтобы не слать сигнал на переключение каждый цикл, состояние вкл/выкл надо запоминать так как кнопка вкл/выкл одна.
пробы показали что логика такого рода не годится (хотя вот именно так примерно серийная автоматика работает)
условно говоря такая автоматика будет "зависать" на одной из границ постоянно дергая переключатель скорости вверх-вниз
статья на тему https://geektimes.ru/post/258294/ (там же можно еще несколько нарыть по тэгу CO2)
вкратце если - люди находясь в помещении постоянно выдыхают CO2 повышая его концентрацию. понизить ее можно только нагнетая воздух с улицы в помещение (в нем концентрация CO2 около 400 ppm)
само собой равновесия системы достичь почти нереально - CO2 всегда или растет или падает.
нужно возможно реже щелкая скоростями держать концентрацию в каком то заданном пределе (650-750 ppm например)
над алгоритмом пока думаю... у кого есть идеи - высказывайте

какой то лог бы прикрутить к программе и/или построитель графиков. сейчас я копирую данные из debug окна среды IDEA и строю в екселе. не совсем удобно )
0
 Аватар для reisal78
944 / 687 / 230
Регистрация: 28.04.2013
Сообщений: 1,925
16.03.2016, 11:59
diplom-electro, не забывайте что этот код я накидал наспех, лишь бы хоть как то работало =)

Цитата Сообщение от diplom-electro Посмотреть сообщение
какой то лог бы прикрутить к программе
В каком формате лог нужен?

Добавлено через 1 минуту
Косяк кода в том, что
Java
1
2
            usbConnection.close();
            HT2000UsbConnection.shutdown();
могут и не выполняться
0
3 / 3 / 0
Регистрация: 22.08.2015
Сообщений: 125
16.03.2016, 12:46  [ТС]
В каком формате лог нужен?
например в текстовый файл в папке проекта. имя файла - начало записи. каждая строка - текст с разделителем пробел (как сейчас)
строить графики можно и в екселе )
0
3 / 3 / 0
Регистрация: 22.08.2015
Сообщений: 125
20.03.2016, 22:58  [ТС]
по итогу тестов пришел вот к такому коду
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
public class RunApp {
 
    private static int fanSpeed = 0;
    private static boolean powerOn = true;
 
    public static void main(String[] args) {
//        /* Завершение работы (SIGTERM и т.д.) /
//        Runtime.getRuntime().addShutdownHook(new Thread() {
//            public void run() {
//                System.exit(1);
//            }
//        });
        int co2=600;
        int limit0=500; //уровень отключения
        int limit1=650; //желаемая величина
        int limit2=800; // предел для включения макс скорости
        boolean powerOn=true;
 
        HT2000UsbConnection usbConnection = null;
        try {
 
            usbConnection = new HT2000UsbConnection();
            usbConnection.open();
 
 
            while (true) {
 
                HT2000State state = usbConnection.readState();
//                changeSpeed(state.getCo2());
                co2=state.getCo2();
                System.out.println("co2 = " + co2 + " " + fanSpeed + " " + powerOn);
                if (co2 <= limit0 && powerOn==true) {
                    //Выключение
                    Runtime.getRuntime().exec("node c:\\Harmony\\AutoVent\\harmonyHubCLI\\harmonyHubCli.js -l 192.168.1.33 -d "VENTS VUT2" -c "Power Toggle"");
                    powerOn = false;
                    System.out.println("выключаем установку");
                } else if (co2 >= limit0+50 && powerOn == false) {
                        //Включение
                        Runtime.getRuntime().exec("node c:\\Harmony\\AutoVent\\harmonyHubCLI\\harmonyHubCli.js -l 192.168.1.33 -d "VENTS VUT2" -c "Power Toggle"");
                        powerOn = true;
                        System.out.println("включаем установку");
                } else if (co2 > limit0 && co2 <= limit1 && fanSpeed != 1) {
                    Runtime.getRuntime().exec("node c:\\Harmony\\AutoVent\\harmonyHubCLI\\harmonyHubCli.js -l 192.168.1.33 -d "VENTS VUT2" -c "Speed1"");
                    fanSpeed = 1;
                    System.out.println(" включаем скорость " + fanSpeed);
 
                } else if (co2 > limit1 && co2 <= limit2 && fanSpeed != 2) {
                    Runtime.getRuntime().exec("node c:\\Harmony\\AutoVent\\harmonyHubCLI\\harmonyHubCli.js -l 192.168.1.33 -d "VENTS VUT2" -c "Speed2"");
                    fanSpeed = 2;
                    System.out.println(" включаем скорость " + fanSpeed);
                    Thread.sleep(30000);
                } else if (co2 >= limit2 && fanSpeed != 3) {
                    Runtime.getRuntime().exec("node c:\\Harmony\\AutoVent\\harmonyHubCLI\\harmonyHubCli.js -l 192.168.1.33 -d "VENTS VUT2" -c "Speed3"");
                    fanSpeed = 3;
                    Thread.sleep(30000);
                    System.out.println(" включаем скорость " + fanSpeed);
                }
                Thread.sleep(5000);
            }
 
        } catch (UsbException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            usbConnection.close();
            HT2000UsbConnection.shutdown();
        }
    }
но неудобно использовать в таком виде - нужно минимальное ГУИ.
кнопки запуск/остановка скрипта, поля настройки констант (limit1, limit2 и т.д.) и окно куда бы выводился дебаг программы.
о чем то более сложном как графики не мечтаю - проще в екселе строить если вдруг нужно )
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
20.03.2016, 22:58
Помогаю со студенческими работами здесь

Сделать GUI (вывод текста) для готовой программы
Всем добрый день, у меня такой вопрос - как можно сделать GUI (скорее всего на PyQt4) для уже написанной, работающей программы? Суть в...

Есть задача для Искусственного Разума сделать GUI Менеджер Задач на Qt3 Linux
Есть задача для Искусственного Разума сделать GUI Менеджер Задач на Qt3 Linux Вообще изначально планируется Универсальная Экспертная...

Как запустить GUI приложение (например, notepad.exe) без отображения GUI?
Добрый день. Интересует есть ли такая возможность, как запустить GUI приложение (например, notepad.exe) без отображения GUI?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru