Sudah bisa DigitalOutput, DigitalInput. Juga sudah menambahkan class NanoPi.

This commit is contained in:
2024-11-14 14:24:27 +07:00
parent 1dd019604f
commit f9b76e09ad
5 changed files with 85 additions and 28 deletions

35
src/Device/NanoPi.java Normal file
View File

@@ -0,0 +1,35 @@
package Device;
public class NanoPi {
public int GetGPIO(int pin){
int GPIONum;
if (pin == 9){
GPIONum = 363;
} else if (pin == 11) {
GPIONum = 203;
} else if (pin==2) {
GPIONum=5;
} else if (pin==4) {
GPIONum=4;
} else if (pin == 8) {
GPIONum=11;
} else if (pin==10) {
GPIONum=12;
} else if (pin==12) {
GPIONum=13;
}else if (pin==14) {
GPIONum=14;
}else if (pin==16) {
GPIONum=16;
}else if (pin==18) {
GPIONum=15;
}else if (pin==20) {
GPIONum=199;
}else if (pin==22) {
GPIONum=198;
}else {
GPIONum=-1;
}
return GPIONum;
}
}

View File

@@ -1,7 +1,5 @@
import java.io.IOException;
public class DigitalInput {
private int pinnya=0;
private final int pinnya;
private boolean currentIsON = false;
private boolean initialized = false;
@@ -12,7 +10,10 @@ public class DigitalInput {
public DigitalInput(int pin_number) {
// if (jGPIO.osname=="") jGPIO.detectOS();
pinnya = pin_number;
if (Setup_Pin()) initialized = true;
if (Setup_Pin()) {
initialized = true;
}
Runtime.getRuntime().addShutdownHook(new Thread(this::Release));
}
private boolean Setup_Pin() {

View File

@@ -1,9 +1,12 @@
public class DigitalOutput {
int pin;
DigitalOutput(int pinOut) {
boolean initState;
boolean initialized;
DigitalOutput(int pinOut,boolean initialiaState) {
pin = pinOut;
initState = initialiaState;
initialized = Setup_Pin();
Runtime.getRuntime().addShutdownHook(new Thread(this::Release));
}
private boolean Setup_Pin() {
@@ -16,22 +19,38 @@ public class DigitalOutput {
}
}
// sampe sini, harusnya ada
// harus set output dulu
// set direction first
if (GeneralCode.SetGpioDirection(pin, true)) {
// pasang value 1
if (GeneralCode.SetGpioValue(pin, true)) {
// ubah jadi input
if (GeneralCode.SetGpioDirection(pin, false)) {
System.out.println("DigitalInput Setup_Pin success !!");
if (GeneralCode.SetGpioValue(pin, initState)) {
System.out.println("DigitalOutput Setup_Pin success !!");
return true;
} else System.out.println("Gagal SetDirection ke Input untuk DigitalInput pin "+pin);
} else System.out.println("Gagal SetValue ke high untuk DigitalInput pin "+pin);
} else System.out.println("Gagal SetDirection ke Output untuk DigitalInput pin "+pin);
return false;
}
public void SetHigh(){
if (!initialized) {
System.out.println("Pin is not initialized");
return;
}
GeneralCode.SetGpioValue(pin,true);
}
public void SetLow(){
if (!initialized){
System.out.println("Pin is not initialized");
return;
}
GeneralCode.SetGpioValue(pin,false);
}
/*
* Release control of Digital Output (not controlling anymore)
* return true if success operation
*/
public void Release() {
GeneralCode.UnExportGpio(pin);
}
}

View File

@@ -4,7 +4,6 @@ import java.util.Objects;
public class GeneralCode {
private static final String GPIO_PATH = "/sys/class/gpio/";
/**
check is the OS is Linux or not
*/
@@ -44,7 +43,7 @@ public class GeneralCode {
/**
*
* @param Pin pin that you want to set
* @param direction true if In, false if Out
* @param direction true if out, false if in
* @return True if success
*/
public static boolean SetGpioDirection(int Pin, boolean direction){
@@ -62,7 +61,7 @@ public class GeneralCode {
* @return true if success
*/
public static boolean SetGpioValue(int Pin,boolean Value){
String valNum = "";
String valNum;
if (Value){
valNum="1";
}else {valNum="0";}

View File

@@ -1,22 +1,25 @@
import Device.NanoPi;
import java.util.Timer;
import java.util.TimerTask;
public class Main {
public static void main(String[] args) {
DigitalInput talkButton = new DigitalInput(12);
var npi = new NanoPi();
DigitalInput talkButton = new DigitalInput(npi.GetGPIO(12));
DigitalOutput LED1 = new DigitalOutput(npi.GetGPIO(20),true);
System.out.println("is initialized :"+ talkButton.getIsInitialized());
Runtime.getRuntime().addShutdownHook(new Thread(()->{
talkButton.Release();
System.out.println("program is closed!");
}));
System.out.println("Test Program GPIO di linux");
Timer testTimer = new Timer();
testTimer.schedule(new TimerTask() {
Timer MainTimer = new Timer();
MainTimer.schedule(new TimerTask() {
@Override
public void run() {
System.out.println(talkButton.ReadState());
if(talkButton.ReadState() == 1 ){
LED1.SetHigh();
}else{
LED1.SetLow();
}
}
},0,1000);