Presentation is loading. Please wait.

Presentation is loading. Please wait.

Sun SPOT程序设计 University Outreach Programs in China

Similar presentations


Presentation on theme: "Sun SPOT程序设计 University Outreach Programs in China"— Presentation transcript:

1 Sun SPOT程序设计 University Outreach Programs in China
蒋清野(John) Sun 中国技术社区,高级经理 Qingye Jiang (John) Senior Manager Sun Developer Network, China 1

2 Sun Sun SPOT Small Programmable Object Technology
- 基于ARM 902T处理器(32位,180MHz) KB SRAM,4 MB Flash - 硬件上直接运行Java虚拟机(无操作系统) - 使用Java语言编程 (NetBeans IDE) - 支持CLDC 1.1和MIDP 1.0规范 - 通讯接口: 规范 - 通过USB接口与上位机通讯(mini-b) - 可充电锂电池(3.6V, 750 mAh)  - 深层睡眠模式(36 uA)

3

4

5

6

7

8

9 Sun SPOT应用程序框架 //声明包名称 package org.sunspotworld.demo; //导入应用程序需要使用的雷库
import com.sun.spot.peripheral.Spot; import com.sun.spot.sensorboard.EDemoBoard; import java.io.*; import javax.microedition.io.*; import javax.microedition.midlet.MIDlet; import javax.microedition.midlet.MIDletStateChangeException; //定义一个类,类名为SunSpotApplication(可根据需要命名),该类的父类为MIDlet public class SunSpotApplication extends MIDlet { //定义startApp()方法 protected void startApp() throws MIDletStateChangeException { } //定义pauseApp()方法(此方法在Sun SPOT应用中从来不会被调用) protected void pauseApp() { //定义destroyApp()方法 protected void destroyApp(boolean unconditional) throws MIDletStateChangeException {

10 Sun SPOT应用中的import部分 import com.sun.spot.peripheral.Spot; //静态类,定义了SPOT电路板上的各种元件 import com.sun.spot.sensorboard.EDemoBoard; //Sun 公司的SPOT的传感器板上面的外设当中的三色LED指示灯 import com.sun.spot.sensorboard.peripheral.ITriColorLED; //Sun 公司的SPOT的外设当中的射频装置的广播政策管理器 import com.sun.spot.peripheral.radio.IRadioPolicyManager; //Sun 公司的SPOT的射频I/O的两种实现 import com.sun.spot.io.j2me.radiostream.*; import com.sun.spot.io.j2me.radiogram.*; //Sun 公司的SPOT的一些常用方法 import com.sun.spot.util.*; //Java ME中的一些常用类库 import java.io.*; import javax.microedition.io.*; import javax.microedition.midlet.MIDlet; import javax.microedition.midlet.MIDletStateChangeException;

