package org.sunspotworld.demo; import com.sun.spot.sensorboard.EDemoBoard; import com.sun.spot.sensorboard.io.IIOPin; import com.sun.spot.sensorboard.io.IInputPin; import com.sun.spot.sensorboard.io.IOutputPin; import com.sun.spot.sensorboard.io.IScalarInput; import com.sun.spot.sensorboard.io.ITemperatureInput; import com.sun.spot.util.Utils; import java.io.IOException; import javax.microedition.midlet.MIDlet; import javax.microedition.midlet.MIDletStateChangeException; public class SunSpotApplication extends MIDlet { private static final boolean[] MEASURE_TEMPERATURE_COMMAND = {false, false, false, true, true}; private static final boolean[] MEASURE_HUMIDITY_COMMAND = {false, false, true, false, true}; private IOutputPin sck; private IIOPin data; protected void startApp() throws MIDletStateChangeException { EDemoBoard board = EDemoBoard.getInstance(); sck = board.bindOutputPin(EDemoBoard.D0); data = board.bindIOPin(EDemoBoard.D1); while (true) { int SOrh = getSensorOutputForRelativeHumidity(); int SOt = getSensorOutputForTemperature(); double celsiusTemperature = -39.60 + 0.01 * SOt; double RHlinear = -4 + 0.0405 * SOrh - 2.8 * 10e-6 * SOrh; double RHtrue = (celsiusTemperature - 25) * (0.01 + 0.00008 * SOrh) + RHlinear; System.out.println("SOrh = " + SOrh + ", SOt = " + SOt + ", TÂșC = " + celsiusTemperature + ", RHlinear = " + RHlinear); System.out.println("RHtrue = " + RHtrue); Utils.sleep(5000); System.out.println(); } } protected void pauseApp() { } protected void destroyApp(boolean arg0) throws MIDletStateChangeException { } public void startTransmission() { data.setAsOutput(true); data.setHigh(); Utils.sleep(10); sck.setHigh(); data.setLow(); sck.setLow(); Utils.sleep(10); sck.setHigh(); data.setHigh(); sck.setLow(); } private void sendAddress() { data.setAsOutput(true); data.setLow(); Utils.sleep(10); sck.setHigh(); sck.setLow(); Utils.sleep(10); sck.setHigh(); sck.setLow(); Utils.sleep(10); sck.setHigh(); sck.setLow(); } private void sendCommand(boolean[] commandBits) { data.setAsOutput(true); for (int i = 0; i < commandBits.length; i++) { data.setHigh(commandBits[i]); Utils.sleep(10); sck.setHigh(); sck.setLow(); } data.setAsOutput(false); while (!data.isLow()) { Utils.sleep(10); } sck.setHigh(); sck.setLow(); } private int getMeasurementResult() { data.setAsOutput(false); while (!data.isLow()) { Utils.sleep(60); } int r = 0; for (int i = 0; i < 16; i++) { boolean b = data.isHigh(); r = (r << 1) | (b ? 1 : 0); sck.setHigh(); sck.setLow(); } return r; } private void endTransmission() { data.setAsOutput(true); data.setLow(); Utils.sleep(10); sck.setHigh(); sck.setLow(); } private int getSensorOutput(boolean[] command) { startTransmission(); sendAddress(); sendCommand(command); int measure = getMeasurementResult(); endTransmission(); return measure; } public int getSensorOutputForRelativeHumidity() { return getSensorOutput(MEASURE_HUMIDITY_COMMAND); } public int getSensorOutputForTemperature() { return getSensorOutput(MEASURE_TEMPERATURE_COMMAND); } }