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
Результат
Надеюсь данные примеры будут вам полезны. Если возникнут какие-то вопросы, пишите, буду рад вам помочь.
Bermain slot bisa menjadi pengalaman sosial http://slotdemo.auction/# Kasino menawarkan pengalaman bermain yang seru
Pemain sering mencoba berbagai jenis slot: preman69 — preman69
Kasino memastikan keamanan para pemain dengan baik https://slot88.company/# Mesin slot digital semakin banyak diminati
Kasino sering mengadakan turnamen slot menarik: BonaSlot — BonaSlot
https://slot88.company/# Mesin slot dapat dimainkan dalam berbagai bahasa
Slot dengan tema budaya lokal menarik perhatian: slotdemo — demo slot pg
http://slotdemo.auction/# Permainan slot bisa dimainkan dengan berbagai taruhan
Slot dengan grafis 3D sangat mengesankan: slot 88 — slot88.company
Beberapa kasino memiliki area khusus untuk slot: garuda888 — garuda888.top
http://slot88.company/# Banyak pemain berusaha untuk mendapatkan jackpot
Slot menawarkan kesenangan yang mudah diakses http://preman69.tech/# Kasino memastikan keamanan para pemain dengan baik
Kasino memiliki suasana yang energik dan menyenangkan: slot demo rupiah — akun demo slot
Bermain slot bisa menjadi pengalaman sosial http://slot88.company/# Mesin slot sering diperbarui dengan game baru
Banyak pemain berusaha untuk mendapatkan jackpot: garuda888 — garuda888.top
http://preman69.tech/# Kasino selalu memperbarui mesin slotnya
https://slotdemo.auction/# Slot dengan tema film terkenal menarik banyak perhatian
BonaSlot bonaslot.site Kasino sering memberikan hadiah untuk pemain setia
Kasino memastikan keamanan para pemain dengan baik: bonaslot — bonaslot.site
Slot klasik tetap menjadi favorit banyak orang: slot88 — slot88.company
Mesin slot menawarkan berbagai tema menarik: garuda888 — garuda888
http://bonaslot.site/# Slot modern memiliki grafik yang mengesankan
Kasino menyediakan layanan pelanggan yang baik https://slotdemo.auction/# Bermain slot bisa menjadi pengalaman sosial
Pemain harus menetapkan batas saat bermain: garuda888 — garuda888
https://slotdemo.auction/# Kasino menawarkan pengalaman bermain yang seru
Slot menawarkan berbagai jenis permainan bonus: bonaslot — bonaslot.site
Banyak kasino memiliki program loyalitas untuk pemain http://slot88.company/# Mesin slot baru selalu menarik minat
http://garuda888.top/# Jackpot progresif menarik banyak pemain
Jackpot progresif menarik banyak pemain https://preman69.tech/# Kasino di Bali menarik banyak pengunjung
https://amohealthpharm.shop/# can you buy amoxicillin uk
https://zithropharm.shop/# zithromax
where can i buy generic clomid pill: ClmHealthPharm — where to buy cheap clomid without dr prescription
https://zithropharm.com/# purchase zithromax z-pak
where to get zithromax Zithro Pharm zithromax 500 mg for sale
https://amohealthpharm.com/# amoxicillin online canada
doxycycline generic brand: Dox Health Pharm — doxycycline for sale usa
doxycycline 100mg without a prescription: doxycycline over the counter uk — doxycycline online paypal
https://zithropharm.com/# zithromax 500 mg lowest price drugstore online
amoxicillin order online: amoxicillin 500mg — how much is amoxicillin
https://zithropharm.com/# zithromax 500mg over the counter
zithromax pill: buy zithromax online cheap — zithromax for sale usa
doxycycline pharmacy online: Dox Health Pharm — buy doxycycline without rx
https://clmhealthpharm.com/# can i get cheap clomid without prescription
how to buy zithromax online: zithromax 250mg — zithromax prescription online
zithromax tablets for sale: Zithro Pharm — buy zithromax online
cheap zithromax pills Zithro Pharm zithromax 500mg over the counter
https://amohealthpharm.shop/# amoxicillin without a doctors prescription
doxycycline 10mg: doxycycline capsules — doxycycline pills
doxycycline online pharmacy doxycycline pharmacy price doxycycline without prescription
doxycycline hyclate 100 mg: cost doxycycline australia — generic for doxycycline
where can i buy cheap clomid price: ClmHealthPharm — how to buy clomid for sale
how to get amoxicillin: amoxil generic — buy amoxicillin online mexico
http://doxhealthpharm.com/# doxycycline prescription coupon
how to get doxycycline 100mg: Dox Health Pharm — doxycycline 100mg australia
https://zithropharm.com/# zithromax for sale us
doxycycline prices: Dox Health Pharm — doxycycline pharmacy uk
http://clmhealthpharm.com/# cost generic clomid pill
buy zithromax: where can i buy zithromax in canada — where to get zithromax over the counter
where can i buy zithromax uk Zithro Pharm zithromax 500
generic zithromax azithromycin: ZithroPharm — buy zithromax online australia
zithromax capsules price: Zithro Pharm — how to buy zithromax online
doxycycline 100 mg order online doxycycline 200 how to buy doxycycline
amoxil generic: Amo Health Pharm — amoxicillin 500mg capsules
purchase amoxicillin online: Amo Health Pharm — amoxicillin 500 mg tablets
amoxicillin 500mg price canada: Amo Health Pharm — amoxicillin 500 mg tablet price
https://clmhealthpharm.com/# buy clomid tablets
buy zithromax without presc: ZithroPharm — zithromax for sale 500 mg
http://amohealthpharm.com/# can you buy amoxicillin uk
doxycycline prescription coupon: Dox Health Pharm — buy doxycycline 500mg
cost cheap clomid without insurance: where to get clomid without insurance — where can i get generic clomid now
purchase amoxicillin online without prescription AmoHealthPharm amoxicillin 500mg capsules price
https://doxhealthpharm.com/# doxycycline buy online india
zithromax cost canada: can i buy zithromax over the counter — how much is zithromax 250 mg
doxycycline hydrochloride: doxycycline 75 mg coupon — doxycycline 100mg canada
buy zithromax 1000mg online: zithromax online australia — zithromax 500mg price in india
cheap zithromax pills Zithro Pharm zithromax 500mg price
http://clmhealthpharm.com/# order generic clomid online
can i purchase doxycycline over the counter: doxycycline 25mg tablets — doxycycline over the counter drug
doxycycline brand in india: Dox Health Pharm — how can i get doxycycline
doxycycline 100mg cost uk: doxycycline 200 mg capsules — doxycycline 100 mg tablets
https://amohealthpharm.shop/# amoxicillin buy canada
where to buy clomid without a prescription can you buy clomid buying generic clomid price
pharmacie en ligne pas cher https://viagrameilleurprix.com/# Le gГ©nГ©rique de Viagra
https://kamagrameilleurprix.shop/# acheter mГ©dicament en ligne sans ordonnance
pharmacies en ligne certifiГ©es
pharmacie en ligne france livraison belgique: Pharmacie sans ordonnance — Achat mГ©dicament en ligne fiable
Viagra Pfizer sans ordonnance Viagra sans ordonnance 24h Le gГ©nГ©rique de Viagra
Viagra sans ordonnance livraison 48h: Viagra sans ordonnance 24h — Viagra gГ©nГ©rique sans ordonnance en pharmacie
pharmacies en ligne certifiГ©es https://pharmaciemeilleurprix.shop/# Pharmacie Internationale en ligne
pharmacies en ligne certifiГ©es: cialis sans ordonnance — п»їpharmacie en ligne france
pharmacie en ligne france livraison internationale: pharmacie en ligne france — п»їpharmacie en ligne france
Pharmacie en ligne livraison Europe kamagra gel п»їpharmacie en ligne france
pharmacie en ligne avec ordonnance: pharmacie en ligne france pas cher — pharmacie en ligne
trouver un mГ©dicament en pharmacie http://pharmaciemeilleurprix.com/# pharmacie en ligne france pas cher
pharmacie en ligne france fiable: cialis sans ordonnance — pharmacie en ligne sans ordonnance
Viagra homme prix en pharmacie sans ordonnance: Viagra pharmacie — Viagra homme prix en pharmacie sans ordonnance
Pharmacie Internationale en ligne https://kamagrameilleurprix.shop/# pharmacie en ligne sans ordonnance
Meilleur Viagra sans ordonnance 24h: viagra en ligne — Viagra femme ou trouver
Viagra femme ou trouver acheter du viagra Viagra sans ordonnance livraison 24h
SildГ©nafil Teva 100 mg acheter: Viagra sans ordonnance 24h — Viagra 100 mg sans ordonnance
https://tadalafilmeilleurprix.shop/# Pharmacie Internationale en ligne
pharmacie en ligne france fiable
https://pharmaciemeilleurprix.com/# pharmacie en ligne pas cher
pharmacie en ligne pas cher
Pharmacie Internationale en ligne: pharmacie en ligne pas cher — п»їpharmacie en ligne france
pharmacie en ligne avec ordonnance: pharmacie en ligne — pharmacie en ligne pas cher
pharmacie en ligne pas cher: achat kamagra — Pharmacie sans ordonnance
acheter mГ©dicament en ligne sans ordonnance: kamagra livraison 24h — Pharmacie Internationale en ligne
pharmacie en ligne livraison europe https://viagrameilleurprix.shop/# Viagra pas cher livraison rapide france
http://tadalafilmeilleurprix.com/# pharmacie en ligne sans ordonnance
pharmacie en ligne fiable
acheter mГ©dicament en ligne sans ordonnance: pharmacie en ligne pas cher — Pharmacie Internationale en ligne
https://kamagrameilleurprix.com/# pharmacie en ligne france livraison belgique
trouver un mГ©dicament en pharmacie
https://kamagrameilleurprix.com/# п»їpharmacie en ligne france
pharmacie en ligne france fiable
acheter mГ©dicament en ligne sans ordonnance https://tadalafilmeilleurprix.shop/# pharmacie en ligne fiable
vente de mГ©dicament en ligne http://kamagrameilleurprix.com/# Pharmacie en ligne livraison Europe
pharmacie en ligne france livraison belgique [url=http://tadalafilmeilleurprix.com/#]Cialis sans ordonnance 24h[/url] Pharmacie Internationale en ligne
http://viagrameilleurprix.com/# Viagra sans ordonnance 24h suisse
pharmacie en ligne avec ordonnance
Viagra pas cher livraison rapide france viagra sans ordonnance Viagra pas cher paris
pharmacie en ligne france pas cher http://pharmaciemeilleurprix.com/# pharmacie en ligne
Achat mГ©dicament en ligne fiable: cialis prix — Pharmacie Internationale en ligne
Viagra prix pharmacie paris: viagra sans ordonnance — SildГ©nafil 100mg pharmacie en ligne
http://tadalafilmeilleurprix.com/# pharmacie en ligne fiable
pharmacie en ligne
SildГ©nafil 100mg pharmacie en ligne: Viagra pharmacie — Viagra gГ©nГ©rique sans ordonnance en pharmacie
pharmacie en ligne france livraison internationale https://kamagrameilleurprix.com/# pharmacie en ligne france pas cher
Pharmacie sans ordonnance: kamagra livraison 24h — trouver un mГ©dicament en pharmacie
vente de mГ©dicament en ligne: Tadalafil sans ordonnance en ligne — acheter mГ©dicament en ligne sans ordonnance
pharmacie en ligne avec ordonnance http://pharmaciemeilleurprix.com/# Pharmacie Internationale en ligne
https://viagrameilleurprix.com/# Prix du Viagra en pharmacie en France
pharmacie en ligne pas cher
Pharmacie sans ordonnance: Pharmacies en ligne certifiees — trouver un mГ©dicament en pharmacie
pharmacie en ligne pas cher http://tadalafilmeilleurprix.com/# pharmacie en ligne fiable
SildГ©nafil 100 mg sans ordonnance: Viagra sans ordonnance 24h — Viagra gГ©nГ©rique sans ordonnance en pharmacie
https://tadalafilmeilleurprix.shop/# pharmacie en ligne france livraison belgique
pharmacie en ligne sans ordonnance
pharmacie en ligne sans ordonnance: kamagra livraison 24h — Pharmacie en ligne livraison Europe
pharmacie en ligne pas cher https://viagrameilleurprix.com/# Viagra gГ©nГ©rique sans ordonnance en pharmacie
SildГ©nafil 100 mg sans ordonnance: viagra sans ordonnance — SildГ©nafil Teva 100 mg acheter
http://viagrameilleurprix.com/# Acheter viagra en ligne livraison 24h
п»їpharmacie en ligne france
https://pharmaciemeilleurprix.shop/# pharmacie en ligne
pharmacie en ligne fiable
vente de mГ©dicament en ligne http://viagrameilleurprix.com/# Viagra homme sans ordonnance belgique
pharmacie en ligne france pas cher: pharmacie en ligne sans ordonnance — pharmacie en ligne france livraison belgique
pharmacie en ligne http://tadalafilmeilleurprix.com/# pharmacie en ligne france fiable
trouver un mГ©dicament en pharmacie: pharmacie en ligne — pharmacie en ligne livraison europe
pharmacie en ligne avec ordonnance Cialis sans ordonnance 24h pharmacie en ligne avec ordonnance
pharmacie en ligne livraison europe: cialis generique — pharmacie en ligne livraison europe
trouver un mГ©dicament en pharmacie https://viagrameilleurprix.com/# Viagra homme sans prescription
pharmacie en ligne avec ordonnance: pharmacie en ligne — pharmacies en ligne certifiГ©es
Achat mГ©dicament en ligne fiable cialis prix п»їpharmacie en ligne france
pharmacie en ligne france fiable: pharmacie en ligne — pharmacies en ligne certifiГ©es
https://viagrameilleurprix.com/# Viagra homme prix en pharmacie sans ordonnance
Achat mГ©dicament en ligne fiable
https://tadalafilmeilleurprix.shop/# Achat mГ©dicament en ligne fiable
pharmacie en ligne france fiable
https://kamagrameilleurprix.shop/# vente de mГ©dicament en ligne
pharmacie en ligne france livraison belgique
Pharmacie Internationale en ligne https://kamagrameilleurprix.com/# Achat mГ©dicament en ligne fiable
Prix du Viagra 100mg en France viagra en ligne Viagra 100 mg sans ordonnance
https://viagrameilleurprix.shop/# Viagra 100 mg sans ordonnance
pharmacie en ligne
Viagra homme prix en pharmacie sans ordonnance: Acheter Sildenafil 100mg sans ordonnance — SildГ©nafil Teva 100 mg acheter
pharmacie en ligne livraison europe: Pharmacies en ligne certifiees — pharmacie en ligne france livraison internationale
https://kamagrameilleurprix.shop/# pharmacie en ligne france livraison belgique
pharmacie en ligne avec ordonnance
pharmacie en ligne livraison europe https://tadalafilmeilleurprix.shop/# pharmacie en ligne livraison europe
Achat mГ©dicament en ligne fiable kamagra livraison 24h Pharmacie en ligne livraison Europe
pharmacie en ligne france fiable http://pharmaciemeilleurprix.com/# Pharmacie Internationale en ligne
pharmacie en ligne livraison europe: Acheter Cialis — pharmacies en ligne certifiГ©es
pharmacie en ligne livraison europe: pharmacie en ligne france — pharmacie en ligne fiable
https://kamagrameilleurprix.com/# pharmacie en ligne avec ordonnance
п»їpharmacie en ligne france
trouver un mГ©dicament en pharmacie https://tadalafilmeilleurprix.com/# Pharmacie sans ordonnance
https://viagrameilleurprix.com/# Viagra gГ©nГ©rique sans ordonnance en pharmacie
pharmacie en ligne france livraison internationale
pharmacie en ligne france fiable pharmacie en ligne pas cher Pharmacie Internationale en ligne
acheter mГ©dicament en ligne sans ordonnance kamagra gel pharmacies en ligne certifiГ©es
pharmacie en ligne pas cher https://kamagrameilleurprix.shop/# pharmacie en ligne france livraison internationale
https://tadalafilmeilleurprix.com/# vente de mГ©dicament en ligne
vente de mГ©dicament en ligne
http://tadalafilmeilleurprix.com/# Pharmacie Internationale en ligne
Pharmacie sans ordonnance
pharmacie en ligne livraison europe: kamagra livraison 24h — п»їpharmacie en ligne france
https://tadalafilmeilleurprix.com/# pharmacies en ligne certifiГ©es
pharmacie en ligne sans ordonnance
https://viagrameilleurprix.shop/# Viagra gГ©nГ©rique sans ordonnance en pharmacie
pharmacie en ligne france fiable
Achat mГ©dicament en ligne fiable https://viagrameilleurprix.shop/# Viagra sans ordonnance livraison 24h
Viagra homme prix en pharmacie: viagra sans ordonnance — Viagra homme prix en pharmacie sans ordonnance
п»їpharmacie en ligne france http://kamagrameilleurprix.com/# Achat mГ©dicament en ligne fiable
vente de mГ©dicament en ligne: pharmacie en ligne — pharmacies en ligne certifiГ©es