В первом уроке мы заставили светодиод мигать и таким образом научились отправлять единички и нули (логические) на пины GPIO. Во втором уроке по изучению Pi4J, мы узнаем как считывать цифровые данные с GPIO, а для тестирования мы будем подключить кнопку и инфракрасный датчик движения HC-SR501.
Как подключить кнопку
Самый простой способ изменения состояния пина из «1» в «0» и наоборот — это подключить и нажать обычную кнопку.
Схема подключения кнопки
Схема, как мы видим, очень простая и состоит из: Orange Pi, макетной платы, кнопки и двух проводов. Нарисована в fritzing, очень удобная штука, да и красиво выглядит.
Код программы
Если для подачи и снятия рабочего напряжения на пины GPIO используется интерфейс GpioPinDigitalOutput
, то для чтения используется GpioPinDigitalInput
.
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.event.GpioPinDigitalStateChangeEvent; import com.pi4j.io.gpio.event.GpioPinListenerDigital; import com.pi4j.platform.Platform; import com.pi4j.platform.PlatformManager; import com.pi4j.util.Console; public class PushButton { 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.23, задаём режим входа и включаем подтягивающий * резистор в "1" */ GpioPinDigitalInput myButton = gpio.provisionDigitalInputPin( OrangePiPin.GPIO_23, // Номер пина по WiringPi "Кнопка", // Имя пина (необязательный) PinPullResistance.PULL_UP); // включаем подтягивающий (необязательный) /* * настроика поведения выключения */ myButton.setShutdownOptions( true, // освобождаем пин PinState.LOW, // задаём состояние 0 PinPullResistance.OFF, // отключаем подтягивающий резистор PinMode.DIGITAL_INPUT);// установливаем режим входа /* * Это объект, который "слушает" и исполняет код в зависимости от события. */ myButton.addListener(new GpioPinListenerDigital() { @Override public void handleGpioPinDigitalStateChangeEvent(GpioPinDigitalStateChangeEvent event) { if (event.getState() == PinState.LOW) { System.out.println(" --> Кнопка нажата: " + event.getPin() + " = " + event.getState()); } else { System.out.println(" --> Кнопка не нажата: " + event.getPin() + " = " + event.getState()); } } }); /* * ждёт, пока пользователь нажмёт CTRL-C */ console.waitForExit(); gpio.shutdown(); } catch (Exception e) { e.printStackTrace(); } } }
Чтобы проверить данный код нужно:
- создать java файл, вставить код (в PuTTY это делается правой кнопкой мыши) и сохранить файл (CTRL+X, Y, ENTER);
nano PushButton.java
- скомпилировать этот файл;
javac -classpath .:classes:/opt/pi4j/lib/'*' -d . PushButton.java
- запустить программу.
sudo java -classpath .:classes:/opt/pi4j/lib/'*' PushButton
Результат
Как подключить HC-SR501
Подключить кнопку и нажать её — это хорошо, но давайте попробуем что-то поинтереснее, к примеру, датчик движения и присутствия — HC-SR501. Более того мы подключим светодиод и включим его, когда датчик обнаружит играющегося кота. Всё это можно сделать и без этих одноплатных компьютеров, но мы-то не ищем лёгких путей.
Схема подключения HC-SR501
Код программы
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.GpioPinShutdown; 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.event.GpioPinDigitalStateChangeEvent; import com.pi4j.io.gpio.event.GpioPinListenerDigital; import com.pi4j.io.gpio.impl.GpioPinShutdownImpl; import com.pi4j.platform.Platform; import com.pi4j.platform.PlatformManager; import com.pi4j.util.Console; public class PushButtonHcSr501 { /** * @param args */ 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.23, задаём режим входа и включаем подтягивающий * резистор в "1" */ GpioPinDigitalInput myButton = gpio.provisionDigitalInputPin( OrangePiPin.GPIO_23, // Номер пина по WiringPi "HC-SR501", // Имя пина (необязательный параметр) PinPullResistance.PULL_UP); // включаем подтягивающий (необязательный // параметр) /* * настройка вывода GPIO.24, задаём режим выхода и установливаем значение * LOW при запуске */ GpioPinDigitalOutput myLed = gpio.provisionDigitalOutputPin( OrangePiPin.GPIO_24, // Номер пина по WiringPi "Светодиод", // Имя пина (необязательный параметр) PinState.LOW); // Состояние пина при запуске (необязательный параметр) GpioPinShutdown pinShutdown = new GpioPinShutdownImpl(); /* * установливаем режим входа */ pinShutdown.setMode(PinMode.DIGITAL_INPUT); /* * отключаем подтягивающий резистор */ pinShutdown.setPullResistor(PinPullResistance.OFF); /* * задаём состояние "0" */ pinShutdown.setState(PinState.LOW); /* * освобождаем пин */ pinShutdown.setUnexport(true); /* * настроика поведения выключения */ myLed.setShutdownOptions(pinShutdown); myButton.setShutdownOptions(pinShutdown); /* * Это объект, который "слушает" и исполняет код в зависимости от события. */ myButton.addListener(new GpioPinListenerDigital() { @Override public void handleGpioPinDigitalStateChangeEvent(GpioPinDigitalStateChangeEvent event) { System.out.println(" --> Состояние пина: " + event.getPin() + " = " + event.getState()); /* * Включаем/выключаем светодиод */ myLed.setState(event.getState()); } }); /* * ждёт, пока пользователь нажмёт CTRL-C */ console.waitForExit(); gpio.shutdown(); } catch (Exception e) { e.printStackTrace(); } } }
Проверяем код:
- создаём java файл и вставляем код;
nano PushButtonHcSr501.java
- компилируем файл;
javac -classpath .:classes:/opt/pi4j/lib/'*' -d . PushButtonHcSr501.java
- запускаем программу.
sudo java -classpath .:classes:/opt/pi4j/lib/'*' PushButtonHcSr501
Результат
Удачи! Если у вас возникнут какие-то вопросы, пишите, буду рад вам помочь.
При подключении к Orange Pi Zero к пину OrangePiPin.GPIO_01 и на некоторых других пинах (10, 4, 1, 5) в коде с кнопкой выдает ошибку «Unable to open GPIO edge interface for pin 1: Permission denied» (Даже если запускать от sudo), но на некоторых пинах работает. Подскажите пожалуйста, как заставить работать код?
Betzula guncel giris, casino oyunlar? konusunda benzersiz secenekler sunar. derbi heyecan? icin en h?zl? sekilde yuksek oranlar? kesfedebilirsiniz.
Betzula’n?n mobil uyumlu tasar?m?, her cihazdan erisim imkan? tan?r. Bet Zula sosyal medya hesaplar?yla ozel promosyonlardan haberdar olabilirsiniz.
Turkiye Super Lig derbilerinin en iyi oranlarla kazanc saglayabilirsiniz.
Ayr?ca, platformun en yeni versiyonu, kullan?c?lara s?n?rs?z erisim sunar. Ozel olarak, fenerbahce galatasaray betzula, profesyonel bir deneyim saglar.
Betzula, en genis bahis seceneklerinden ozel turnuvalara kadar tum kullan?c?lar?n ihtiyaclar?n? kars?lar. Fenerbahce Galatasaray derbisi icin bahis yapmak icin simdi giris yap?n!
371212+
Betzula guncel giris, spor bahisleri konusunda benzersiz secenekler sunar. Fenerbahce Galatasaray derbisi icin en h?zl? sekilde canl? bahis oynamaya baslayabilirsiniz.
Betzula’n?n yuksek guvenlik onlemleri, her cihazdan erisim imkan? tan?r. Betzula Twitter hesab?n? takip ederek bonus f?rsatlar?ndan haberdar olabilirsiniz.
en onemli spor etkinliklerinin bahislerinizi an?nda yapabilirsiniz.
Ayr?ca, bet zula giris linki, mobil cihazlar uzerinden kolay erisim sunar. Ozel olarak, betzula giris, profesyonel bir deneyim saglar.
Betzula, spor bahislerinden canl? casino oyunlar?na kadar tum kullan?c?lar?n ihtiyaclar?n? kars?lar. favori tak?m?n?z?n galibiyetini kutlamak icin simdi giris yap?n!
707707+
порно мамочки порно мамочки .
как вывести деньги 1win https://www.bbcc.com.kg .
elonbet elonbet .
скачать 1win официальный сайт https://www.bbcc.com.kg .
электрокарниз купить в москве электрокарниз купить в москве .
виагра для мужчин виагра для мужчин .
карнизы с электроприводом карнизы с электроприводом .
гибкий электрокарниз привод https://prokarniz20.ru/ .
карниз с приводом карниз с приводом .
гардина с электроприводом гардина с электроприводом .
карниз для штор с электроприводом карниз для штор с электроприводом .
шторы электрические шторы электрические .
электро шторы на окна электро шторы на окна .
электрические рулонные шторы купить электрические рулонные шторы купить .
рольшторы на окно http://www.prokarniz13.ru .
карнизы для римских штор карнизы для римских штор .
somfy купить somfy купить .
grey sp5der hoodie https://www.spiderhoodie-us.com/spider-hoodies .
Как заменить турбину на машине и не переплатить втрое больше. Типичная схема развода на замену турбины. Будьте осторожны. Подробности тут Как заменить турбину на машине и не переплатить втрое больше. Типичная схема развода на замену турбины. Будьте осторожны. Подробности тут .
организация проведения соут организация проведения соут .
соут москва соут москва .
Скороговорки для детей Скороговорки для детей .
Стихи для детей Стихи для детей .
электрические рулонные шторы электрические рулонные шторы .
войти мостбет https://mostbet3.com.kg/ .
обучение по охране труда на предприятии в Москве https://ohrana-truda-distancionno.ru/ .
скачать мостбет на андроид бесплатно старая версия mostbet4.com.kg .
охрана труда соут рабочего места охрана труда соут рабочего места .
специальная оценка условий труда организации специальная оценка условий труда организации .
накрутка подписчиков Твич бесплатно накрутка подписчиков Твич бесплатно .
1вин ставки http://www.1win1.com.kg .
1win скачать kg http://1win1.com.kg/ .
mines pro 1win mines pro 1win .
1 win online https://www.1win8.com.kg .
1вин официальный http://www.1win8.com.kg/ .
1win бонусы спорт как использовать http://1win7.com.kg .