P14J предоставляет серию триггеров, которые могут выполнять действия на пины GPIO на основе изменения состояния другого пина. Триггеры также предоставляют расширяемый интерфейс, который позволяет расширять и создавать собственные пользовательские триггеры.
Триггеры GpioBlinkStateTrigger и GpioBlinkStopStateTrigger
Триггеры GpioBlinkStateTrigger и GpioBlinkStopStateTrigger используются для включения и, соответственно, выключения мигания на пины GPIO. К примеру, мы хотим подключить датчик движения (к примеру HC-SR501) и светодиод, мигать им, когда датчик обнаружит движение и выключить мигание в противном случае.
Схема подключения
Код программы
В этом примере кода показано, как настроить и использовать мигающие триггеры GpioBlinkStateTrigger и GpioBlinkStopStateTrigger для контактов GPIO на Orange Pi. Триггер GpioBlinkStateTrigger мигает светодиодом «myLed» с интервалом в 100 мс, когда на пин «myButton» меняется состояние из «0» в «1», а GpioBlinkStopStateTrigger отключает мигание, когда состояние переходит из «1» в «0».
import com.pi4j.io.gpio.GpioController; import com.pi4j.io.gpio.GpioFactory; import com.pi4j.io.gpio.GpioPinDigitalInput; import com.pi4j.io.gpio.GpioPinDigitalOutput; import com.pi4j.io.gpio.OrangePiPin; import com.pi4j.io.gpio.PinMode; import com.pi4j.io.gpio.PinPullResistance; import com.pi4j.io.gpio.PinState; import com.pi4j.io.gpio.trigger.GpioBlinkStateTrigger; import com.pi4j.io.gpio.trigger.GpioBlinkStopStateTrigger; import com.pi4j.platform.Platform; import com.pi4j.platform.PlatformManager; import com.pi4j.util.Console; public class PushButtonGpioBlinkStateTrigger { public static void main(String[] args) { try { /* * Поскольку мы не используем платформу Raspberry Pi, мы должны явно * указывать платформу, в нашем случае - это Orange Pi. */ PlatformManager.setPlatform(Platform.ORANGEPI); /* * Создаём экземпляр консоли */ Console console = new Console(); /* * Позволяем пользователю выйти из программы с помощью CTRL-C */ console.promptForExit(); /* * Создаём экземпляр контроллера GPIO */ GpioController gpio = GpioFactory.getInstance(); /* * настройка вывода GPIO.22, задаём режим входа и включаем подтягивающий * резистор в "1" */ GpioPinDigitalInput myButton = gpio.provisionDigitalInputPin( OrangePiPin.GPIO_23, // Номер пина по WiringPi "HC-SR501", // Имя пина (необязательный) PinPullResistance.PULL_UP); /* * настроика поведения выключения */ myButton.setShutdownOptions( true, // освобождаем пин PinState.LOW, // задаём состояние 0 PinPullResistance.OFF, // отключаем подтягивающий резистор PinMode.DIGITAL_INPUT);// установливаем режим входа /* * настройка вывода GPIO.24, задаём режим выхода и установливаем значение * LOW при запуске */ GpioPinDigitalOutput myLed = gpio.provisionDigitalOutputPin( OrangePiPin.GPIO_24, // Номер пина по WiringPi "Светодиод", // Имя пина (необязательный) PinState.LOW); // Состояние пина при запуске (необязательный) /* * настроика поведения выключения */ myLed.setShutdownOptions( true, // освобождаем пин PinState.LOW, // задаём состояние 0 PinPullResistance.OFF, // отключаем подтягивающий резистор PinMode.DIGITAL_INPUT);// установливаем режим входа /* * добавляем триггер, который мигает светодиодом "myLed" с интервалом в * 100 мс. Триггер срабатывает, когда на пин myButton меняется состояние * из "0" в "1" */ myButton.addTrigger(new GpioBlinkStateTrigger(PinState.HIGH, myLed, 100)); /* * добавляем триггер, который отключает мигание. Триггер срабатывает, * когда на пин myButton меняется состояние из "1" в "0" */ myButton.addTrigger(new GpioBlinkStopStateTrigger(PinState.LOW, myLed)); /* * ждёт, пока пользователь нажмёт CTRL-C */ console.waitForExit(); gpio.shutdown(); } catch (Exception e) { e.printStackTrace(); } } }
Проверяем код:
- создаём java файл и вставляем код;
nano PushButtonGpioBlinkStateTrigger.java
- компилируем файл;
javac -classpath .:classes:/opt/pi4j/lib/'*' PushButtonGpioBlinkStateTrigger.java
- запускаем программу.
sudo java -classpath .:classes:/opt/pi4j/lib/'*' PushButtonGpioBlinkStateTrigger
Результат
Триггер GpioToggleStateTrigger
Триггер GpioToggleStateTrigger используется для изменения состояния GPIO пинов на противоположное. Если выходной пин в состоянии «1», при срабатывании триггера (к примеру нажали на кнопку) состояние пина меняется в лог. «0» и на оборот, если пин в состоянии «0» — тогда менится в лог. «1». Срабатывание триггера GpioToggleStateTrigger можно настроить тремя способами:
- при переходе из «1» в «0» —
new GpioToggleStateTrigger(PinState.LOW, myLed);
- при переходе из «0» в «1» —
new GpioToggleStateTrigger(PinState.HIGH, myLed);
- любое изменение состояния —
new GpioToggleStateTrigger(myLed);
Чтобы проверить как GpioToggleStateTrigger работает, мы можем подключить кнопку и светодиод как показано на схеме ниже и выполнить приведённый код программы.
Схема подключения
Код программы
В этом примере показано, как настроить и использовать триггер GpioToggleStateTrigger. Триггер включает и выключает светодиод если нажимать на кнопку, т.е. когда пин «myButton» меняет состояние из «1» в «0».
import com.pi4j.io.gpio.GpioController; import com.pi4j.io.gpio.GpioFactory; import com.pi4j.io.gpio.GpioPinDigitalInput; import com.pi4j.io.gpio.GpioPinDigitalOutput; import com.pi4j.io.gpio.OrangePiPin; import com.pi4j.io.gpio.PinMode; import com.pi4j.io.gpio.PinPullResistance; import com.pi4j.io.gpio.PinState; import com.pi4j.io.gpio.trigger.GpioToggleStateTrigger; import com.pi4j.platform.Platform; import com.pi4j.platform.PlatformManager; import com.pi4j.util.Console; public class PushButtonGpioToggleStateTrigger { public static void main(String[] args) { try { /* * Поскольку мы не используем платформу Raspberry Pi, мы должны явно * указывать платформу, в нашем случае - это Orange Pi. */ PlatformManager.setPlatform(Platform.ORANGEPI); /* * Создаём экземпляр консоли */ Console console = new Console(); /* * Позволяем пользователю выйти из программы с помощью CTRL-C */ console.promptForExit(); /* * Создаём экземпляр контроллера GPIO */ GpioController gpio = GpioFactory.getInstance(); /* * настройка вывода GPIO.22, задаём режим входа и включаем подтягивающий * резистор в "1" */ GpioPinDigitalInput myButton = gpio.provisionDigitalInputPin( OrangePiPin.GPIO_22, // Номер пина по WiringPi "Кнопка", // Имя пина (необязательный) PinPullResistance.PULL_UP); /* * настроика поведения выключения */ myButton.setShutdownOptions( true, // освобождаем пин PinState.LOW, // задаём состояние 0 PinPullResistance.OFF, // отключаем подтягивающий резистор PinMode.DIGITAL_INPUT);// установливаем режим входа /* * настройка вывода GPIO.24, задаём режим выхода и установливаем значение * LOW при запуске */ GpioPinDigitalOutput myLed = gpio.provisionDigitalOutputPin( OrangePiPin.GPIO_24, // Номер пина по WiringPi "Светодиод", // Имя пина (необязательный) PinState.LOW); // Состояние пина при запуске (необязательный) /* * настроика поведения выключения */ myLed.setShutdownOptions( true, // освобождаем пин PinState.LOW, // задаём состояние 0 PinPullResistance.OFF, // отключаем подтягивающий резистор PinMode.DIGITAL_INPUT);// установливаем режим входа /* * добавляем триггер, который включает и отключает светодиодом "myLed". * Триггер срабатывает при нажатии кнопки (когда на пин "myButton" * меняется состояние из "1" в "0") */ myButton.addTrigger(new GpioToggleStateTrigger(PinState.LOW, myLed)); /* * ждёт, пока пользователь нажмёт CTRL-C */ console.waitForExit(); gpio.shutdown(); } catch (Exception e) { e.printStackTrace(); } } }
Проверяем код:
- создаём java файл и вставляем код;
nano PushButtonGpioToggleStateTrigger.java
- компилируем файл;
javac -classpath .:classes:/opt/pi4j/lib/'*' PushButtonGpioToggleStateTrigger.java
- запускаем программу.
sudo java -classpath .:classes:/opt/pi4j/lib/'*' PushButtonGpioToggleStateTrigger
Результат
Триггеры GpioSyncStateTrigger и GpioInverseSyncStateTrigger
Триггеры GpioSyncStateTrigger (также называется «follow-me») и GpioInverseSyncStateTrigger можно использовать для синхронизации и, соответственно, обратной синхронизации состояния одного пина с другим. GpioSyncStateTrigger работает по принципу «делай как я», т.е. если на входном пине менится состояние из «1» в «0», на выходном также менится. GpioInverseSyncStateTrigger работает по принципу «делай наоборот», если на входном пине состояние менится из «0» в «1», на выходном менится из «1» в «0».
Схема подключения
Код программы
Следующий пример демонстрирует простую реализацию триггера «follow-me» (следи за мной). При нажатии кнопки загорается синий светодиод, а при отжатии — красный.
import com.pi4j.io.gpio.GpioController; import com.pi4j.io.gpio.GpioFactory; import com.pi4j.io.gpio.GpioPinDigitalInput; import com.pi4j.io.gpio.GpioPinDigitalOutput; import com.pi4j.io.gpio.OrangePiPin; import com.pi4j.io.gpio.PinMode; import com.pi4j.io.gpio.PinPullResistance; import com.pi4j.io.gpio.PinState; import com.pi4j.io.gpio.trigger.GpioSyncStateTrigger; import com.pi4j.io.gpio.trigger.GpioInverseSyncStateTrigger; import com.pi4j.platform.Platform; import com.pi4j.platform.PlatformManager; import com.pi4j.util.Console; public class PushButtonGpioInverseSyncStateTrigger { public static void main(String[] args) { try { /* * Поскольку мы не используем платформу Raspberry Pi, мы должны явно * указывать платформу, в нашем случае - это Orange Pi. */ PlatformManager.setPlatform(Platform.ORANGEPI); /* * Создаём экземпляр консоли */ Console console = new Console(); /* * Позволяем пользователю выйти из программы с помощью CTRL-C */ console.promptForExit(); /* * Создаём экземпляр контроллера GPIO */ GpioController gpio = GpioFactory.getInstance(); /* * настройка вывода GPIO.22, задаём режим входа и включаем подтягивающий * резистор в "1" */ GpioPinDigitalInput myButton = gpio.provisionDigitalInputPin( OrangePiPin.GPIO_22, // Номер пина по WiringPi "Кнопка", // Имя пина (необязательный) PinPullResistance.PULL_UP); /* * настроика поведения выключения */ myButton.setShutdownOptions( true, // освобождаем пин PinState.LOW, // задаём состояние 0 PinPullResistance.OFF, // отключаем подтягивающий резистор PinMode.DIGITAL_INPUT);// установливаем режим входа /* * настройка вывода GPIO.24, задаём режим выхода и установливаем значение * LOW при запуске */ GpioPinDigitalOutput redLed = gpio.provisionDigitalOutputPin( OrangePiPin.GPIO_24, // Номер пина по WiringPi "Светодиод", // Имя пина (необязательный) PinState.LOW); // Состояние пина при запуске (необязательный) /* * настроика поведения выключения */ redLed.setShutdownOptions( true, // освобождаем пин PinState.LOW, // задаём состояние 0 PinPullResistance.OFF, // отключаем подтягивающий резистор PinMode.DIGITAL_INPUT);// установливаем режим входа /* * настройка вывода GPIO.23, задаём режим выхода и установливаем значение * LOW при запуске */ GpioPinDigitalOutput blueLed = gpio.provisionDigitalOutputPin( OrangePiPin.GPIO_23, // Номер пина по WiringPi "Светодиод", // Имя пина (необязательный) PinState.LOW); // Состояние пина при запуске (необязательный) /* * настроика поведения выключения */ blueLed.setShutdownOptions( true, // освобождаем пин PinState.LOW, // задаём состояние 0 PinPullResistance.OFF, // отключаем подтягивающий резистор PinMode.DIGITAL_INPUT);// установливаем режим входа /* * добавляем триггер, который синхронизирует состояние пина GPIO.24 с * обратным состоянием пина GPIO.22 */ myButton.addTrigger(new GpioSyncStateTrigger(redLed)); /* * добавляем триггер, который синхронизирует состояние пина GPIO.23 с * состоянием пина GPIO.22 */ myButton.addTrigger(new GpioInverseSyncStateTrigger(blueLed)); /* * ждёт, пока пользователь нажмёт CTRL-C */ console.waitForExit(); gpio.shutdown(); } catch (Exception e) { e.printStackTrace(); } } }
Проверяем код:
- создаём java файл и вставляем код;
nano PushButtonGpioInverseSyncStateTrigger.java
- компилируем файл;
javac -classpath .:classes:/opt/pi4j/lib/'*' PushButtonGpioInverseSyncStateTrigger.java
- запускаем программу.
sudo java -classpath .:classes:/opt/pi4j/lib/'*' PushButtonGpioInverseSyncStateTrigger
Результат
Триггер GpioPulseStateTrigger
Триггер GpioPulseStateTrigger используются для отправки импульсов на пины GPIO на определённое время. Срабатывание триггера GpioPulseStateTrigger можно настроить тремя способами:
- при переходе из «1» в «0» —
new GpioPulseStateTrigger(PinState.LOW, myLed, 1000);
- при переходе из «0» в «1» —
new GpioPulseStateTrigger(PinState.HIGH, myLed, 1000);
- любое изменение состояния —
new GpioPulseStateTrigger(myLed, 1000);
Схема подключения
Код программы
В этом примере я добавил два триггера GpioPulseStateTrigger, чтобы при нажатии на кнопку (переход из «1» в «0») загорелся красный светодиод, а при отжатии (переход из «0» в «1») — синий. Оба светодиода будут гореть по 1000 мс.
import com.pi4j.io.gpio.GpioController; import com.pi4j.io.gpio.GpioFactory; import com.pi4j.io.gpio.GpioPinDigitalInput; import com.pi4j.io.gpio.GpioPinDigitalOutput; import com.pi4j.io.gpio.OrangePiPin; import com.pi4j.io.gpio.PinMode; import com.pi4j.io.gpio.PinPullResistance; import com.pi4j.io.gpio.PinState; import com.pi4j.io.gpio.trigger.GpioPulseStateTrigger; import com.pi4j.platform.Platform; import com.pi4j.platform.PlatformManager; import com.pi4j.util.Console; public class PushButtonGpioPulseStateTrigger { public static void main(String[] args) { try { /* * Поскольку мы не используем платформу Raspberry Pi, мы должны явно * указывать платформу, в нашем случае - это Orange Pi. */ PlatformManager.setPlatform(Platform.ORANGEPI); /* * Создаём экземпляр консоли */ Console console = new Console(); /* * Позволяем пользователю выйти из программы с помощью CTRL-C */ console.promptForExit(); /* * Создаём экземпляр контроллера GPIO */ GpioController gpio = GpioFactory.getInstance(); /* * настройка вывода GPIO.22, задаём режим входа и включаем подтягивающий * резистор в "1" */ GpioPinDigitalInput myButton = gpio.provisionDigitalInputPin( OrangePiPin.GPIO_22, // Номер пина по WiringPi "Кнопка", // Имя пина (необязательный) PinPullResistance.PULL_UP); /* * настроика поведения выключения */ myButton.setShutdownOptions( true, // освобождаем пин PinState.LOW, // задаём состояние 0 PinPullResistance.OFF, // отключаем подтягивающий резистор PinMode.DIGITAL_INPUT);// установливаем режим входа /* * настройка вывода GPIO.24, задаём режим выхода и установливаем значение * LOW при запуске */ GpioPinDigitalOutput redLed = gpio.provisionDigitalOutputPin( OrangePiPin.GPIO_24, // Номер пина по WiringPi "Светодиод", // Имя пина (необязательный) PinState.LOW); // Состояние пина при запуске (необязательный) /* * настроика поведения выключения */ redLed.setShutdownOptions( true, // освобождаем пин PinState.LOW, // задаём состояние 0 PinPullResistance.OFF, // отключаем подтягивающий резистор PinMode.DIGITAL_INPUT);// установливаем режим входа /* * настройка вывода GPIO.23, задаём режим выхода и установливаем значение * LOW при запуске */ GpioPinDigitalOutput blueLed = gpio.provisionDigitalOutputPin( OrangePiPin.GPIO_23, // Номер пина по WiringPi "Светодиод", // Имя пина (необязательный) PinState.LOW); // Состояние пина при запуске (необязательный) /* * настроика поведения выключения */ blueLed.setShutdownOptions( true, // освобождаем пин PinState.LOW, // задаём состояние 0 PinPullResistance.OFF, // отключаем подтягивающий резистор PinMode.DIGITAL_INPUT);// установливаем режим входа /* * добавляем триггер, который включает красный светодиодом "redLed" на * 1000 мс. Триггер срабатывает, когда пин "myButton" меняет состояние из * "1" в "0" */ myButton.addTrigger(new GpioPulseStateTrigger(PinState.LOW, redLed, 1000)); /* * добавляем триггер, который включает синий светодиодом "blueLed" на 1000 * мс. Триггер срабатывает, когда пин "myButton" меняет состояние из "0" в * "1" */ myButton.addTrigger(new GpioPulseStateTrigger(PinState.HIGH, blueLed, 1000)); /* * ждёт, пока пользователь нажмёт CTRL-C */ console.waitForExit(); gpio.shutdown(); } catch (Exception e) { e.printStackTrace(); } } }
Проверяем код:
- создаём java файл и вставляем код;
nano PushButtonGpioPulseStateTrigger.java
- компилируем файл;
javac -classpath .:classes:/opt/pi4j/lib/'*' PushButtonGpioPulseStateTrigger.java
- запускаем программу.
sudo java -classpath .:classes:/opt/pi4j/lib/'*' PushButtonGpioPulseStateTrigger
Результат
Триггер GpioSetStateTrigger
С помощью триггера GpioSetStateTrigger можно задать состояние GPIO пинам. Его можно настроить, чтобы срабатывал при переходе из лог. «0» в лог. «1» (и наоборот) и задал «0» или «1» (PinState.LOW или PinState.HIGH) на другой пин.
Схема подключения
Код программы
В этом примере я добавил два триггера GpioSetStateTrigger, чтобы при нажатии на кнопку светодиод включился, а при отжатии — отключился.
import com.pi4j.io.gpio.GpioController; import com.pi4j.io.gpio.GpioFactory; import com.pi4j.io.gpio.GpioPinDigitalInput; import com.pi4j.io.gpio.GpioPinDigitalOutput; import com.pi4j.io.gpio.OrangePiPin; import com.pi4j.io.gpio.PinMode; import com.pi4j.io.gpio.PinPullResistance; import com.pi4j.io.gpio.PinState; import com.pi4j.io.gpio.trigger.GpioSetStateTrigger; import com.pi4j.platform.Platform; import com.pi4j.platform.PlatformManager; import com.pi4j.util.Console; public class PushButtonGpioSetStateTrigger { public static void main(String[] args) { try { /* * Поскольку мы не используем платформу Raspberry Pi, мы должны явно * указывать платформу, в нашем случае - это Orange Pi. */ PlatformManager.setPlatform(Platform.ORANGEPI); /* * Создаём экземпляр консоли */ Console console = new Console(); /* * Позволяем пользователю выйти из программы с помощью CTRL-C */ console.promptForExit(); /* * Создаём экземпляр контроллера GPIO */ GpioController gpio = GpioFactory.getInstance(); /* * настройка вывода GPIO.22, задаём режим входа и включаем подтягивающий * резистор в "1" */ GpioPinDigitalInput myButton = gpio.provisionDigitalInputPin( OrangePiPin.GPIO_22, // Номер пина по WiringPi "Кнопка", // Имя пина (необязательный) PinPullResistance.PULL_UP); /* * настроика поведения выключения */ myButton.setShutdownOptions( true, // освобождаем пин PinState.LOW, // задаём состояние 0 PinPullResistance.OFF, // отключаем подтягивающий резистор PinMode.DIGITAL_INPUT);// установливаем режим входа /* * настройка вывода GPIO.24, задаём режим выхода и установливаем значение * LOW при запуске */ GpioPinDigitalOutput redLed = gpio.provisionDigitalOutputPin( OrangePiPin.GPIO_24, // Номер пина по WiringPi "Светодиод", // Имя пина (необязательный) PinState.LOW); // Состояние пина при запуске (необязательный) /* * настроика поведения выключения */ redLed.setShutdownOptions( true, // освобождаем пин PinState.LOW, // задаём состояние 0 PinPullResistance.OFF, // отключаем подтягивающий резистор PinMode.DIGITAL_INPUT);// установливаем режим входа /* * добавляем триггер, который включает красный светодиодом "redLed". * Триггер срабатывает, когда пин "myButton" меняет состояние из "0" в "1" */ myButton.addTrigger(new GpioSetStateTrigger(PinState.LOW, redLed, PinState.LOW)); /* * добавляем триггер, который отключает красный светодиодом "redLed". * Триггер срабатывает, когда пин "myButton" меняет состояние из "1" в "0" */ myButton.addTrigger(new GpioSetStateTrigger(PinState.HIGH, redLed, PinState.HIGH)); /* * ждёт, пока пользователь нажмёт CTRL-C */ console.waitForExit(); gpio.shutdown(); } catch (Exception e) { e.printStackTrace(); } } }
Проверяем код:
- создаём java файл и вставляем код;
nano PushButtonGpioSetStateTrigger.java
- компилируем файл;
javac -classpath .:classes:/opt/pi4j/lib/'*' PushButtonGpioSetStateTrigger.java
- запускаем программу.
sudo java -classpath .:classes:/opt/pi4j/lib/'*' PushButtonGpioSetStateTrigger
Результат
Триггер GpioCallbackTrigger
Если вам нужно выполнять какую-то задачу при нажатии кнопки, тогда вы можете использовать триггер GpioCallbackTrigger. Срабатывание триггера можно настроить тремя способами:
- при переходе из «1» в «0»
new GpioCallbackTrigger(PinState.LOW, new Callable<Void>() { public Void call() throws Exception { System.out.println(" --> GPIO 0 "); return null; } });
- при переходе из «0» в «1»
new GpioCallbackTrigger(PinState.HIGH, new Callable<Void>() { public Void call() throws Exception { System.out.println(" --> GPIO 1 "); return null; } });
- любое изменение состояния
new GpioCallbackTrigger(new Callable<Void>() { public Void call() throws Exception { System.out.println(" --> GPIO 0 | 1 "); return null; } });
Схема подключения
Код программы
Этот пример выводит в консоль текст при нажатии/отжатии кнопки.
import java.util.concurrent.Callable; import com.pi4j.io.gpio.GpioController; import com.pi4j.io.gpio.GpioFactory; import com.pi4j.io.gpio.GpioPinDigitalInput; import com.pi4j.io.gpio.OrangePiPin; import com.pi4j.io.gpio.PinMode; import com.pi4j.io.gpio.PinPullResistance; import com.pi4j.io.gpio.PinState; import com.pi4j.io.gpio.trigger.GpioCallbackTrigger; import com.pi4j.platform.Platform; import com.pi4j.platform.PlatformManager; import com.pi4j.util.Console; public class PushButtonGpioCallbackTrigger { public static void main(String[] args) { try { /* * Поскольку мы не используем платформу Raspberry Pi, мы должны явно * указывать платформу, в нашем случае - это Orange Pi. */ PlatformManager.setPlatform(Platform.ORANGEPI); /* * Создаём экземпляр консоли */ Console console = new Console(); /* * Позволяем пользователю выйти из программы с помощью CTRL-C */ console.promptForExit(); /* * Создаём экземпляр контроллера GPIO */ GpioController gpio = GpioFactory.getInstance(); /* * настройка вывода GPIO.22, задаём режим входа и включаем подтягивающий * резистор в "1" */ GpioPinDigitalInput myButton = gpio.provisionDigitalInputPin( OrangePiPin.GPIO_22, // Номер пина по WiringPi "Кнопка", // Имя пина (необязательный) PinPullResistance.PULL_UP); /* * настроика поведения выключения */ myButton.setShutdownOptions( true, // освобождаем пин PinState.LOW, // задаём состояние 0 PinPullResistance.OFF, // отключаем подтягивающий резистор PinMode.DIGITAL_INPUT);// установливаем режим входа /* * добавляем триггер, который выполняет задачу, когда на пин "myButton" * меняется состояние из "0" в "1" */ myButton.addTrigger(new GpioCallbackTrigger(PinState.HIGH, new Callable<Void>() { public Void call() throws Exception { System.out.println(" --> GPIO 1 "); return null; } })); /* * добавляем триггер, который выполняет задачу, когда на пин "myButton" * меняется состояние из "1" в "0" */ myButton.addTrigger(new GpioCallbackTrigger(PinState.LOW, new Callable<Void>() { public Void call() throws Exception { System.out.println(" --> GPIO 0 "); return null; } })); /* * добавляем триггер, который выполняет задачу, когда на пин "myButton" * меняется состояние */ myButton.addTrigger(new GpioCallbackTrigger(new Callable<Void>() { public Void call() throws Exception { System.out.println(" --> GPIO 0 | 1 "); return null; } })); /* * ждёт, пока пользователь нажмёт CTRL-C */ console.waitForExit(); gpio.shutdown(); } catch (Exception e) { e.printStackTrace(); } } }
Проверяем код:
- создаём java файл и вставляем код;
nano PushButtonGpioCallbackTrigger.java
- компилируем файл;
javac -classpath .:classes:/opt/pi4j/lib/'*' PushButtonGpioCallbackTrigger.java
- запускаем программу.
sudo java -classpath .:classes:/opt/pi4j/lib/'*' PushButtonGpioCallbackTrigger
Результат
Надеюсь данные примеры будут вам полезны. Если возникнут какие-то вопросы, пишите, буду рад вам помочь.
https://indianpharmacy.win/# Online medicine order
best canadian online pharmacy: canadian pharmacy win — canadian online pharmacy
https://canadianpharmacy.win/# canadian neighbor pharmacy
http://indianpharmacy.win/# india pharmacy mail order
https://indianpharmacy.win/# Online medicine order
https://mexicanpharmacy.store/# mexico pharmacies prescription drugs
http://canadianpharmacy.win/# buying drugs from canada
http://canadianpharmacy.win/# canadian pharmacy meds
best india pharmacy: Online medicine home delivery — top 10 pharmacies in india
indian pharmacy pharmacy website india indianpharmacy com
https://canadianpharmacy.win/# canadian pharmacy checker
http://canadianpharmacy.win/# canadian discount pharmacy
https://indianpharmacy.win/# top online pharmacy india
https://canadianpharmacy.win/# canadian family pharmacy
world pharmacy india: mail order pharmacy india — online pharmacy india
http://fastpillsformen.com/# Cheap Sildenafil 100mg
https://maxpillsformen.com/# Cialis 20mg price
п»їcialis generic MaxPillsForMen cialis for sale
buy cialis pill MaxPillsForMen Buy Cialis online
https://maxpillsformen.com/# Cialis 20mg price
ed medicine online: п»їed pills online — ed prescriptions online
https://fastpillseasy.com/# where can i buy erectile dysfunction pills
sildenafil over the counter buy viagra online viagra without prescription
low cost ed pills: what is the cheapest ed medication — ed online prescription
low cost ed pills: fast pills easy — buy ed meds
http://maxpillsformen.com/# cialis for sale
http://maxpillsformen.com/# buy cialis pill
http://fastpillsformen.com/# generic sildenafil
viagra without prescription: buy viagra online — Viagra Tablet price
buy viagra here: Fast Pills For Men — sildenafil online
erectile dysfunction online erectile dysfunction pills online cheap erection pills
http://fastpillseasy.com/# ed doctor online
cheapest ed pills: cheap cialis — buy ed medication
Generic Cialis price MaxPillsForMen.com п»їcialis generic
http://fastpillseasy.com/# erectile dysfunction medications online
sildenafil over the counter Viagra generic over the counter Cheap Sildenafil 100mg
ed online prescription: where can i buy erectile dysfunction pills — buy ed pills online
generic sildenafil FastPillsForMen.com Cheapest Sildenafil online
https://fastpillsformen.com/# sildenafil over the counter
online ed treatments: FastPillsEasy — ed prescriptions online
discount ed meds: cheap cialis — ed medicine online
https://fastpillsformen.com/# buy Viagra over the counter
online ed medications: online erectile dysfunction prescription — discount ed pills
https://maxpillsformen.com/# Buy Tadalafil 10mg
what is the cheapest ed medication: FastPillsEasy — cheap ed treatment
Generic Cialis without a doctor prescription MaxPillsForMen Buy Cialis online
Generic Viagra online: Fast Pills For Men — over the counter sildenafil
cheap ed meds online: FastPillsEasy — ed pills
buy erectile dysfunction pills online fast pills easy ed medicine online
https://fastpillseasy.com/# generic ed meds online
Cheap Cialis: Generic Cialis without a doctor prescription — Cialis 20mg price
Cialis over the counter Buy Tadalafil 20mg Generic Cialis price
https://maxpillsformen.com/# Cialis without a doctor prescription
ed meds on line FastPillsEasy cheap ed pills
buy cialis pill: Cialis 20mg price in USA — Cialis 20mg price in USA
http://fastpillsformen.com/# buy Viagra online
buy erectile dysfunction treatment: cheap cialis — where can i get ed pills
п»їcialis generic Generic Cialis without a doctor prescription cialis for sale
online ed pills: fast pills easy — ed meds online
az parayla cok kazandiran slot oyunlar? slot oyunlar? puf noktalar? slot oyunlar? puf noktalar?
sweet bonanza demo oyna: sweet bonanza giris — sweet bonanza slot
Canl? Casino Siteleri: casino bahis siteleri — casino bahis siteleri
yeni deneme bonusu veren siteler deneme bonusu veren yeni siteler deneme bonusu veren yeni siteler
https://casinositeleri25.com/# guvenilir casino siteleri
sweet bonanza kazanma saatleri: sweet bonanza giris — sweet bonanza giris
slot oyunlar?: guvenilir slot siteleri — guvenilir slot siteleri
casino bahis siteleri: rcasino — Casino Siteleri
https://slotsiteleri25.com/# guvenilir slot siteleri
sweet bonanza guncel sweet bonanza oyna sweet bonanza
en cok kazand?ran slot oyunlar?: slot casino siteleri — en kazancl? slot oyunlar?
Deneme Bonusu Veren Siteler: Casino Siteleri — Casino Siteleri
https://denemebonusuverensiteler25.com/# deneme bonusu veren siteler yeni
guvenilir casino siteleri Deneme Bonusu Veren Siteler deneme bonusu bahis siteleri
Deneme Bonusu Veren Siteler: en guvenilir casino siteleri — Casino Siteleri
oyun siteleri Deneme Bonusu Veren Siteler guvenilir casino siteleri
bonus veren bahis siteleri yasal: en iyi bahis sitesi hangisi — canl? casino siteleri
yeni deneme bonusu veren siteler: deneme bonusu veren yeni siteler — deneme bonusu veren siteler
denemebonusuverensiteler25 denemebonusuverensiteler25 deneme bonusu veren yeni siteler
guvenilir slot siteleri: slot casino siteleri — slot oyunlar?
yeni casino siteleri
slot oyunlar? en cok kazand?ran slot oyunlar? slot casino siteleri
Canl? Casino Siteleri: casino bahis siteleri — Canl? Casino Siteleri
https://denemebonusuverensiteler25.com/# deneme bonusu veren siteler
deneme bonusu veren yeni siteler deneme bonusu veren siteler yeni deneme bonusu veren siteler
yat?r?ms?z deneme bonusu veren siteler: deneme bonusu veren yeni siteler — yat?r?ms?z deneme bonusu veren siteler
https://casinositeleri25.com/# Casino Siteleri