motion sensor

Hi

I had get digital input from motion sensors that are connected to Arduino uno board. I got the Arduino uno board and java program setup correctly. In my java display, it is displaying the numbers that are getting from motion sensors, which is displaying 0 (when there is a movement) and 1 (no movement) continuously. Here comes the question, I'm trying to just display 0, when there is an movement. I do not want the sensors to sense any motion at all when there are no motion. This is because the java display will keep running and continuously displaying 1, when there are no movement. How do I solve this problem????

Have the Arduino only send the new value if it is different from the last value sent.

if (currentValue != lastValue)
    {
    lastValue = currentValue;
    Serial.println(currentValue);
    }

That would work out, but what happen if the movement was the same? I'm actually using two sensors to sense human eye blink and getting the blinks as input. If left eye blink and right eye does not blink is the first input, and the second input is the same as the first input, than from the suggestion you provided, my java program will only get the first input and not the second input.

I realized that I did not post my program at all, so here are my programs for arduino and java

my arduino code:

/* Input from Motion sensor */

void setup() { Serial.begin(9600); pinMode(7, INPUT); pinMode(4, INPUT);

}

void loop() {

int RightValue = digitalRead(4); int LeftValue = digitalRead(7); int R = 0; int L = 0; int myArray[8]; delay(50); if (LeftValue == 0 && RightValue == 1) { L = LeftValue; R = RightValue; } else if (RightValue == 0 && LeftValue == 0) { L = LeftValue; R = RightValue; } else if (RightValue == 0 && LeftValue == 0) { L = LeftValue; R = RightValue; } else { L = LeftValue; R = RightValue; }

Serial.print(L); Serial.println(R); }


my Java code:

import java.io.InputStream; import java.io.OutputStream; import gnu.io.CommPortIdentifier; import gnu.io.SerialPort; import gnu.io.SerialPortEvent; import gnu.io.SerialPortEventListener; import java.util.Enumeration;

public class SerialTest implements SerialPortEventListener { SerialPort serialPort; /** The port we're normally going to use. / private static final String PORT_NAMES[] = { "/dev/tty.usbmodemfa.131" // Mac OS X //"/dev/ttyUSB0", // Linux //"COM3", // Windows }; /* Buffered input stream from the port / private InputStream input; /* The output stream to the port / private OutputStream output; /* Milliseconds to block while waiting for port open / private static final int TIME_OUT = 2000; /* Default bits per second for COM port. */ private static final int DATA_RATE = 9600;

public void initialize() { CommPortIdentifier portId = null; Enumeration portEnum = CommPortIdentifier.getPortIdentifiers();

// iterate through, looking for the port while (portEnum.hasMoreElements()) { CommPortIdentifier currPortId = (CommPortIdentifier) portEnum.nextElement(); for (String portName : PORT_NAMES) { if (currPortId.getName().equals(portName)) { portId = currPortId; break; } } }

if (portId == null) { System.out.println("Could not find MAC OSx USB port."); return; }

try { // open serial port, and use class name for the appName. serialPort = (SerialPort) portId.open(this.getClass().getName(), TIME_OUT);

// set port parameters serialPort.setSerialPortParams(DATA_RATE, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE);

// open the streams input = serialPort.getInputStream(); output = serialPort.getOutputStream();

// add event listeners serialPort.addEventListener(this); serialPort.notifyOnDataAvailable(true); } catch (Exception e) { System.err.println(e.toString()); } }

/** * This should be called when you stop using the port. * This will prevent port locking on platforms like Linux. */ public synchronized void close() { if (serialPort != null) { serialPort.removeEventListener(); serialPort.close(); } }

/** * Handle an event on the serial port. Read the data and print it. */ public synchronized void serialEvent(SerialPortEvent oEvent) { if (oEvent.getEventType() == SerialPortEvent.DATA_AVAILABLE) { try { int available = input.available(); byte chunk[] = new byte[available]; input.read(chunk, 0, available);

// Displayed results are codepage dependent System.out.print(new String(chunk)); } catch (Exception e) { System.err.println(e.toString()); } } // Ignore all the other eventTypes, but you should consider the other ones. }

public static void main(String[] args) throws Exception { SerialTest main = new SerialTest(); main.initialize(); System.out.println("Started"); } }

/*
  Input from Motion sensor 
 */

// Declare these variables as global so they exist outside any function.
int lastLeftValue = 0; 
int lastRightValue = 0;

void setup() {
  Serial.begin(9600);
  pinMode(7, INPUT);
  pinMode(4, INPUT);
}

void loop() {

  int RightValue = digitalRead(4);
  int LeftValue = digitalRead(7);
  delay(50);

// All of your if statements boiled down to :        
//      L = LeftValue;
//       R = RightValue;
// so it didn't add any value to your program.
 
// Here is how you send just the changes:
   if (LeftValue != lastLeftValue || RightValue != lastRightValue)
        {
        lastLeftValue = LeftValue;
        lastRightValue = RightValue;
        Serial.print(LeftValue);
        Serial.println(RightValue);
        }
 }