Home : Course Map : Chapter 24 :
Java Processor Demo 1: Code Listings
Javelin Stamp as Temperature Sensor
JavaTech
Course Map
Chapter 24

IntroEmbeddedJava
In Eng. & Sci
J2ME Overview
Real Time Java
Java Hardware
  Chips
  Cores
  Boards
Javelin Stamp
Javelin Programs
  
   Demo 1
   Listing
   Demo 2  
   Demo 3  

SNAP
   Demo 2
 
Performance
Embed Apps
Exercises

     About JavaTech
     Codes List
     Exercises
     Feedback
     References
     Resources
     Tips
     Topic Index
     Course Guide
     What's New

The classes listed below run in the Javelin Stamp. They provide a temperature reading when sent a request over the serial line. The request will come from the SerialToJavelin program discussed in Chapter 24, which runs on a desktop, or other J2SE compatible platform on which a javax.comm package is available. This program sends the request (password number first) to the Javelin over the serial for a data value.

See further code description on previous page.

SendTempDataFromJavelin

import stamp.core.*;
import stamp.peripheral.sensor.temperature.DS1620;

/**
  * This program transmits temperature readings from the DS1620
  * chip when it receives a request over the serial line. The
  * request must include a password number at the start. If the
  * password is OK, then a temperature value is obtained and
  * transmitted.
  *
  * The "raw" temperature readings are obtained via the
  * TempDataGenJavelin class, which in turn uses the DS1620 class
  * provided in the stamp.peripheral.sensor.temperature package.
  *   
  * The serial communications code uses the stamp.core.Uart
  * virtual peripheral class.
 **/
public class SendTempDataFromJavelin {

  // Since only one SimData program per card, make
  // the password static.
  private static int fPassword__ = 0x2201;

  // Label pins on evaluation card for serial I/O
  final static int SERIAL_TX_PIN  = CPU.pin0;
  final static int SERIAL_RTS_PIN = CPU.pin1;
  final static int SERIAL_CTS_PIN = CPU.pin2;
  final static int SERIAL_RX_PIN  = CPU.pin3;

  // Create the UART vp for transmission via COM serial port
  static Uart fTxUart__ = new Uart (
                                 Uart.dirTransmit, SERIAL_TX_PIN,
                                 Uart.dontInvert,  SERIAL_RTS_PIN,
                                 Uart.dontInvert,  Uart.speed9600,
                                 Uart.stop1 );

  // Create the UART vp for reception via the COM serial port
  static Uart fRxUart__ = new Uart (
                                 Uart.dirReceive,  SERIAL_RX_PIN,
                                 Uart.dontInvert,  SERIAL_CTS_PIN,
                                 Uart.dontInvert,  Uart.speed9600,
                                 Uart.stop1 );

  /** Resetting Javelin will start the program here. **/
  public static void main () {
    // Local variable
    int data=0;

    // Create a temperature data sensor.
    DataGenerator temp_sensor = new TempDataGenJavelin ();

    // Loop continuously, each time waiting for a request
    // to arrive with the password  (PW). Then get the
    // temperature reading and send it.
    do {
      // Go into receive mode and wait for PW
      checkPW ();

      // Get the data
      data = temp_sensor.getData ();

      // and then send it to the requestor.
      sendInt (data);

    } while (true);
  } // main

  /**
    * Utility method to send int value as
    * two bytes. Use "big-endian" mode with most
    * significant byte sent first.
   **/
  static void sendInt (int data){
      fTxUart__.sendByte (data  >>> 8);
      fTxUart__.sendByte (data & 0x00FF);
  }

  /**
    * Utility method to receive 2 bytes and make an
    * int value  (16 bits in Javelin) from them.
   **/
  static int receiveInt () {
     int byte1 = fRxUart__.receiveByte ();
     int byte2 = fRxUart__.receiveByte ();
     return byte2 |  (byte1 << 8);
  }

  /**
    * Utility method to recieve an int value
    * and compare it to the password.
   **/
  static void checkPW () {
    do {
      int data = receiveInt ();
      if (data == fPassword__) {
          fTxUart__.sendString ("PW OK!\n\r");
          break;
      }
      fTxUart__.sendString ("Wrong PW!\n\r");
    } while (true);
  } // checkPW
  
} // class SendTempDataJavelin

 

The TempDataGenJavelin class, shown below, communicates with DS1620 chip on the breadboard of the evaluation card (see the Javelin Stamp Users Manual Version 1.0a for the circuit setup). The class DS1620 does most of the work of communicating with the chip. All we have to do is invoke the getTempRaw() method and we obtain the current temperature in units of 0.5 degrees Celsius.

Perhaps there came a situation where we have several sensors of different kinds that we want to read (e.g. temperature, pressure, wind direction, etc.) So that we could give them all the same base class type, we created the the abstract DataGenerator class, which TempDataGenJavelin class extends. This would normally be done with an interface but our Javelin API does not provide for interfaces so we make it an abstract class instead. We could then reference all of our sensors with a DataGenerator array and loop over the array and invoke the getData() for each element.

import stamp.core.*;
import stamp.peripheral.sensor.temperature.DS1620;

/**
  * Create a class that obtains the current temperature
  * with the DS1620 chip. It extends the DataGenerator
  * class and overrides the getData () method to return
  * the temperature value in an int value.
 **/
public class TempDataGenJavelin extends DataGenerator {

  DS1620 thermometer = null;

  /** Constructor creates an instance of DS1620.**/
  TempDataGenJavelin () {
     thermometer = new DS1620 (CPU.pin4,CPU.pin5,CPU.pin6);
  } // ctor

  /** Return temperature in units of 0.5 degrees Celsius **/
  int getData () {
    return thermometer.getTempRaw ();
  }
} // class TempDataGenJavelin 
/**
  * Javelin does not allow for interfaces so use an abstract
  * class to represent types of data generators.
 **/
public abstract class DataGenerator {
  
  abstract int getData ();
  
} // class DataGenerator

 

 

References and Web Resources

Latest update: Dec. 14, 2004

  
  Part I Part II Part III
Java Core 1  2  3  4  5  6  7  8  9  10  11  12 13 14 15 16 17
18 19 20
21
22 23 24
Supplements

1  2  3  4  5  6  7  8  9  10  11  12

Tech 1  2  3  4  5  6  7  8  9  10  11  12
Physics 1  2  3  4  5  6  7  8  9  10  11  12

Java is a trademark of Sun Microsystems, Inc.