Как использовать JAVA для управления светодиодным освещением, подключаемым к ПК через USB/SerialPort/и т. д.? Какое устройство следует использовать?

Я хотел бы написать программу на JAVA, которая может управлять светодиодами, подключающимися к «чему-то», что подключено к компьютеру.

Программа JAVA будет состоять из 8 кнопок-переключателей в JFrame. Кнопки пронумерованы от 1 до 8, и при нажатии кнопки с номером X загорится светодиод с номером X; когда эта кнопка будет нажата (переключена) снова, этот светодиод будет выключен.

В отличие от микроконтроллеров, в которые мы должны загружать код, «нечто», о котором я упоминал, просто получает сигналы от JAVA (возможно, через USB/SerialPort/...) для управления освещением. Например, JAVA отправляет 0000_0101 (включает светодиод № 1 и 3) «чему-то» через SerialPort, а затем «что-то» будет «сохранять» это значение до тех пор, пока не будет отправлен новый сигнал. Каждая цифра значения представляет ВЫСОКИЙ/НИЗКИЙ контакт на «чем-то», который я буду подключать к светодиоду.

«Что-то» может быть чем-то вроде устройства, которое может преобразовывать «сигнал последовательного порта» в «двоичный» и хранить этот «двоичный» в регистре с выходными контактами, которые я могу подключить к светодиодам.

Это возможно? Есть ли устройство типа "что-то"? Что это такое? У кого-нибудь есть предложения? или какие-то лучшие способы управления светом с ПК?


person Northnroro    schedule 14.03.2014    source источник


Ответы (4)


Я сделал что-то подобное, используя BeagleBone Black с портом Android. Я разработал приложение для Android, в котором использовался пользовательский API с низким энергопотреблением Bluetooth, который я создал для связи с TI CC2541, на котором работает стек BLE.

Что вам нужно сделать, так это написать функции на C/C++, чтобы сделать необходимые аппаратные вызовы платформы для переключения ввода-вывода. Что-то вроде ToggleLed(led) будет достаточно. Затем вы подключаете собственные вызовы к Java с помощью Java Native Interface (JNI). JNI создает библиотеку, которую вы можете загрузить статически.

После того, как вы создали библиотеку, вы можете вызывать ее в Java.

Например, в моей ситуации я создал BLE API, который общался с родным C++, который выполнял последовательное чтение/запись в мой встроенный BLE-чип CC2541, чтобы управлять им в различных состояниях. Этими командами были подключение/отключение, запись данных и чтение данных. BLE API был написан на Java и взаимодействовал с оборудованием через JNI и вызовы драйверов. Затем я написал приложения, использующие BLE API.

person bblincoe    schedule 14.03.2014

Вы можете управлять контактами GPIO на Raspberry Pi с помощью File операций. См., например, это: https://blogs.oracle.com/hinkmond/entry/rpi_and_java_embedded_gpio3 где мигание светодиода осуществляется путем чередования выходного сигнала вывода. Таким образом, «что-то» — это Pi, который вы можете получить за очень небольшие деньги у многих разных дистрибьюторов.

Однако, как правило, Java не является предпочтительным языком для низкоуровневого управления битами. Вместо этого используйте Python, особенно с Raspberry Pi.

person Martin Dinov    schedule 14.03.2014

Arduino будет простым и экономичным выбором. Который идет с большой поддержкой сообщества.

person Manu Viswam    schedule 14.03.2014

Я сделал что-то подобное, когда на компьютере был доступен параллельный порт PRINTER DB25. Однако, поскольку параллельный порт больше не поставляется с ПК и ноутбуками, в качестве альтернативы можно использовать 25-контактный кабельный адаптер параллельного порта USB-PRINTER DB25.

этот параллельный порт имеет 8 выходных линий, которые могут представлять от 0 до 255 значений в двоичном виде.

  1. напишите библиотеку С++, которая будет передавать значение байта на вывод параллельного порта. поскольку java не может получить прямой доступ к вашему оборудованию.

  2. Используя JNI, вы можете получить доступ к этой библиотеке из своего java-кода.

  3. Теперь подключите 8 светодиодов к выходным контактам параллельного порта.

ПРИМЕЧАНИЕ. Шаги 1 и 2 уже выполнены за вас. следующей библиотекой. http://web.archive.org/web/20080523134328/http://www.geocities.com/Juanga69/parport/

чтобы загорелся только 1-й светодиод, установите значение 00000001b => 1 десятичный знак

чтобы загорелся только второй светодиод 00000010b => 2 десятичных знака

для включения 4-го и 8-го светодиода => 10001000b => 136 десятичных знаков

person Chamil    schedule 14.03.2014