11 Sun SPOT应用中的startApp()方法
protected void startApp() throws MIDletStateChangeException { // 显示调试信息 System.out.println("Hello, world"); // 监测USB电缆是否连接到开发主机,识别并处理主机发送给SPOT的指令 new BootloaderListener().start(); // 获得本机IEEE Mac地址并显示 IEEEAddress ourAddr = new IEEEAddress(Spot.getInstance().getRadioPolicyManager().getIEEEAddress()); System.out.println("Our radio address = " + ourAddr.asDottedHex()); // 获得三色LED指示灯的引用地址,将第一只LED指示灯设置为红色 ITriColorLED [] leds = EdemoBoard.getInstance().getLEDs(); leds[0].setRGB(100,0,0); // 进入一个死循环 boolean running = true; while (running) { leds[0].setOn(); // 开启第一只LED Utils.sleep(250); // 等待250 毫秒 leds[0].setOff(); // 关闭第一只LED Utils.sleep(3000); // 等待3000毫秒 } notifyDestroyed(); // 如果运行到这里,则结束MIDP的运行(到不了)

12 访问Sun SPOT的各种传感器 传感器板: - 三轴加速度计(2G/6G) - 光照传感器 - 温度传感器 - 按钮两个
- 可编程LED(8 只),电源指示LED,状态指示LED - 模拟信号接口(6 个),5个GPIO,4 个高电流输出 访问所有的传感器设备都涉及到I/O操作,需要捕获与I/O 相关的例外! try { //在这里访问传感器设备 } catch (IOException ex) { System.out.println("Error in I/O: " + ex); }

13 访问Sun SPOT的加速度计

14 访问Sun SPOT的加速度计 在应用程序的开头部分,您需要import与加速度计相关的类库:
import com.sun.spot.sensorboard.peripheral.IAccelerometer3D; 在应用程序中,声明一个IAccelerometer3D对象: IAccelerometer3D accel = EDemoBoard.getInstance().getAccelerometer(); 获得X, Y, Z三轴上的加速度值: double accelX = accel.getAccelX(); double accelY = accel.getAccelY(); double accelZ = accel.getAccelZ(); 获得X, Y, Z三轴上的倾斜度: double tiltX = accel.getTiltX(); double tiltY = accel.getTiltY(); double tiltZ = accel.getTiltZ();

15 访问Sun SPOT的加速度计 LIS3L02AQAccelerometer 是IAccelerometer3D的子类
在Sun SPOT自带的传感器上,自带的加速度计型号为LIS3L02AQ。该加速度计的测量范围可以设定为2G或者是6G,在测量范围不同的时候,其测量精度也是不同的。 import com.sun.spot.sensorboard.peripheral.LIS3L02AQAccelerometer; 在应用程序中访问该加速度计: LIS3L02AQAccelerometer acc = (LIS3L02AQAccelerometer)EDemoBoard.getInstance().getAccelerometer(); 获得加速度计的当前测量范围。如果加速度计工作在2G状态,该方法返回SCALE_2G;如果加速度计工作在6G状态,该方法返回SCALE_6G。 public int scale = acc.getCurrentScale(); 设定加速度计的测量范围为2G: acc.setScale(acc.SCALE_2G); 设定加速度计的测量范围为6G: acc.setScale(acc.SCALE_6G); LIS3L02AQAccelerometer 是IAccelerometer3D的子类 在前一个页勉励所提到的各种IAccelerometer3D的方法 均可直接在LIS3L02AQAccelerometer中使用,例如 acc.getAccelX(); acc.getTiltX();

16 访问Sun SPOT的光照传感器 在应用程序的开头部分,您需要import与光照传感器相关的类库:
import com.sun.spot.sensorboard.peripheral.ILightSensor; 在应用程序中,声明一个ILightSensor对象: ILightSensor lightSensor = EDemoBoard.getInstance().getLightSensor(); 读取光照强度,其数值范围在0 到740 之间。 int lightIndication = lightSensor.getValue();

17 访问Sun SPOT的温度传感器 在应用程序的开头部分,您需要import与温度传感器相关的类库:
import com.sun.spot.sensorboard.peripheral.ITemperatureInput; 在应用程序中,声明一个ITemperatureInput对象: ITemperatureInput tempSensor = EDemoBoard.getInstance().getADCTemperature(); 读取温度数据,用华氏度表示: double tempF = tempSensor.getFahrenheit(); 读取温度数据,用摄氏度表示: double tempC = tempSensor.getCelsius();

18 访问Sun SPOT的控制按钮 在应用程序的开头部分,您需要import与控制按钮相关的类库:
import com.sun.spot.sensorboard.peripheral.ISwitch; 在应用程序中,声明两个ISwitch对象,其中sw1为左边的控制按钮,sw2为右边的控制按钮: ISwitch sw1 = EDemoBoard.getInstance().getSwitches()[0]; ISwitch sw2 = EDemoBoard.getInstance().getSwitches()[1]; 控制按钮实际上是一个数字开关,它可以被设置为开启和关闭两种状态。 检查sw1和sw2是否为开启状态: boolean status = sw1.isOpen(); boolean status = sw2.isClose(); 您也可以让程序等待某个控制按钮的状态发生改变,例如: sw1.waitForChange(); waitForChange()是一个阻塞方法。它会停止当前线程的执行,一直到该控制按钮的状态发生改变为止。

19 访问Sun SPOT的LED 在应用程序的开头部分,您需要import与LED相关的类库:
import com.sun.spot.sensorboard.peripheral.ITriColorLED; 在应用程序中,获得LED对象的实例: ITriColorLED [] leds = EDemoBoard.getInstance().getLEDs(); 设定某个LED的颜色: leds[0].setRGB(100,0,0); 控制某个LED的开启: leds[0].setOn(); leds[0].setOff();

20 Sun SPOT传感器综合编程练习 编写一个Sun SPOT应用程序,用LED模拟一个在水中作单向运动的小球。该小球可以是一个密度大于水的铁球,也可以是一个密度小于水的气球,使用左边的控制按钮改变其密度状态。该小球的颜色可以使用温度或者是亮度来控制,当温度(亮度)较高的时候,小球的颜色为红色;当温度(亮度)较低的时候,小球的颜色为绿色;过渡颜色为蓝色。 可以参考Demos\CodeSamples这个目录里面的例程。

21 Sun SPOT传感器:滤波 算术平均值滤波 S=(X1+X2+...+XN)/N 中值滤波 对n个采样数据排序,取中间值作为滤波结果
防脉冲干扰平均值滤波 去掉一个最高分、去掉一个最低分,计算其余的平均值作为滤波结果 一阶惯性滤波 S(i)=a.x(i)+(1-a)S(i-1) 其中x(i)为本次采样值,S(i-1)为上一次的滤波输出值。

22 Sun SPOT传感器综合编程练习 连续采集加速度计的信息,用不同的方法对其进行滤波。比较滤波前和滤波后的数据,观察不同滤波算法的效果。

23 Sun SPOT程序设计 University Outreach Programs in China
蒋清野(John) Sun 中国技术社区,高级经理 Qingye Jiang (John) Senior Manager Sun Developer Network, China 23


Download ppt "Sun SPOT程序设计 University Outreach Programs in China"

Similar presentations


Ads by Google