RS1とSPC1000の組み合わせについて

Sun SPOT についてのご質問はこちら。情報交換などにもご利用ください。

RS1とSPC1000の組み合わせについて

投稿記事by fujiki » 2012年7月07日(土) 17:54

藤木です。
度々すみません。

RS1とSPC1000を組み合わせてみましたが、うまくいきません。
新しいSunSPOTがAPIに対応していないかもしれないと思い、
REV5.0のSunSPOTを使用してみましたが、だめでした。

RS1とSPC1000はそれぞれはきちんと動いています。
RS1のプロジェクトの中にSPC1000.javaとSpiShiftRegister.javaの2つのクラスを
コピーしました。

コード: 全て選択
package org.sunspotworld;

import com.sun.spot.sensorboard.peripheral.ITemperatureInput;
import com.sun.spot.sensorboard.peripheral.LEDColor;
import java.util.Date;

public class RS1 extends SunSpotApplicationAdapter {
    static final String DB = "TemperatureRecordStore";
    static final int RECORD = 0;
    static final int PRINT = 1;
    static final int DELETE = 2;
    ModeSelector modeSelector;
    RMS rms;
    SPC1000 spc1000;
   
   
    ITemperatureInput tempSensor;

    protected void setup() {
       
         
       
        modeSelector = new ModeSelector(LEDColor.GREEN, LEDColor.CYAN, LEDColor.RED);
        while (!modeSelector.selected()) {
            sleep(100);
        }

        switch (modeSelector.getMode()) {
            case RECORD:
               
        spc1000 = new SPC1000(d1, d2, d3, d0); //mosi, miso, sck, ss
        spc1000.start();
               
                rms = RMS.getInstance(DB, true);
                tempSensor = eDemo.getADCTemperature();
                break;
            case PRINT:
                rms = RMS.getInstance(DB, false);
                break;
        }
    }
   protected void loop() throws Exception {
        switch (modeSelector.getMode()) {
            case RECORD:
                rms.write(System.currentTimeMillis());
                rms.write(tempSensor.getCelsius());
                //rms.write(new Date());
                rms.write(spc1000.getPressure());
                rms.write(spc1000.getTemperature());
                rms.flush();
                sleep(1 * 1000);
                break;
            case PRINT:
                if (rms.hasMoreRecords()) {
                    long time = rms.readLong();
                    double temperature = rms.readDouble();
                    //long time2 = rms.readLong();
                    double pressure = rms.readDouble();
                    double temperature2 = rms.readDouble();
                   
                   
                   
                    System.out.println(DateUtils.toDateString(time) + "," + temperature + "," + pressure  + "," + temperature2);
                    rms.skip();
                } else {
                    exitLoop();
                }
                break;
            case DELETE:
                RMS.delete(DB);
                exitLoop();
        }
    }
}


エラーメッセージは
init:
Please wait while connected Sun SPOTs are examined...

Using Sun SPOT device on port COM32
Deleting: C:\Program Files\Sun\SunSPOT\sdk\temp\spotselector-1031579377
init:
No to.jar.file specified.
Using "suite\RS1_1.0.0.jar"
Deleting directory C:\Users\wp363928\Desktop\SunSPOTWorkshop4CANSAT\RS1\build
Deleting directory C:\Users\wp363928\Desktop\SunSPOTWorkshop4CANSAT\RS1\suite
Deleting directory C:\Users\wp363928\Desktop\SunSPOTWorkshop4CANSAT\RS1\j2meclasses
clean:
Created dir: C:\Users\wp363928\Desktop\SunSPOTWorkshop4CANSAT\RS1\build
Compiling 7 source files to C:\Users\wp363928\Desktop\SunSPOTWorkshop4CANSAT\RS1\build
C:\Users\wp363928\Desktop\SunSPOTWorkshop4CANSAT\RS1\src\org\sunspotworld\RS1.java:31: シンボルを見つけられません。
シンボル: コンストラクタ SPC1000(com.sun.spot.resources.transducers.IIOPin,com.sun.spot.resources.transducers.IIOPin,com.sun.spot.resources.transducers.IIOPin,com.sun.spot.resources.transducers.IIOPin)
場所 : org.sunspotworld.SPC1000 の クラス
spc1000 = new SPC1000(d1, d2, d3, d0); //mosi, miso, sck, ss
注:一部の入力ファイルは推奨されない API を使用またはオーバーライドしています。
注:詳細については、-Xlint:deprecation オプションを指定して再コンパイルしてください。
エラー 1 個
C:\Program Files\Sun\SunSPOT\sdk\build.xml:96: The following error occurred while executing this line:
C:\Program Files\Sun\SunSPOT\sdk\ant\compile.xml:48: Compile failed; see the compiler error output for details.
構築失敗 (合計時間: 4 秒)
です。

