1) can I use MCP23008GpioProvider ? because MCP3008GpioProvider does not exists.
2) the shield should be detected by i2cdetect ? because I have no address filled...every address is blank, so it doesn't see it. In MCP23008GpioProvider I have to provide the address binded in i2c ?
public class SensorTest {
public static int readadc(int adcnum, GpioPinDigitalOutput clockpin,
GpioPinDigitalOutput mosipin, GpioPinDigitalInput misopin,
GpioPinDigitalOutput cspin, GpioController gpio) {
if ((adcnum > 7) || (adcnum < 0))
return -1;
cspin.high();
clockpin.low();
cspin.low();
int commandout = adcnum;
commandout |= 0x18;
commandout <<= 3;
for (int i = 0; i < 5; i++) {
if ((commandout & 0x80) != 0) {
mosipin.high();
}
else {
mosipin.low();
}
commandout <<= 1;
clockpin.high();
clockpin.low();
}
int adcout = 0;
for (int i = 0; i < 12; i++) {
clockpin.high();
clockpin.low();
adcout <<= 1;
if (misopin.getState() == PinState.HIGH) {
adcout |= 0x1;
}
}
cspin.high();
adcout >>= 1;
return adcout;
}
public static void main(String[] args) throws InterruptedException,
IOException {
System.out.println("<--Pi4J--> GPIO Listen Example ... started.");
// create gpio controller
GpioController gpio = GpioFactory.getInstance();
GpioPinDigitalOutput SPICLK = gpio.provisionDigitalOutputPin(
RaspiPin.GPIO_01, "SPICLK", PinState.LOW);
GpioPinDigitalInput SPIMISO = gpio.provisionDigitalInputPin(
RaspiPin.GPIO_04, "SPIMISO", PinPullResistance.PULL_DOWN);
GpioPinDigitalOutput SPIMOSI = gpio.provisionDigitalOutputPin(
RaspiPin.GPIO_05, "SPIMOSI", PinState.LOW);
GpioPinDigitalOutput SPICS = gpio.provisionDigitalOutputPin(
RaspiPin.GPIO_06, "SPICS", PinState.LOW);
for (int i=0;i <= 20;i++) {
float value = readadc(0, SPICLK, SPIMOSI, SPIMISO, SPICS, gpio);
System.out.println("sensor value= " + value);
Thread.sleep(500);
}
gpio.shutdown();
}
}
public static void main(String[] args) throws Exception{ GpioController gpioController = GpioFactory.getInstance(); GpioPinDigitalOutput clock = gpioController.provisionDigitalOutputPin(RaspiPin.GPIO_01, PinState.LOW); GpioPinDigitalInput digitalOut = gpioController.provisionDigitalInputPin(RaspiPin.GPIO_04, PinPullResistance.OFF); GpioPinDigitalOutput digitalIn = gpioController.provisionDigitalOutputPin(RaspiPin.GPIO_05, PinState.LOW); GpioPinDigitalOutput select = gpioController.provisionDigitalOutputPin(RaspiPin.GPIO_06, PinState.LOW); clock.setShutdownOptions(true, PinState.LOW); digitalOut.setShutdownOptions(true); digitalIn.setShutdownOptions(true, PinState.LOW); select.setShutdownOptions(true, PinState.LOW); for (int i = 0; i < 10; i++) { portCommunication2(select, clock, digitalIn, digitalOut); Thread.sleep(1000); } gpioController.shutdown();}
private static void portCommunication2(GpioPinDigitalOutput select, GpioPinDigitalOutput clock, GpioPinDigitalOutput digitalIn, GpioPinDigitalInput digitalOut){ long transmittedData = 0; long recievedData = 0; int position = 24; // Initiate communication select.high(); select.low(); // Configuration boolean[] configuration = new boolean[] { false, false, false, false, false, false, false, true, // Start byte true, // single-ended (true) or differential (false) false, false, false // Channel 0-7 // Don't care data / NOP , false, false, false, false, false, false, false, false, false, false, false, false }; for (boolean b : configuration) { position--; digitalIn.setState(b); transmittedData |= ((digitalIn.isHigh() ? 1 : 0) << (position)); clock.high(); clock.low(); recievedData |= ((digitalOut.isHigh() ? 1 : 0) << (position)); } // Format data output System.out.println(">");
System.out.println(transmittedData);
System.out.println(recievedData);
// printLong(transmittedData, false); // printLong(recievedData, true); // System.out.println();}