JAVA版树莓派呼吸灯完整程序(PWM)及碰到的各种坑
来源:互联网 发布:搜房网网络摇号直播间 编辑:程序博客网 时间:2024/04/28 05:56
网上搜了一下,树莓派LED呼吸灯的程序,有C++和Pyhon的,但是没有发现JAVA的,就尝试自己去做一套。终于做完了,也发出来大家共享一下,同时Mark一下过程中碰到的各种问题及解决方案。
下面就搞一步一步来了,
1. 下载Pi4j Java 类库 (http://pi4j.com/download.html)
此处要注意的是pi4j-1.1.zip中的pi4j-core.jar要替换成pi4j-core-1.2-SNAPSHOT,否则运行程序时,提示错误:只支持BCM2708, BCM2709, 但是你的harware是BCM2835
最终用到的类库如下:
2.设置JDK path, classpath, 为了编译和运行方便,直接设置/usr/testdev/pi4jlibs路径到classpath中去
编辑 /etc/profile文件,加入下图中的内容,保存,并重新载入变量到系统中 source /etc/profile,使添加的内容立刻有效
PI4JLIBPATH=`find /usr/testdev/pi4jlibs -name *.jar|xargs|sed "s/ /:/g"`
export PI4JLIBPATH
export JAVA_HOME=/usr/lib/jvm/jdk-8-oracle-arm32-vfp-hflt
export JRE_HOME=/usr/lib/jvm/jdk-8-oracle-arm32-vfp-hflt/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$PI4JLIBPATH:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
使用命令source /etc/profile重新载入系统变量后,查看pi4j的类库是否已经在CLASSPATH中,如下图
3.编程,程序内容:
1. 要控制LED等缓慢从暗到亮,然后从亮慢慢变暗,需要用PWM函数,并且需要用支持PWM的引脚23/24/26/01
2. 要特别注意引脚的编码,pi4j用的引脚编码是wiringpi的编码,而不是树莓派(sratch2)中的BCM编码,控制错了pin的话,不能点亮LED,如下面代码中用到的脚RaspiPin.GPIO_26是wiringpi的26脚,而不是BCM编码的12。
* * @author (your name) * @version (a version number or a date) */import java.util.*;import com.pi4j.io.gpio.GpioController;import com.pi4j.io.gpio.GpioFactory;import com.pi4j.io.gpio.GpioPinDigitalOutput;import com.pi4j.io.gpio.GpioPinPwmOutput;import com.pi4j.io.gpio.PinState;import com.pi4j.io.gpio.RaspiPin;import com.pi4j.wiringpi.*;public class LEDBreathingLight{ // instance variables - replace the example below with your own private int x; /** * Constructor for objects of class Helloworld */ public LEDBreathingLight() { // initialise instance variables x = 0; } public static void main(String[] args) throws InterruptedException { System.out.println("Let's gogogogogoogo...Breathing~"); // create gpio controller final GpioController gpio = GpioFactory.getInstance(); // initializing a GpioPinPwmOutput pin, 26/24/01final GpioPinPwmOutput pin = gpio.provisionPwmOutputPin(RaspiPin.GPIO_26, "MyLED", 100); // set shutdown state for this pin pin.setShutdownOptions(true, PinState.LOW); int sleep_time = 10; int sleep_time2 = 7; while(true) { // lighting.... for (int i=0; i<=100; i++) { pin.setPwm(i); Thread.sleep(sleep_time); } // darking... for (int i=100; i>0; i--) { pin.setPwm(i); Thread.sleep(sleep_time2); } Thread.sleep(1000); // break 1 second } // (this method will forcefully shutdown all GPIO monitoring threads and scheduled tasks) /* gpio.shutdown(); System.out.println("Exiting ControlGpioExample"); */ } }
4. 编译,运行
因为将pi4j的类库放到了系统变量CLASSPATH中,所以直接javac / java 进行编译和运行写的java类,无需添加classpath路径
javac *.java
java LEDBreathingLight
运行后,LED根据输入PWM值0-100变换,会不断缓慢的变亮及变暗,达到呼吸灯的效果。
- JAVA版树莓派呼吸灯完整程序(PWM)及碰到的各种坑
- 基于PWM的呼吸灯
- STM32 PWM简介及呼吸灯实验
- 51单片机PWM的控制(呼吸灯)
- 基于stm32的pwm呼吸灯
- 【PIC32MZ】PWM呼吸灯
- PWM输出,呼吸灯
- 使用ESP8266的PWM功能,写了一个简单的呼吸灯程序
- 软件模拟PWM——呼吸灯小程序的理解
- STM8S PWM 应用 呼吸灯
- PWM --呼吸灯
- verilog PWM实现呼吸灯
- STM32F407ZET6 关于用PWM(做出呼吸灯)详解
- STM32定时器产生PWM--呼吸灯
- 呼吸灯程序
- 通过矩阵键盘,用PWM来实现呼吸灯的效果
- Qt实用技巧:会呼吸的痛(呼吸点/呼吸灯)
- Qt实用技巧:会呼吸的痛(呼吸点/呼吸灯)
- 数据结构(非线性表)
- Tomcat Linux下启动不了(java.net.MalformedURLException: Local host name unknown: java)
- leetcode Regular Expression Matching
- 快速幂
- 链表结构
- JAVA版树莓派呼吸灯完整程序(PWM)及碰到的各种坑
- JAVA并发读书笔记——volatile与synchronized
- Anvsoft SynciOS Pro(苹果设备管理工具)官方注册版V6.2.6下载 | syncios破解版
- 基本算法思想
- 欢迎使用CSDN-markdown编辑器
- Arch Linux Arm 安装Yaourt
- 2017—11—26
- Data Stream Median
- Mac下安装octave