Arudino uno R3 + LCD Shield で 温度計(制限値以下で警報発生)




Arudinoで温度計ソフトを作りました。

0℃〜99℃までの設定した温度以下になると、警告音を発生します。
温度センサーはMicrochipのMCP9701を使用しています。
内部電圧基準の都合、温度センサーの出力電圧を分圧してからArduinoのアナログ入力ピンに入れています。
以下、スケッチです。(htmlの都合、見えない部分があります)

----


#include 
#include 

LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
char sel=0,pw=1,ren=3,key=1,dl=0,dp=1,dv=1,bl,ke;
unsigned int fp,rp=300,b0,x0,x,b5,b6,ma1=0;
unsigned char l=0,h=0,f=0,bb=1;

void blnk(void){
  char bk;
 if (ke < 1){
  bk = 14 - ke;
  }else{bk = 13 - ke;
  }
  lcd.setCursor(bk,0);
  lcd.blink();
}
void han1(void){                    //判定 
 char bk,hx;
 unsigned int v[2];
 if (x > 603){                      //select
   if (bl==0){
   blnk();
   bl = 1;                          //blinkフラグ
   } else {
   lcd.noBlink();
   v[0]=rp & 0xFF;
   v[1]=(rp & 0xFF00)>>8;
   for (hx=0;hx<2;hx++){
//EEPROM.write(e,0xFF);
EEPROM.write(hx,v[hx]);
   }
   bl =0;                           //noBlink
   }
 }else if ((x > 397)&&(bl ==1)){    //leftならば
    if (ke < 2){                      // 2までなら加算する
     ke++;
   blnk();
    }
  }else if ((x > 397)&&(bb ==0)){    //
 digitalWrite(10,HIGH);                   //バックライト点灯
   bb = 1;    
 }else if ((x > 221)&&(bl ==1)){             //downならば
 if(rp >= keta(ke)){
   rp = rp - keta(ke);  
	lcd_kt(rp,10);				// 閾値表示
   blnk();
 }}else if ((x > 66)&&(bl ==1)){              //upならば
  if((rp + keta(ke))<1000){
   rp = rp + keta(ke) ;
	lcd_kt(rp,10);					// 閾値表示
   blnk();
  }}else if ((x < 66)&&(bl ==1)){              //rightならば
   if ((ke > 0)){                  //0より大きければ減算する
   ke--;
   blnk();
  }}else if ((x < 66)&&(bb ==1)){
   digitalWrite(10,LOW);                   //バックライト消灯
   bb = 0;
   }}
unsigned long keta(char ak){                        //足す数の計算
char i; 
unsigned long kk = 1;
if (ak != 0){
 for (i=0;i 1000)){
   rp = 0;
 }
 pinMode(10,OUTPUT);
 digitalWrite(10,HIGH);                   //バックライト点灯
	lcd.setCursor(0,0);				// 1行目その1
	lcd.print("Te");				// 表示
   	lcd.setCursor(8,0);				// 1行目その2
	lcd.print("Sh");				// 表示
	lcd_kt(rp,10);					// 閾値表示
}

void loop() {                                         
unsigned int b1,c;
int a5;
if(dl==0){                   
analogReference(INTERNAL);    //外部基準を指定
c = analogRead(2);            //カラ打ち
delay(15);                    //安定待ち
b1 = analogRead(2);           //センサー読み取り
  a5 = hosei(b1);             //デジット値→ 温度変換  
  if(bl==0){                  //設定ブリンクの時は表示を止める
  if((a5rp)&&(b6==1)){
    lcd.setCursor(2,1);				// 1行目その
    lcd.print("            ");				// 表示
  noTone(0);
  b6=0;                   //フラグを戻す
  }
   lcd_kt(a5,2);         //数値の表示 設定ブリンクの時は止める
 }}
dl++;
if (dl==15){dl=0;}       //15回に一回 測定する \

             analogReference(DEFAULT);     //5vを指定
             c = analogRead(0);            //カラ打ち
             delay(2);
            x0 = analogRead(0); 
            delay(75);                    //  ループ速度はここで決まる
             x = analogRead(0);           //キー読み取り
             if (((x < x0 -10)||(x > x0 +10))&&(x<873)){    //変化が無ければ次の処理へ
             han1();                           //変化あれば判定へ
}}   //loop終わり

--------
ファイルはこちら


回路・使い方等、興味のある方はフォームメールからご連絡ください。

戻る