【发布时间】:2014-02-05 21:44:39
【问题描述】:
我有一个 Raspberry Pi 版本。 2(512mb 内存版本)。我有一些通过 Pi4J 控制的 LED。除了我连接/连接到引脚 21/27 的 LED 之外,每个 LED 都可以工作。我已经更换了 LED 以查看是否有一个坏了,但它没有坏。 我在google上做了一些研究,发现this。不幸的是,我找不到将 Pin21 更改为 27 的方法,因为 Pi4j 使用了另一种编号方案。 (编号见here)
我在我的代码中找不到错误,但它看起来像这样:
封装 gpio;
import com.pi4j.io.gpio.GpioController;
import com.pi4j.io.gpio.GpioFactory;
import com.pi4j.io.gpio.GpioPinDigitalOutput;
import com.pi4j.io.gpio.RaspiPin;
public class GPIOController {
final long second = 1000L;
final GpioController gpio = GpioFactory.getInstance();
final GpioPinDigitalOutput red_1 = gpio
.provisionDigitalOutputPin(RaspiPin.GPIO_03);
final GpioPinDigitalOutput red_2 = gpio
.provisionDigitalOutputPin(RaspiPin.GPIO_02);
final GpioPinDigitalOutput yellow_1 = gpio
.provisionDigitalOutputPin(RaspiPin.GPIO_00);
final GpioPinDigitalOutput yellow_2 = gpio
.provisionDigitalOutputPin(RaspiPin.GPIO_07);
final GpioPinDigitalOutput green_1 = gpio
.provisionDigitalOutputPin(RaspiPin.GPIO_06);
final GpioPinDigitalOutput green_2 = gpio
.provisionDigitalOutputPin(RaspiPin.GPIO_05);
final GpioPinDigitalOutput green_3 = gpio
.provisionDigitalOutputPin(RaspiPin.GPIO_04);
final GpioPinDigitalOutput green_4 = gpio
.provisionDigitalOutputPin(RaspiPin.GPIO_01);
public GPIOController() {
gpio.shutdown();
}
// level 1 = red_1, level 8 = green_4
public void pulse(int level) {
allLow();
switch(level) {
case 1:
red_1.pulse(second);
break;
case 2:
red_2.pulse(second);
break;
case 3:
yellow_1.pulse(second);
break;
case 4:
yellow_2.pulse(second);
break;
case 5:
green_1.pulse(second);
break;
case 6:
green_2.pulse(second);
break;
case 7:
green_3.pulse(second);
break;
case 8:
green_4.pulse(second);
break;
}
}
public void high(int level) {
allLow();
switch(level) {
case 1:
red_1.high();
break;
case 2:
red_2.high();
break;
case 3:
yellow_1.high();
break;
case 4:
yellow_2.high();
break;
case 5:
green_1.high();
break;
case 6:
green_2.high();
break;
case 7:
green_3.high();
break;
case 8:
green_4.high();
break;
}
}
public void allLow() {
gpio.shutdown();
}
}
我通过这个类调用方法:
package connection;
import gpio.GPIOController;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
public class Receiver {
private ServerSocket server;
private Socket client;
private DataInputStream clientIn;
private DataOutputStream clientOut;
private GPIOController gpioController = new GPIOController();
public Receiver(int port) throws IOException {
server = new ServerSocket(port);
listenForClient();
}
// client listener in a new thread
public void listenForClient() {
Runnable listener = new Runnable() {
public void run() {
while (true)
try {
// only the most recently connected client
// can control the LEDs
client = server.accept();
} catch (IOException e) {
e.printStackTrace(System.out);
}
}
};
Thread listenerThread = new Thread(listener);
listenerThread.setName("Client Listener");
listenerThread.start();
}
// command listener in a new thread
public void listenForCommands() {
final Runnable listener = new Runnable() {
public void run() {
while (true) {
try {
if (client != null) {
DataInputStream clientIn = new DataInputStream(
client.getInputStream());
String msg = clientIn.readUTF();
handleMessage(msg);
}
} catch (IOException e) {
e.printStackTrace(System.out);
}
}
}
};
Thread listenerThread = new Thread(listener);
listenerThread.setName("Command Listener");
listenerThread.start();
}
public void handleMessage(String msg) {
String[] command = msg.split(" ");
String commandType = command[0]; // "pulse" or "permanent"
for (int i = 1; i < command.length; i++) {
try {
if (commandType.equals("pulse"))
gpioController.pulse(Integer.parseInt(command[i]));
else
gpioController.high(Integer.parseInt(command[i]));
} catch (Exception e) {
try {
clientOut = new DataOutputStream(client.getOutputStream());
clientOut.writeUTF(e.getMessage());
} catch (IOException ioe) {
ioe.printStackTrace(System.out);
}
}
}
}
public static void main(String[] args) {
try {
new Receiver(8374).listenForCommands();
} catch (IOException e) {
e.printStackTrace(System.out);
}
}
}
我可以做些什么来让 Pin 正常工作(包括快速而肮脏的解决方案)?顺便一提;我不想使用 P5 引脚,因为我使用的是 PiCobbler。我也想为此使用Java。 提前致谢。
塞利姆
【问题讨论】:
-
@Andrew 谢谢!我什至不知道覆盆子有一个专门的网站
标签: java raspberry-pi gpio