spc1000 = new SPC1000(d1, d2, d3, d0); //mosi, miso, sck, ss
spc1000.start();
の2ヶ所に赤の!がついています。

アドバイスをお願いします。

藤木 郁久
fujiki
 
記事: 68
登録日時: 2010年7月06日(火) 19:54

Re: RS1とSPC1000の組み合わせについて

投稿記事by yamaguch » 2012年7月07日(土) 21:08

藤木先生、

アドバイスをお願いします。

ビルドのエラーメッセージを見ると、新旧の API が混在しているように見えますが。

プログラムを書く時はきちんとインデント(字下げ)する習慣をつける事が大切です。インデントが崩れているコードは理解して書いているようには見えません。きちんとインデントしたコードは他人に見せる場合は基本的なエチケットと考えて下さい。

ブログラムを流用する時は、その内容をきちんと理解することが第一です。理解しないで適当にコピーしても動くとは限りません。動いた場合は単に運がいいだけです。

山口
yamaguch
 
記事: 482
登録日時: 2010年7月06日(火) 17:37

Re: RS1とSPC1000の組み合わせについて

投稿記事by fujiki » 2012年7月12日(木) 22:02

山口さん

藤木です。
お世話になります。

インデントをきちんとすることのエチケットについて、以後、気をつけます。
今後ともよろしくお願いします。

藤木 郁久
fujiki
 
記事: 68
登録日時: 2010年7月06日(火) 19:54

Re: RS1とSPC1000の組み合わせについて

投稿記事by yamaguch » 2012年7月12日(木) 23:06

藤木先生、こんばんは。

問題ば解決しましたか。

コードを追加したことで、コンパイル時にエラーや警告メッセージが表示されるようになった場合は、追加した部分に問題があると考えて下さい。

コードをコピー&ペーストした場合は、右クリックして「フォーマット」を選ぶと、きちんとインデントされます。その後、正しくコピー&ペーストされたかどうか、結果のコードは正しいかどうかの確認をするようにしてください。

山口
yamaguch
 
記事: 482
登録日時: 2010年7月06日(火) 17:37

Re: RS1とSPC1000の組み合わせについて

投稿記事by fujiki » 2012年7月13日(金) 07:57

山口さん

藤木です。
おはようございます。

問題ば解決しましたか。

ちょっと九州弁がはいってますね。(笑)

おかげさまで昨夜、すべての問題が解決し、すっきりです。
「フォーマット」の機能、了解しました。便利ですね。

  try{
     ・・・;
  }catch(Exception e){}

で最後の問題は解決できました。

お世話になりました。

藤木 郁久
fujiki
 
記事: 68
登録日時: 2010年7月06日(火) 19:54

Re: RS1とSPC1000の組み合わせについて

投稿記事by yamaguch » 2012年7月13日(金) 10:07

本当ですね。
携帯で返事を出すと、ときどき方言が混ざります。

スッキリ解決おめでとうございます。
コードをマージしたとき発生した問題の原因はどういうことで、それをどのように解決したかも簡単にまとめてポストして頂けるとうれしいです。

ところで、try {} catch (Exception e) {} で、囲んで後の {} の中に何も書かないコードは、本来必要なエラー処理をサボっているので、一般には推奨されません。
ご注意下さい。

山口
yamaguch
 
記事: 482
登録日時: 2010年7月06日(火) 17:37


Return to Sun SPOT 質問箱

cron