Introduction: Use Button to Control LED on PcDuino With Java

In a previous post, we looked at how to blink LED using Java GPIO control. In this post, we will look at how to use program with Java to implement a LED controlled by a button.

Step 1: Parts List

Parts List:

1 x Linker LED module
Several male to female jumper wires
1 x Linker Button module
1 x pcDuino v2

Step 2: Wiring Diagram

The components are wired in the following way:

GND of Linker LED module to GND of pcDuino2
SIG of Linker LED module to Digital 8 of pcDuino2
GND of Linker Button module to GND of pcDuino2
VCC of Linker Button module to 5V of pcDuino2
SIG of Linker Button module to Digital 9 of pcDuino2

Step 3: Sample Code

The sample code of GPIO control class is shown below:
package com.test;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class GPIO_Pin {

    private String modeURI = "/sys/devices/virtual/misc/gpio/mode/";
    private String statusURI = "/sys/devices/virtual/misc/gpio/pin/";
    private int pin = 0;
    public static final String HIGH = "1", LOW = "0", INPUT = "0", OUTPUT = "1", INPUT_PU = "8";

    public GPIO_Pin(int pin) {
        modeURI += "gpio" + pin;
        statusURI += "gpio" + pin;
        this.pin = pin;
    }

    public GPIO_Pin(String pin) {
        // Finalize file paths
        modeURI += "gpio" + pin;
        statusURI += "gpio" + pin;
        this.pin =Integer.parseInt(pin);
    }

    public int getPin() {
        return pin;
    }

    public void overrideURI(String uri) {
        modeURI = uri + "mode/gpio" + pin;
        statusURI = uri + "pin/gpio" + pin;
    }

    public void setMode(String mode) {
        writeToFile(getModeURI(), mode);
    }

    public void set(String state) {
        writeToFile(getStatusURI(), state);
    }

    public void setHIGH() {
        writeToFile(getStatusURI(), HIGH);
    }

    public void setLOW() {
        writeToFile(getStatusURI(), LOW);
    }

    public void setModeINPUT() {
        writeToFile(getModeURI(), INPUT);
    }

    public void setModeOUTPUT() {
        writeToFile(getModeURI(), OUTPUT);
    }

    public void setModeINPUT_PU() {
        writeToFile(getModeURI(), INPUT_PU);
    }

    public String getModeURI() {
        return modeURI;
    }

    public String getStatusURI() {
        return statusURI;
    }

    public String getPinMode() {
        try {
            BufferedReader reader = new BufferedReader(new FileReader(getModeURI()));
            String data = reader.readLine();
            reader.close();
            return data;
        } catch (IOException e) {
        }
        return "";
    }

    public String getPinStatus() {
        try {
            BufferedReader reader = new BufferedReader(new FileReader(getStatusURI()));
            String data = reader.readLine();
            reader.close();
            return data;
        } catch (IOException e) {
        }
        return "";
    }

    private void writeToFile(String URI, String data) {
        try {
            File file = new File(URI);
            file.delete();
            File newFile = new File(URI);
            newFile.createNewFile();
            FileWriter writer = new FileWriter(URI);
            writer.write(data);
            writer.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Test Code:
package com.test;

public class Test {
    public static void main(String[] args) throws InterruptedException {
        GPIO_Pin ledpin=new GPIO_Pin(8);
        GPIO_Pin buttenpin=new GPIO_Pin(9);
        ledpin.setModeOUTPUT();
        buttenpin.setModeINPUT();
        while (true) {
        if("1".equals(buttenpin.getPinStatus()))
            ledpin.setHIGH();
         else
            ledpin.setLOW();
         Thread.sleep(4);
        }
    }
}

Step 4: Results

Run the Java code, when we pressed the button, the LED will turn on:

Step 5: Results

It will turn off when we released the button: