|
請問 有哪位大大知錯在哪嗎?
我一直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
// 定義七個節段的腳位,將 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:千、3:百、2:十、或 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]);
}
}
|
|