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
Результат

Надеюсь данные примеры будут вам полезны. Если возникнут какие-то вопросы, пишите, буду рад вам помочь.









To maximize the benefits of these workout routines, it is
essential to use correct kind techniques. This contains keeping the shoulders slightly in entrance
of the barbell during the deadlift, and aggressively
hinging from the hips during the Romanian deadlift.
Common faults in the Romanian deadlift include locking the knees,
bending the knees too much, going down too far, and not
keeping the bar on the thighs. By utilizing proper type and incorporating these workouts right
into a well-rounded training program, individuals can construct muscle mass and strength, improve bone mineral density,
and reduce the risk of injury. In this article, we are going to explore the shape, benefits,
and variations between deadlift and Romanian deadlift.
Deadlifts and Romanian deadlifts, which require using multiple muscle groups,
could be effective in selling bone health. Nonetheless,
you will need to consult with a healthcare professional before beginning any new exercise program, significantly if you have a historical past of
osteoporosis or different bone-related conditions. By coaching the
physique to take care of stability and stability underneath different situations, people can improve their
general performance in strength coaching and day by day actions.
Enhancing physique consciousness, coordination, and balance is a crucial side of any
energy coaching program, as research have shown that resistance coaching can improve stability by up to
45%. To correctly execute these workouts, you will need to perceive the
differences in vary of motion between the two
variations. Whereas these are both deadlifts, the biomechanics differ drastically.
This is seen in a few variables, including hip flexion, knee flexion, and vary of movement.
Whether you perform the motion with dumbbells, a kettlebell or a
barbell, all of them deserve a spot in your workout routine.
RDLs develop the energy of the posterior chain muscles, together with the erector spinae, glutes, hamstrings and
adductors. The RDL is a superb accent movement used to strengthen a lifter’s conventional deadlift.
Now you’ve worked on your kind, and you would possibly be ready for that heavy deadlift.
Remember to take the identical precautions whereas finishing a Romanian deadlift as
you would for the standard deadlift. The primary and secondary muscles used in the Romanian deadlift are similar
to the deadlift. The deadlift works some muscle tissue directly
(primary), and others are serving to to stabilize (secondary).
The shoulders within the deadlift are stored barely
in front of the barbell, whereas the shoulders within the Romanian deadlift are a lot additional in front of the barbell.
Romanian deadlifts are the most secure choice for folks with low back pain.
And with a bar shaft that’s balanced, floor, polished, and examined, you’ll
all the time have the right quantity of fluid, flexing motion through your raise.
Plus, a shiny zinc coating protects towards scratches and
corrosion, whereas bronze bushings between the shaft and sleeve provide a easy and consistent roll.
Let’s break down the differences between these two important lifts—and how to choose between them
for your coaching. You will be in a position to raise more weight with the deadlift vs Romanian deadlift.
The Romanian deadlift was rated as one of my top deadlift progressions to take
your lift from a newbie to advanced stage.
Rounding your decrease back throughout heavy deadlifts puts
uneven pressure on your backbone. At All Times carry with a
neutral decrease back, permitting for the pure inward curve of your decrease backbone.
Both the standard and Romanian Deadlifts are great
energy and muscle constructing exercises.
In this text we are going to concentrate on the difference between the Romanian Deadlift and commonplace deadlifts.
It is carried out by standing with your feet hip-width aside, knees slightly bent, and again straight.
You will then lower your torso by bending at the hips, keeping your again straight and core engaged.
Decrease the weight until you’re feeling a stretch in your hamstrings, then return to the beginning place.
When comparing the two workout routines,
you will want to think about individual goals, coaching focus,
and biomechanics.
Deadlifts and Romanian deadlifts are both wonderful workout routines for
building strength and muscle mass. The best exercise for you
is determined by your particular person fitness goals and desires.
If you want to construct power in the again, legs, and glutes,
then each deadlifts and Romanian deadlifts are good
choices. However, if you are seeking to specifically goal the
hamstrings and glutes, then the Romanian deadlift may be a more smart choice.
Basically, if your goal is maximal strength and powerlifting efficiency, typical deadlifts should be your go-to.
References:
what does steroids do to the body (https://choose-for-me.com/)
перепродажа аккаунтов гарантия при продаже аккаунтов
площадка для продажи аккаунтов профиль с подписчиками
Purchase Ready-Made Accounts Account Selling Service
Account market Buy Pre-made Account
Secure Account Purchasing Platform Account marketplace
Accounts market Accounts for Sale
ready-made accounts for sale sell accounts
account trading account exchange
secure account sales sell account
online account store account trading platform
buy pre-made account account exchange service
purchase ready-made accounts account marketplace
profitable account sales secure account sales
buy and sell accounts website for selling accounts
account purchase buy accounts
account catalog gaming account marketplace
gaming account marketplace guaranteed accounts
account marketplace buy and sell accounts
sell accounts buy and sell accounts
account trading platform https://accounts-marketplace.xyz/
find accounts for sale https://social-accounts-marketplaces.live/
online account store https://accounts-marketplace-best.pro
продать аккаунт https://akkaunt-magazin.online
facebook ad accounts for sale buy facebook account for ads
cheap facebook account cheap facebook accounts
buy google ads verified account https://buy-ads-invoice-account.top/
buy verified google ads account buy-account-ads.work
buy verified facebook business manager https://buy-bm-account.org/
buy bm facebook business-manager-for-sale.org
buy tiktok ads accounts https://tiktok-ads-account-for-sale.org
tiktok ads account for sale https://buy-tiktok-ads-accounts.org
facebook ads accounts sell accounts account market
https://t.me/s/play_1win_online
pure cocaine in prague vhq cocaine in prague
where can i buy cheap clomid pill buy clomid Generic Clomid
buy clomid: Clomid fertility — Generic Clomid
AmoxDirect USA Purchase amoxicillin online buy amoxil
buy zithromax: order zithromax without prescription — cheap zithromax
can you buy amoxicillin uk Purchase amoxicillin online order amoxicillin uk
discreet delivery for ED medication: safe online pharmacy for ED pills — Tadalafil tablets
Tadalafil tablets: Tadalafil tablets — safe online pharmacy for ED pills
http://neurocaredirect.com/# gabapentin capsules for nerve pain
FDA-approved Tadalafil generic: FDA-approved Tadalafil generic — tadalafil otc usa
gabapentin capsules for nerve pain: gabapentin capsules for nerve pain — generic gabapentin pharmacy USA
generic ivermectin online pharmacy order Stromectol discreet shipping USA buy ivermectin pill
http://everlastrx.com/# FDA-approved Tadalafil generic
online pharmacy Prednisone fast delivery: online pharmacy Prednisone fast delivery — Prednisone without prescription USA
order Stromectol discreet shipping USA: ivermectin coronavirus — generic ivermectin online pharmacy
online pharmacy Prednisone fast delivery how to get Prednisone legally online best pharmacy prednisone
gabapentin no prescription: neuropathic pain relief treatment online — Neurontin online without prescription USA
generic tadalafil in canada: how to order Cialis online legally — FDA-approved Tadalafil generic
https://neurocaredirect.shop/# NeuroCare Direct
FDA-approved Tadalafil generic FDA-approved Tadalafil generic discreet delivery for ED medication
https://predniwellonline.com/# online pharmacy Prednisone fast delivery
affordable Neurontin medication USA generic gabapentin pharmacy USA neuropathic pain relief treatment online
http://everlastrx.com/# FDA-approved Tadalafil generic
online pharmacy Prednisone fast delivery: Prednisone without prescription USA — online pharmacy Prednisone fast delivery
Prednisone tablets online USA: prednisone 10 mg tablets — Prednisone tablets online USA
gabapentin capsules for nerve pain affordable Neurontin medication USA generic gabapentin pharmacy USA
FDA-approved gabapentin alternative gabapentin capsules for nerve pain neuropathic pain relief treatment online
http://predniwellonline.com/# PredniWell Online
https://medivermonline.com/# Stromectol ivermectin tablets for humans USA
generic ivermectin online pharmacy: order Stromectol discreet shipping USA — generic ivermectin online pharmacy
can you take vitamin d with gabapentin: NeuroCare Direct — neuropathic pain relief treatment online
how to get Prednisone legally online: prednisone brand name in usa — PredniWell Online
online pharmacy Prednisone fast delivery: Prednisone tablets online USA — PredniWell Online
3000mg prednisone online pharmacy Prednisone fast delivery PredniWell Online
https://everlastrx.shop/# cheap generic tadalafil 5mg
discreet delivery for ED medication discreet delivery for ED medication Tadalafil tablets
http://everlastrx.com/# discreet delivery for ED medication
discreet delivery for ED medication: how to order Cialis online legally — discreet delivery for ED medication
Mediverm Online: generic ivermectin online pharmacy — generic ivermectin online pharmacy
toxicity of gabapentin: affordable Neurontin medication USA — Neurontin online without prescription USA
Tadalafil tablets discreet delivery for ED medication tadalafil pills 20mg
http://predniwellonline.com/# how to get Prednisone legally online
http://everlastrx.com/# FDA-approved Tadalafil generic
ivermectin for kids: Mediverm Online — generic ivermectin online pharmacy
Neurontin online without prescription USA affordable Neurontin medication USA gabapentin capsules for nerve pain
PredniWell Online: Prednisone tablets online USA — Prednisone tablets online USA
Prednisone without prescription USA: Prednisone without prescription USA — prednisone 10 mg over the counter
prednisone 10mg tablet price: how to get Prednisone legally online — online pharmacy Prednisone fast delivery
https://neurocaredirect.com/# generic gabapentin pharmacy USA
trusted Stromectol source online generic ivermectin online pharmacy trusted Stromectol source online
https://neurocaredirect.com/# FDA-approved gabapentin alternative
EverLastRx: how to order Cialis online legally — safe online pharmacy for ED pills
prednisone 5 mg brand name: Prednisone tablets online USA — PredniWell Online
http://predniwellonline.com/# how to get Prednisone legally online
https://predniwellonline.shop/# how to get Prednisone legally online
Tadalafil tablets: how to order Cialis online legally — generic tadalafil india
https://everlastrx.shop/# how to order Cialis online legally
prednisone 4mg tab how to get Prednisone legally online Prednisone without prescription USA
Prednisone tablets online USA: PredniWell Online — how much is prednisone 10 mg
tadalafil 5mg best price Tadalafil tablets FDA-approved Tadalafil generic
Prednisone tablets online USA online pharmacy Prednisone fast delivery online pharmacy Prednisone fast delivery
EverLastRx safe online pharmacy for ED pills safe online pharmacy for ED pills
http://medivermonline.com/# low-cost ivermectin for Americans
ivermectin 1.87 dosage for humans
cost of tadalafil in india: safe online pharmacy for ED pills — EverLastRx
https://medivermonline.com/# order Stromectol discreet shipping USA
Prednisone without prescription USA: Prednisone tablets online USA — buy prednisone online without a prescription
order Stromectol discreet shipping USA Mediverm Online ivermectin acne
https://medivermonline.shop/# Mediverm Online
http://medivermonline.com/# trusted Stromectol source online
generic ivermectin online pharmacy
ivermectin for goats tractor supply: order Stromectol discreet shipping USA — Stromectol ivermectin tablets for humans USA
discreet delivery for ED medication: safe online pharmacy for ED pills — how to order Cialis online legally
Mediverm Online: Stromectol ivermectin tablets for humans USA — generic ivermectin online pharmacy
cost of prednisone in canada prednisone 20mg online without prescription how to get Prednisone legally online
https://predniwellonline.com/# PredniWell Online
BritMeds Direct: UK online pharmacy without prescription — private online pharmacy UK
https://britmedsdirect.shop/# BritMeds Direct
UK online pharmacy without prescription: pharmacy online UK — online pharmacy
https://britmedsdirect.com/# online pharmacy
BritMeds Direct: Brit Meds Direct — BritMeds Direct
BritPharm Online viagra uk buy viagra
buy penicillin alternative online buy amoxicillin UK online antibiotic service
BritPharm Online BritPharm Online British online pharmacy Viagra
buy penicillin alternative online buy amoxicillin Amoxicillin online UK
http://medreliefuk.com/# Prednisolone tablets UK online
private online pharmacy UK: order medication online legally in the UK — order medication online legally in the UK
Viagra online UK: British online pharmacy Viagra — order ED pills online UK
viagra: buy viagra online — Viagra online UK
https://medreliefuk.com/# MedRelief UK
https://britmedsdirect.com/# Brit Meds Direct
pharmacy online UK: Brit Meds Direct — Brit Meds Direct
British online pharmacy Viagra: BritPharm Online — Viagra online UK
generic amoxicillin: generic amoxicillin — generic amoxicillin
электрокарниз двухрядный цена elektrokarnizy797.ru .
электрокарнизы в москве электрокарнизы в москве .
перепланировка нежилого помещения в нежилом здании перепланировка нежилого помещения в нежилом здании .
перепланировка нежилых помещений перепланировка нежилых помещений .
согласовать перепланировку нежилого помещения http://pereplanirovka-nezhilogo-pomeshcheniya9.ru .
автоматический карниз для штор karniz-elektroprivodom.ru .
viagra uk: order ED pills online UK — viagra uk
http://medreliefuk.com/# Prednisolone tablets UK online
https://amoxicareonline.shop/# buy penicillin alternative online
Prednisolone tablets UK online: UK chemist Prednisolone delivery — cheap prednisolone in UK
http://amoxicareonline.com/# buy amoxicillin
http://amoxicareonline.com/# buy amoxicillin
buy corticosteroids without prescription UK: MedRelief UK — cheap prednisolone in UK
Amoxicillin online UK: generic amoxicillin — UK online antibiotic service
generic Amoxicillin pharmacy UK buy penicillin alternative online buy penicillin alternative online
Brit Meds Direct: pharmacy online UK — order medication online legally in the UK
натяжные потолки самара с установкой https://www.natyazhnye-potolki-samara-1.ru .
потолочкин ру самара https://stretch-ceilings-samara.ru .
натяжные потолки цена самара натяжные потолки цена самара .
buy corticosteroids without prescription UK: MedRelief UK — best UK online chemist for Prednisolone
buy penicillin alternative online: generic Amoxicillin pharmacy UK — Amoxicillin online UK
generic amoxicillin: buy amoxicillin — amoxicillin uk
viagra: viagra — viagra
buy corticosteroids without prescription UK: order steroid medication safely online — best UK online chemist for Prednisolone
buy prednisolone: cheap prednisolone in UK — buy corticosteroids without prescription UK
best UK online chemist for Prednisolone: best UK online chemist for Prednisolone — best UK online chemist for Prednisolone
Prednisolone tablets UK online best UK online chemist for Prednisolone UK chemist Prednisolone delivery
потолку потолку .
потолки натяжные в нижнем новгороде http://www.natyazhnye-potolki-nizhniy-novgorod.ru .
натяжной потолок цена нижний новгород http://www.stretch-ceilings-nizhniy-novgorod.ru .
потолочкин ру нижний новгород http://www.natyazhnye-potolki-nizhniy-novgorod-1.ru .
https://britpharmonline.com/# Viagra online UK
UK online pharmacy without prescription: pharmacy online UK — Brit Meds Direct
https://amoxicareonline.shop/# UK online antibiotic service
pharmacy online UK Brit Meds Direct BritMeds Direct
https://amoxicareonline.com/# generic amoxicillin
большая кухня на заказ kuhni-spb-3.ru .
online pharmacy: buy amoxil — ZenCareMeds
generic Cialis online pharmacy tadalafil tablets without prescription trusted online pharmacy for ED meds
mexican pharmacy: mexican pharmacy — MedicoSur
safe online pharmacy for Cialis: discreet ED pills delivery in the US — tadalafil tablets without prescription
https://medicosur.shop/# mexico pharmacy
http://tadalifepharmacy.com/# trusted online pharmacy for ED meds
https://tadalifepharmacy.com/# discreet ED pills delivery in the US
MedicoSur: mexican pharmacy — mexico pharmacy
http://zencaremeds.com/# buy amoxil
mexico drug store: MedicoSur — best mexican pharmacy
affordable Cialis with fast delivery tadalafil tablets without prescription safe online pharmacy for Cialis
https://tadalifepharmacy.shop/# affordable Cialis with fast delivery
buy cialis online: TadaLife Pharmacy — discreet ED pills delivery in the US
tadalafil tablets without prescription: safe online pharmacy for Cialis — tadalafil tablets without prescription
generic Cialis online pharmacy: affordable Cialis with fast delivery — discreet ED pills delivery in the US
generic Cialis online pharmacy TadaLife Pharmacy generic Cialis online pharmacy
Cialis online USA Cialis online USA TadaLife Pharmacy
https://tadalifepharmacy.com/# affordable Cialis with fast delivery
http://tadalifepharmacy.com/# TadaLife Pharmacy
https://zencaremeds.shop/# ZenCare Meds com
buy amoxil: safe online medication store — order medicine discreetly USA
buy cialis online: generic Cialis online pharmacy — tadalafil tablets without prescription
https://zencaremeds.com/# buy amoxil
trusted online pharmacy for ED meds: Cialis online USA — affordable Cialis with fast delivery
ZenCareMeds buy amoxil safe online medication store
http://tadalifepharmacy.com/# buy cialis online
mostbet login https://mostbet4182.ru/
http://tadalifepharmacy.com/# affordable Cialis with fast delivery
buy cialis online: discreet ED pills delivery in the US — buy cialis online
проект перепланировки http://www.proekt-pereplanirovki-kvartiry16.ru/ .
generic Cialis online pharmacy tadalafil tablets without prescription TadaLife Pharmacy
https://tadalifepharmacy.shop/# discreet ED pills delivery in the US
http://tadalifepharmacy.com/# generic Cialis online pharmacy
order from mexico: mexico pharmacy — MedicoSur
mexico pharmacy: meds from mexico — mexico pharmacy
https://tadalifepharmacy.com/# safe online pharmacy for Cialis
cialis: buy cialis online — trusted online pharmacy for ED meds
https://zencaremeds.com/# buy Doxycycline
mexican pharmacy: mexican pharmacy — mexican pharmacy
https://zencaremeds.com/# buy clomid
https://medicosur.shop/# mexico pharmacy
узаконить перепланировку цена https://www.zakazat-proekt-pereplanirovki-kvartiry11.ru .
где согласовать перепланировку квартиры https://www.soglasovanie-pereplanirovki-kvartiry14.ru .
safe online pharmacy for Cialis: buy cialis online — generic Cialis online pharmacy
проект перепланировки проект перепланировки .
перепланировка https://www.soglasovanie-pereplanirovki-kvartiry3.ru .
перепланировка квартиры согласование перепланировка квартиры согласование .
trusted online pharmacy for ED meds: Cialis online USA — safe online pharmacy for Cialis
affordable Cialis with fast delivery: buy cialis online — Cialis online USA
https://tadalifepharmacy.com/# TadaLife Pharmacy
buy clomid safe online medication store buy propecia
mostbet uz скачать ios mostbet4185.ru
http://zencaremeds.com/# buy propecia
http://tadalifepharmacy.com/# generic Cialis online pharmacy
cialis: Cialis online USA — affordable Cialis with fast delivery
tadalafil tablets without prescription: discreet ED pills delivery in the US — trusted online pharmacy for ED meds
https://zencaremeds.shop/# ZenCare Meds
http://tadalifepharmacy.com/# generic Cialis online pharmacy
mexico pharmacy: mexican pharmacy — mexican pharmacy
mexican pharmacy mexico drug store mexico pharmacy
https://potenzvital.com/# cialis 20mg preis
cialis kaufen: online apotheke — Potenz Vital
tadalafilo 5 mg precio: cialis precio — Cialis genérico económico
online apotheke rezept cialis kaufen ohne rezept apotheke online
http://intimisante.com/# IntimiSante
tadalafil sans ordonnance: achat discret de Cialis 20mg — Cialis générique pas cher
cialis generika: cialis 20mg preis — Potenz Vital
medikamente rezeptfrei: cialis kaufen — PotenzVital
cialis kaufen ohne rezept: Cialis generika günstig kaufen — tadalafil 20 mg preis
http://tadalafiloexpress.com/# farmacias online seguras
http://tadalafiloexpress.com/# cialis generico
https://intimisante.shop/# achat discret de Cialis 20mg
Cialis Preisvergleich Deutschland: Cialis generika günstig kaufen — PotenzVital
https://pilloleverdi.com/# cialis prezzo
Cialis Preisvergleich Deutschland Potenz Vital cialis 20mg preis
https://pilloleverdi.shop/# compresse per disfunzione erettile
Potenz Vital Cialis generika günstig kaufen online apotheke versandkostenfrei
cialis prix Cialis générique pas cher Cialis générique pas cher
migliori farmacie online 2024: farmacia online italiana Cialis — pillole verdi
farmacia online fiable en España: farmacia online fiable en España — farmacia online fiable en España
https://potenzvital.com/# cialis kaufen ohne rezept
achat discret de Cialis 20mg: tadalafil sans ordonnance — Cialis générique pas cher
https://pilloleverdi.shop/# farmacia online italiana Cialis
https://potenzvital.com/# tadalafil 20 mg preis
Tadalafil 20mg Bestellung online cialis kaufen Cialis generika günstig kaufen
Cialis genérico económico Tadalafilo Express comprar cialis
cialis kaufen: medikamente rezeptfrei — tadalafil 20 mg preis
cialis kaufen: Tadalafil 20mg Bestellung online — online apotheke rezept
cd alarm clock https://alarm-radio-clocks.com .
https://pilloleverdi.shop/# tadalafil senza ricetta
livraison rapide et confidentielle: cialis sans ordonnance — cialis sans ordonnance
acquistare Cialis online Italia: compresse per disfunzione erettile — tadalafil senza ricetta
pharmacie qui vend du cialis sans ordonnance Cialis générique pas cher pharmacie en ligne france livraison internationale
http://tadalafiloexpress.com/# cialis precio
https://tadalafiloexpress.com/# farmacia online barata
https://pilloleverdi.com/# farmacia online italiana Cialis
tadalafil 20 mg preis: Cialis generika günstig kaufen — Tadalafil 20mg Bestellung online
cialis generico: tadalafil senza ricetta — tadalafil italiano approvato AIFA
tadalafil senza ricetta: cialis prezzo — pillole verdi
tadalafil 20 mg preis cialis kaufen ohne rezept Cialis Preisvergleich Deutschland
Cialis genérico económico: comprar cialis — tadalafilo
PilloleVerdi: cialis — pillole verdi
https://pilloleverdi.com/# tadalafil senza ricetta
farmacia online fiable en España comprar cialis comprar Cialis online España
Cialis generika günstig kaufen: tadalafil 20 mg preis — Cialis Preisvergleich Deutschland
acquistare Cialis online Italia farmacia online italiana Cialis cialis generico
potenzmittel cialis: internet apotheke — Tadalafil 20mg Bestellung online
cialis farmacia online italiana Cialis farmacia online piГ№ conveniente
http://tadalafiloexpress.com/# tadalafilo sin receta
vente de mГ©dicament en ligne: cialis prix — cialis generique
farmacia online italiana Cialis: tadalafil italiano approvato AIFA — cialis prezzo
miglior prezzo Cialis originale: miglior prezzo Cialis originale — tadalafil senza ricetta
1вин blackjack 1вин blackjack
топ digital компаний россии luchshie-digital-agencstva.ru .
рейтинг сео агентств рейтинг сео агентств .
продвижение сайта москва продвижение сайта москва .
п»їshop apotheke gutschein cialis generika Tadalafil 20mg Bestellung online
comprar Cialis online España: tadalafilo sin receta — comprar cialis
cialis generique cialis generique Cialis générique pas cher
tadalafil senza ricetta: cialis generico — cialis generico
продвижение сайтов топ 10 компаний http://reiting-seo-agentstv.ru/ .
farmacia online barata y fiable: farmacia online fiable en España — tadalafilo
tadalafil italiano approvato AIFA: cialis prezzo — acquistare Cialis online Italia
http://tadalafiloexpress.com/# tadalafilo
https://potenzvital.com/# tadalafil 20 mg preis
топ seo топ seo .
seo продвижение сайта цена в москве seo продвижение сайта цена в москве .
https://tadalafiloexpress.com/# Tadalafilo Express
http://potenzvital.com/# gГјnstige online apotheke
cialis generico tadalafilo 5 mg precio comprar Cialis online España
apotheke online п»їshop apotheke gutschein Cialis generika günstig kaufen
http://tadalafiloexpress.com/# farmacia online fiable en Espana
cialis generico: dove comprare Cialis in Italia — cialis generico
https://potenzvital.com/# tadalafil 20 mg preis
comprar Cialis online España: comprar cialis — tadalafilo sin receta
dove comprare Cialis in Italia: dove comprare Cialis in Italia — pillole verdi
achat discret de Cialis 20mg: pharmacie en ligne france livraison internationale — pharmacie en ligne avec ordonnance
http://potenzvital.com/# internet apotheke
https://pilloleverdi.shop/# tadalafil italiano approvato AIFA
cialis generika cialis generika cialis kaufen
potenzmittel cialis: cialis kaufen — internet apotheke
farmacia online italiana Cialis: miglior prezzo Cialis originale — PilloleVerdi
cialis kaufen: cialis kaufen — PotenzVital
cialis generico: cialis generico — tadalafilo 5 mg precio
пин ап ставки на теннис http://pinup5008.ru
технический перевод требования http://dzen.ru/a/aPFFa3ZMdGVq1wVQ .
медицинский перевод заключений http://www.telegra.ph/Medicinskij-perevod-tochnost-kak-vopros-zhizni-i-zdorovya-10-16 .
Cialis Preisvergleich Deutschland: Potenz Vital — PotenzVital
Sildenafil side effects and safe dosage: how generic Viagra works in the body — cheap viagra
Blue Peak Meds: Viagra Tablet price — sildenafil 50 mg price
http://medivertraut.com/# MediVertraut
https://bluepeakmeds.com/# Viagra generic price comparison
https://santehommefrance.shop/# SanteHommeFrance
NHS Viagra cost alternatives Brit Meds Uk Viagra online UK
Sildenafil ohne Rezept: MediVertraut — Sildenafil 100 mg bestellen
Sildenafil Citrate Tablets 100mg: BluePeakMeds — Blue Peak Meds
discreet shipping for ED medication: Viagra generic price comparison — BluePeakMeds
licensed online pharmacy UK: ED medication online UK — Brit Meds Uk
https://medivertraut.com/# sichere Online-Apotheke Deutschland
sildenafil online discreet shipping for ED medication BluePeakMeds
http://britmedsuk.com/# ED medication online UK
trusted British pharmacy: affordable potency tablets — trusted British pharmacy
Sildenafil 100 mg bestellen: MediVertraut — MediVertraut
Potenzmittel rezeptfrei kaufen: Billig Viagra bestellen ohne Rezept — Potenzmittel günstig online
1xbetgiri? http://1xbet-giris-5.com/ .
1xbet mobi http://www.1xbet-giris-2.com/ .
1x lite http://www.1xbet-giris-6.com .
1xbet giris 1xbet giris .
1xbet tr 1xbet-giris-1.com .
Sildenafil side effects and safe dosage: how generic Viagra works in the body — Blue Peak Meds
pharmacie en ligne fiable France: Viagra générique pas cher — Viagra sans ordonnance avis
BritMedsUk: BritMedsUk — NHS Viagra cost alternatives
sildenafil 50 mg ou 100 mg posologie: prix du Viagra générique en France — pharmacie en ligne fiable France
1xbet mobil giri? 1xbet mobil giri? .
1xbet spor bahislerinin adresi 1xbet spor bahislerinin adresi .
https://bluepeakmeds.com/# Viagra generic price comparison
prix du Viagra générique en France: pharmacie en ligne fiable France — pharmacie française agréée en ligne
Sildenafil Wirkung und Dosierung Potenzmittel rezeptfrei kaufen Sildenafil Wirkung und Dosierung
https://bluepeakmeds.shop/# viagra without prescription
BluePeakMeds how generic Viagra works in the body how generic Viagra works in the body
Sildenafil Wirkung und Dosierung: Potenzmittel günstig online — Sildenafil Wirkung und Dosierung
Sildenafil online reviews: Sildenafil side effects and safe dosage — Sildenafil online reviews
https://santehommefrance.shop/# prix du Viagra generique en France
Viagra générique pas cher prix du Viagra générique en France SanteHommeFrance
1xbet t?rkiye 1xbet t?rkiye .
Potenzmittel rezeptfrei kaufen: Sildenafil ohne Rezept — Potenzmittel günstig online
order Viagra discreetly: Brit Meds Uk — licensed online pharmacy UK
sildenafil 50 mg ou 100 mg posologie: SildГ©nafil 100mg pharmacie en ligne — Viagra pas cher livraison rapide france
1xbet giris http://1xbet-7.com/ .
https://mannensapotek.shop/# Viagra utan lakarbesok
Sildenafil-tabletter pris: Sildenafil-tabletter pris — apotek online utan recept
http://mannensapotek.com/# kop receptfria potensmedel online
https://mediuomo.com/# Viagra generico con pagamento sicuro
http://mediuomo.com/# pillole per disfunzione erettile
mannens apotek onlineapotek för män apotek online utan recept
http://herengezondheid.com/# online apotheek zonder recept
trattamento ED online Italia comprare Sildenafil senza ricetta Viagra generico online Italia
Sildenafil zonder recept bestellen online apotheek zonder recept online apotheek zonder recept
Viagra generico con pagamento sicuro: farmaci per potenza maschile — pillole per disfunzione erettile
1 win промокод на деньги 1 win промокод на деньги
Viagra online kopen Nederland: ED-medicatie zonder voorschrift — HerenGezondheid
https://confiafarmacia.shop/# pastillas de potencia masculinas
https://confiafarmacia.shop/# farmacia confiable en Espana
Medi Uomo: Medi Uomo — Viagra generico online Italia
trattamento ED online Italia: Viagra generico online Italia — ordinare Viagra generico in modo sicuro
https://confiafarmacia.com/# Viagra generico online Espana
comprare Sildenafil senza ricetta trattamento ED online Italia Viagra generico online Italia
köp receptfria potensmedel online: Sildenafil-tabletter pris — MannensApotek
https://mannensapotek.shop/# apotek online utan recept
1xbet resmi giri? 1xbet-13.com .
1xbet 1xbet .
ED-medicatie zonder voorschrift Viagra online kopen Nederland Heren Gezondheid
1xbet ?yelik https://1xbet-10.com .
кухни спб на заказ http://www.kuhni-spb-2.ru/ .
Viagra genérico online España: Confia Farmacia — ConfiaFarmacia
farmacia online para hombres farmacia online para hombres ConfiaFarmacia
goedkope Viagra tabletten online: officiële Sildenafil webshop — officiële Sildenafil webshop
miglior sito per acquistare Sildenafil online: miglior sito per acquistare Sildenafil online — Viagra generico online Italia
https://confiafarmacia.shop/# Viagra sin prescripcion medica
mannens apotek: onlineapotek för män — Viagra utan läkarbesök
Viagra generico con pagamento sicuro Viagra generico online Italia pillole per disfunzione erettile
Viagra genérico online España pastillas de potencia masculinas ConfiaFarmacia
farmacia online para hombres: comprar Sildenafilo sin receta — Viagra sin prescripción médica
Viagra generico con pagamento sicuro MediUomo Viagra generico online Italia
медтехника http://www.medicinskaya-tehnika.ru .
медицинский наркологический центр http://www.narkologicheskaya-klinika-23.ru/ .
медицинское оборудование медицинское оборудование .
https://confiafarmacia.com/# comprar Sildenafilo sin receta
https://mannensapotek.com/# Sildenafil utan recept
trattamento ED online Italia: MediUomo — MediUomo
goedkope Viagra tabletten online: erectiepillen discreet bestellen — online apotheek zonder recept
https://confiafarmacia.com/# comprar Sildenafilo sin receta
Confia Farmacia: ConfiaFarmacia — farmacia confiable en España
https://herengezondheid.shop/# betrouwbare online apotheek
Sildenafil zonder recept bestellen: Heren Gezondheid — Viagra online kopen Nederland
https://mediuomo.shop/# pillole per disfunzione erettile
comprare Sildenafil senza ricetta ordinare Viagra generico in modo sicuro ordinare Viagra generico in modo sicuro
comprar Sildenafilo sin receta ConfiaFarmacia Viagra sin prescripción médica
ConfiaFarmacia: pastillas de potencia masculinas — Confia Farmacia
Viagra generico online Italia: comprare Sildenafil senza ricetta — ordinare Viagra generico in modo sicuro
https://mannensapotek.com/# onlineapotek for man
trattamento ED online Italia: miglior sito per acquistare Sildenafil online — pillole per disfunzione erettile
köpa Viagra online Sverige: erektionspiller på nätet — onlineapotek för män
comprare Sildenafil senza ricetta Viagra generico con pagamento sicuro trattamento ED online Italia
закодироваться в москве закодироваться в москве .
наркологическая помощь наркологическая помощь .
мостбет казино зеркало http://mostbet12031.ru/
Viagra genérico online España farmacia online para hombres Viagra sin prescripción médica
гидроизоляция цена москва http://gidroizolyaciya-cena-7.ru .
Viagra generico online Italia: Viagra generico online Italia — Medi Uomo
Medi Uomo: ordinare Viagra generico in modo sicuro — trattamento ED online Italia
наркологическая больница наркологическая больница .
http://herengezondheid.com/# veilige online medicijnen Nederland
betrouwbare online apotheek: Viagra online kopen Nederland — Sildenafil zonder recept bestellen
http://herengezondheid.com/# HerenGezondheid
farmacia con entrega rápida farmacia con entrega rápida farmacia online para hombres
officiële Sildenafil webshop Viagra online kopen Nederland betrouwbare online apotheek
вода в подвале https://gidroizolyaciya-podvala-cena.ru .
гидроизоляция подвала цена гидроизоляция подвала цена .
http://mannensapotek.com/# apotek online utan recept
köpa Viagra online Sverige: apotek online utan recept — erektionspiller på nätet
http://mediuomo.com/# trattamento ED online Italia
https://mediuomo.shop/# Viagra generico online Italia
https://mediuomo.shop/# Viagra generico con pagamento sicuro
Viagra utan läkarbesök Sildenafil-tabletter pris billig Viagra Sverige
miglior sito per acquistare Sildenafil online: miglior sito per acquistare Sildenafil online — Viagra generico con pagamento sicuro
erektionspiller på nätet MannensApotek billig Viagra Sverige
торкретирование москва torkretirovanie-1.ru .
Spedra: farmacia viva — farmacia viva
https://mannvital.shop/# ereksjonspiller pa nett
FarmaciaViva: Spedra prezzo basso Italia — Spedra prezzo basso Italia
top clock radio alarm-radio-clocks.com .
melbet официальный сайт melbet официальный сайт .
продвижение по трафику продвижение по трафику .
интернет маркетинг статьи интернет маркетинг статьи .
https://vitalpharma24.com/# vitalpharma24
ereksjonspiller på nett: billig Viagra Norge — nettapotek for menn
Potenzmittel ohne ärztliches Rezept Kamagra Oral Jelly Deutschland Kamagra Wirkung und Nebenwirkungen
comprare medicinali online legali: Spedra prezzo basso Italia — Spedra prezzo basso Italia
Viagra reseptfritt Norge: ereksjonspiller på nett — generisk Viagra 50mg / 100mg
http://mannvital.com/# generisk Viagra 50mg / 100mg
vital pharma 24: vital pharma 24 — diskrete Lieferung per DHL
локальное seo блог http://www.statyi-o-marketinge7.ru .
acheter Kamagra en ligne Sildenafil générique acheter Kamagra en ligne
Kamagra Oral Jelly Deutschland: vital pharma 24 — Kamagra online kaufen
https://mannvital.shop/# nettapotek for menn
generisk Viagra 50mg / 100mg: nettapotek for menn — Sildenafil tabletter pris
kamagra oral jelly: kamagra — kamagra oral jelly
http://mannvital.com/# viagra reseptfri
Spedra: FarmaciaViva — Spedra prezzo basso Italia
FarmaciaViva: Spedra prezzo basso Italia — differenza tra Spedra e Viagra
https://farmaciavivait.shop/# Spedra prezzo basso Italia
seo с нуля http://kursy-seo-11.ru/ .
http://farmaciavivait.com/# pillole per disfunzione erettile
https://farmaciavivait.com/# Spedra prezzo basso Italia
vital pharma 24: Potenzmittel ohne ärztliches Rezept — Kamagra Wirkung und Nebenwirkungen
Kamagra Oral Jelly Deutschland: Kamagra online kaufen — diskrete Lieferung per DHL
Kamagra oral jelly France: kamagra oral jelly — kamagra
https://vitahomme.com/# Sildenafil generique
pillole per disfunzione erettile: pillole per disfunzione erettile — acquistare Spedra online
vitalpharma24: Kamagra Oral Jelly Deutschland — Erfahrungen mit Kamagra 100mg
vitalpharma24: Kamagra Oral Jelly Deutschland — Kamagra online kaufen
курс seo http://www.kursy-seo-12.ru/ .
vitalpharma24: Erfahrungen mit Kamagra 100mg — vital pharma 24