DS18B20四位七段溫度計-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 5941|回复: 2

[已解决] DS18B20四位七段溫度計

[复制链接]
发表于 2013-12-8 02:39 | 显示全部楼层 |阅读模式
請問    有哪位大大知錯在哪嗎?
我一直RUN不過
以下是我得程式碼


#include <DallasTemperature.h>
#include <OneWire.h>
// Arduino數位腳位2接到1-Wire裝置
#define ONE_WIRE_BUS 2

OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
// Lab15 使用四位數七段顯示器當計數器 V2

// 定義七段顯示器各節段與 Arduino 的腳位對應關係
#define A 5
#define B 7
#define C 4
#define D 11
#define E 10
#define F 3
#define G 6

// 定義共陽極與 Arduino 的腳位對應關係
#define CA1 13
#define CA2 12
#define CA3 9
#define CA4 8

// 定義七個節段的腳位&#65292;將 A, B, C, D, E, F, G 依序放入陣列
byte segs[7] = { A, B, C, D, E, F, G };

// 定義共陽極七段顯示器的字型(digit pattern)
// define the LED digit patterns, from 0 - 9
// 0 = LED on, 1 = LED off, in this order:
//                Mapping to       a,b,c,d,e,f,g of Seven-Segment LED
byte seven_seg_digits[10][7] = { { 0,0,0,0,0,0,1 },  // = 0
                                 { 1,0,0,1,1,1,1 },  // = 1
                                 { 0,0,1,0,0,1,0 },  // = 2
                                 { 0,0,0,0,1,1,0 },  // = 3
                                 { 1,0,0,1,1,0,0 },  // = 4
                                 { 0,1,0,0,1,0,0 },  // = 5
                                 { 0,1,0,0,0,0,0 },  // = 6
                                 { 0,0,0,1,1,1,1 },  // = 7
                                 { 0,0,0,0,0,0,0 },  // = 8
                                 { 0,0,0,1,1,0,0 }   // = 9
                             };

// 定義每個七段顯示器顯示的時間 (延遲時間), 預設 1ms
int delay_time = 1;

int temp;

void setup() {
  Serial.begin(9600);
  sensors.begin(); // 此處沒有參數 // DS18B20接在数字I/O第12号引脚上
  pinMode(A, OUTPUT);
  pinMode(B, OUTPUT);
  pinMode(C, OUTPUT);
  pinMode(D, OUTPUT);
  pinMode(E, OUTPUT);
  pinMode(F, OUTPUT);
  pinMode(G, OUTPUT);
  pinMode(CA1, OUTPUT);
  pinMode(CA2, OUTPUT);
  pinMode(CA3, OUTPUT);
  pinMode(CA4, OUTPUT);
}

void loop() {
sensors.requestTemperatures();

  float t = sensors.getTempCByIndex(0);
Serial.print(t);

  // cast to float (only have 2 digits to use on display)
  int rT = (int)t;

  // get units of temp
  int units = rT % 10;

  // get tens value of temp
  rT = rT/10;
  int tens = rT % 10;


  delay(100);

    }

  // 从DS18B20读取温度值
  Serial.print(tempersensors.getTemperature());
  Serial.print("C");
  Serial.println();

  temp = int(tempSensor.getTemperature());
   unsigned long startTime = millis();

   for (unsigned long elapsed=0; elapsed < 1000; elapsed = millis() - startTime) {

   // 多工掃瞄,輪流點亮個、十、百、以及千位數的七段顯示器

  // 顯示個位數
  lightDigit1(temp%10);
  delay(delay_time);
      // 顯示十位數
  lightDigit2((temp/10)%10);
  delay(delay_time);
  // 顯示百位數
  lightDigit3((temp/100)%10);            
  delay(delay_time);
  // 顯示千位數
  lightDigit4((temp/1000)%10);
  delay(delay_time);            

   }
}

// 選擇顯示的位數 (4:千&#12289;3:百&#12289;2:十&#12289;或 1:個位數)
void pickDigit(int x) {
  digitalWrite(CA1, HIGH);
  digitalWrite(CA2, HIGH);
  digitalWrite(CA3, HIGH);
  digitalWrite(CA4, HIGH);

  switch(x) {
    case 1: digitalWrite(CA1, LOW); break;
    case 2: digitalWrite(CA2, LOW); break;
    case 3: digitalWrite(CA3, LOW); break;
    case 4: digitalWrite(CA4, LOW); break;   
  }
}

// 點亮個位數
void lightDigit1(byte number) {
  pickDigit(1);   
  lightSegments(number);  
}

// 點亮十位數
void lightDigit2(byte number) {
  pickDigit(2);
  lightSegments(number);  
}

// 點亮百位數
void lightDigit3(byte number) {
  pickDigit(3);
  lightSegments(number);  
}

// 點亮千位數
void lightDigit4(byte number) {
  pickDigit(4);
  lightSegments(number);  
}

// 點亮七段顯示器
void lightSegments(byte number) {
  for (int i = 0; i < 7; i++) {
    digitalWrite(segs[i], seven_seg_digits[number][i]);
  }
}


发表于 2014-5-30 20:19 | 显示全部楼层
你好  看到你做的的 DS18B20四位七段溫度計,现在成功了吗?
我现在也想做个玩玩,我会写程序,可以教下我吗?
发表于 2014-6-5 11:20 | 显示全部楼层
錯在哪也沒提出來,我想應該是您的...
#include <DallasTemperature.h>
#include <OneWire.h>
這二個在您的 \libraries\ 沒有此二程式庫。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-12-5 10:42 , Processed in 0.071035 second(s), 16 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表