忍者ブログ

グッドイブニング日和見

日和見(ひよりみ)とは江戸時代 天気を見る役職のこと 細々ボソボソ書いています

[PR]

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

プログラム

思い出したかのように

この前の科学実験の課題 フィジカルコンピューティングのソースと解説
C++がベースらしくC言語したやってない僕には違いがわからないけど よくわからないところが多い
まあー動いてるから良し(最低)

ソースはほとんどネットからいただきました
LM60とDIS18を同時に動かしたいのでプログラムを結合しました


#include<OneWire.h>  //ワンワイヤーってセンサの規格?を読み込んどく処理
 
int ledPin = 3;  //LEDの出力ピン 
int analogpin0 = 3;  //まず入力ピンと出力ピンが同じなのが謎
OneWire ds(9);  //dsっつーのがどうやらデジタルセンサの関数的な役割
 
double min = -424.0 / 6.25;  //わからん 温度の最小値
double vref = 2560.0;      //基準電圧
 
int Adata = 0;       //アナログのA 
int summary = 0;     //summary/要約 1秒間の平均で測定しているので0.02秒毎のAdataを格納しとくやつ
int i;         //便利なやつ
int count = 0;   //データ数わかりやすくするためにつけた数えるだけの存在 ただそれだけの存在
double t_value;  //0.1秒間の平均値


//setup前にアナログ温度センサの関数とかを宣言している loop内で良かったなこの処理
 
void setup() {
  analogReference(INTERNAL); //INTERNAL? お決まりのやつらしい
  pinMode(ledPin, OUTPUT);  //ピンをどう使いますか? ledPinを出力にという意味
  Serial.begin(9600);   //お決まり
  while(!Serial);      //シリアル通信している間あああ
}
 
void loop(){
 
 digitalWrite(ledPin,HIGH); //LED光らせるよ
 Adata=0;
 
  byte i;
  byte present = 0;
  byte type_s=0;
  byte data[12];
  byte addr[8];
  float celsius;

//なぜか16進で処理し始めるので萎えました もとのソースと見比べながら検証したが謎
//おそらく16進でデータが返ってくるのかと なるほどデジタルねって感じ
 
digitalWrite(ledPin,LOW); //LED消すよ! いらなくね?
 
  if ( !ds.search(addr)) {
    ds.reset_search();
    return;
  }

//一番の謎作業 ds.reset_seach(); これがないとデジタルの温度は0° 寒い

 
  ds.reset();      //出ました リセットするのね
  ds.select(addr);   //addrをセレクトするのね はいはい
  ds.write(0x44,1); //16進の処理はしないでほしい あと他のサイトにも特に説明なし 動いてるからいいだろ
  
  delay(19000); //19秒待つぜ
  
  present = ds.reset(); //リセットしてプレセント
  ds.select(addr);       //またセレクト
  ds.write(0xBE);    //ほんで書き込み 16進なのでBEは11001110
 
  for ( i = 0; i < 9; i++) {
    data[i] = ds.read();
  }
//data[0]からdata[8]をリセット ナニをリセットするのか
 
  Serial.print(count); //今何回目の計測かをカウント
  Serial.print("  ");  //おそらくExcelとかで考察するのでタブ
  unsigned int raw = (data[1] << 8) | data[0]; //rawにdata[1]を8だけ右シフトしたものにdata[0]をORで加算 はあ?
   celsius = (float)raw / 16.0; //rawを16割る なんとこれで温度に 何か16進と関係がありそう…
  Serial.print("DigitalTemp = "); //以下表示
  Serial.print(celsius);
 
 
//----------------Analog--------------------------//
 
 
  summary=0;

 
 for(i=0;i<50;i++){
Adata=analogRead(analogpin0);
summary=summary+Adata;
delay(2); //0.002秒待ち
  }
//1秒間の合計をサマリーに
 
t_value=((double)summary/50.0/1024.0*vref/6.25)+min; //割ってかけて足して気温になる
 
Serial.print("  AnalogTemp = ");
Serial.println(t_value);
 
count += 1;
 
delay(900); //0.9秒待ち 合計1秒
}


解説になってねー
20秒毎に気温を表示します 1万も集めるから50時間くらいかかる
PR

コメント

お名前
タイトル
文字色
メールアドレス
URL
コメント
パスワード Vodafone絵文字 i-mode絵文字 Ezweb絵文字

無題

てんさいだな

プロフィール

ブログかいてる人 : スズキ

雲ってのは一日見ていても飽きません

形や大きさ 流れる速さ 空とのコントラスト
たったそれだけで飽きないものを作りだすのは自然の魅力ですね
人工の娯楽がそういうものに敵わないものかと日々考えております

三重大学という公務員養成所で気象の勉強をしています

ツイッター