Really I tried a lot with MCP3208 external ADC to interface with the Raspberry pi. Searched for various codes but nothing was available in JAVA. So after some research i got some python code and modified that to JAVA. in this i have used the Pi4J library.
/****
*Author : Bikash Narayan Panda
*Use : This is used to read ADC data foem the MCP3208 SPI based ADC.
*Date :19/Nov/2014
*Tags: Please Include the Pi4J Library.
*
*
**/
import java.io.IOException;
import com.pi4j.io.gpio.GpioController;
import com.pi4j.io.gpio.GpioFactory;
import com.pi4j.io.gpio.GpioPinDigitalInput;
import com.pi4j.io.gpio.GpioPinDigitalOutput;
import com.pi4j.io.gpio.PinPullResistance;
import com.pi4j.io.gpio.PinState;
import com.pi4j.io.gpio.RaspiPin;
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 < 14; 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_14, "SPICLK", PinState.LOW);
GpioPinDigitalInput SPIMISO = gpio.provisionDigitalInputPin(
RaspiPin.GPIO_13, "SPIMISO", PinPullResistance.PULL_DOWN);
GpioPinDigitalOutput SPIMOSI = gpio.provisionDigitalOutputPin(
RaspiPin.GPIO_12, "SPIMOSI", PinState.LOW);
GpioPinDigitalOutput SPICS = gpio.provisionDigitalOutputPin(
RaspiPin.GPIO_11, "SPICS", PinState.LOW);
for (int i=0;i <= 20;i++) {
float value = readadc(0, SPICLK, SPIMOSI, SPIMISO, SPICS, gpio);
System.out.println("sensor 0value= " + value);
value = readadc(1, SPICLK, SPIMOSI, SPIMISO, SPICS, gpio);
System.out.println("sensor 1value= " + value);
Thread.sleep(500);
value = readadc(2, SPICLK, SPIMOSI, SPIMISO, SPICS, gpio);
System.out.println("sensor 2value= " + value);
Thread.sleep(500);
value = readadc(3, SPICLK, SPIMOSI, SPIMISO, SPICS, gpio);
System.out.println("sensor3 value= " + value);
Thread.sleep(500);
value = readadc(4, SPICLK, SPIMOSI, SPIMISO, SPICS, gpio);
System.out.println("sensor 4value= " + value);
Thread.sleep(500);
value = readadc(5, SPICLK, SPIMOSI, SPIMISO, SPICS, gpio);
System.out.println("sensor 5value= " + value);
Thread.sleep(500);
value = readadc(6, SPICLK, SPIMOSI, SPIMISO, SPICS, gpio);
System.out.println("sensor 6value= " + value);
Thread.sleep(500);
value = readadc(7, SPICLK, SPIMOSI, SPIMISO, SPICS, gpio);
System.out.println("sensor7 value= " + value);
Thread.sleep(500);
Thread.sleep(500);
Thread.sleep(500);
}
gpio.shutdown();
}
}

No comments:
Post a Comment