A
amitumi1003
Guest
prob ir tas alwayes parādīt to pašu vērtību, pat i mainīt temp vai humi kods nr.
rezultāts ir alwayes 37,22 4,25 64,13 0,1.
pls man palīdzēt .........
Šeit ir kods
Kods:
# Ietvert <18F8720.h>
# Ietvert <math.h>
# Ietvert <stdlib.h>typedef savienība
(
neparakstīts int i;
peldēt f;
) Vērtību;# Baits PORT_G = 0x00FD
# Baits PORT_f = 0x0000
# Baits PORT_c = 0x00BF
# Baits PORT_D = 0x0000
# Baits PORT_E = 0x0002
# Drošinātāji HS, NOLVP, NOWDT, NOPROTECT
# Izmantot nekavējoties (pulkstenis = 20000000)
# Izmantot RS232 (bodu = 9600, rcv = PIN_G2, xmit = PIN_G1, STREAM = COMM_B)enum (TEMP, HUMI);
# Define sht11_data PIN_F2
# Define sht11_sck PIN_F3
# Define sht_noACK 0
# Define sht_ACK 1
/ / ADR komandu r / w
# Define sht_STATUS_REG_W 0x06 / / 000 0011 0
# Define sht_STATUS_REG_R 0x07 / / 000 0011 1
# Define sht_MEASURE_TEMP 0x03 / / 000 0001 1
# Define sht_MEASURE_HUMI 0x05 / / 000 0010 1
# Define sht_RESET 0x1e / / 000 1111 0
/************************************************* *******************************/
/************************************************* *******************************/
/ / Nosūtīt aprēķina datus pc
/************************************************* *******************************/
/************************************************* *******************************/
par spēkā neesošu sendDataToPC (char * dati, int LEN)
(
int i;
output_high (PIN_G0);
delay_ms (10); / / pagaidīt
(i = 0; i <len; i )
(
fprintf (COMM_B "% c" * dati); / / ierakstīt failā
Datu ;
)
delay_ms (10); / / pagaidīt
output_low (PIN_G0);
delay_ms (10);
)int checkLength (int vērtība)
(
int len = 0;
bet (vērtība! = 0)
(
vērtība = value/10;
len ;
)
atgriezties LEN;
)par spēkā neesošu floatToInt (dubultā vērtība)
(
int, rem, len = 0, aizdod;
char arr [5];
char * dati, temperatūra;
dubultā d = 100,0;
= abs (vērtība);
len = checkLength ();
aizdeva = LEN;
bet (a)! = 0
(
Lietu =% 10;
arr [len 1], = rem 48;
= a/10;
LEN -;
)
Datu = arr;
sendDataToPC (dati, aizdeva);
temp ='.';
sendDataToPC (un temperatūras, 1);
= abs (vērtība);
vērtība = vērtību;
vērtība = vērtība * d;
= abs (vērtība) 1;
len = checkLength ();
aizdeva = LEN;
bet (a)! = 0
(
Lietu =% 10;
arr [len 1], = rem 48;
= a/10;
LEN -;
)
Datu = arr;
sendDataToPC (dati, aizdeva);
temp = "";
sendDataToPC (un temperatūra, 2);
)
/************************************************* ******************************/
/************************************************* ******************************/
/ / Raksta baitu par Sensibus un pārbaudes apstiprināt
/************************************************* ******************************/
/************************************************* ******************************/
char sht11_write_byte (neparakstīts char vērtība)
(
neparakstīts CHAR i, kļūda = 0;
(i = 0x80; i> 0; i = 2) / / maiņu mazliet par masku
(
ja (i & vērtība)
output_high (sht11_data); / / aizseguma vērtību ar i, rakstiet uz Sensi-BUS
vēl
output_low (sht11_data);
output_high (sht11_sck); / / CLK par sensi-BUS
delay_us (5); / / pulswith apm.5 ar mums
output_low (sht11_sck);
)
output_high (sht11_data); / / Dati-line
output_high (sht11_sck); / / CLK # 9 ack
kļūda = ievade (sht11_data) / / pārbaudīt ack (dati tiks jāvelk uz leju aiz SHT11)
output_low (sht11_sck);
atgriezties kļūdas; / / kļūda = 1, ja ne apstiprināt
)/************************************************* *******************************/
/************************************************* *******************************/
/ / Skan baitu formu Sensibus un dod atzīst gadījumā "ack 1 ="
/************************************************* *******************************/
/************************************************* *******************************/
char sht11_read_byte (neparakstīts char ack)
(
neparakstīts CHAR i, val = 0;
output_high (sht11_data); / / Dati-line
(i = 0x80; i> 0; i = 2) / / maiņu mazliet par masku
(
output_high (sht11_sck); / / CLK par sensi-BUS
ja (ievade (sht11_data) == 1)
val = (Val | i); / / lasīt bitu
output_low (sht11_sck);
)
output_bit (sht11_data,)! ack, / / ja "ack == 1" nojaukt DATA-Line
output_high (sht11_sck); / / CLK # 9 ack
delay_us (5); / / pulswith apm.5 ar mums
output_low (sht11_sck);
output_high (sht11_data); / / Dati-line
atgriezties val;
)/************************************************* *******************************/
/************************************************* *******************************/
/ / Rada pārraides sākumu
/ / _____ ________
/ / DATI: |_______|
/ / ___ ___
/ / SCK: ___ | |___| |______
/************************************************* *******************************/
/************************************************* *******************************/
par spēkā neesošu sht11_transstart (spēkā neesošs)
(
output_high (sht11_data);
output_low (sht11_sck); / / Sākuma stāvoklis
delay_us (1);
output_high (sht11_sck);
delay_us (1);
output_low (sht11_data);
delay_us (1);
output_low (sht11_sck);
delay_us (3);
output_high (sht11_sck);
delay_us (1);
output_high (sht11_data);
delay_us (1);
output_low (sht11_sck);
)
/************************************************* *******************************/
/************************************************* *******************************/
/ / Sakaru reset: DATA-line = 1 un vismaz 9 SCK cikli
/ / Seko transstart
/ / _____________________________________________________ ________
/ / DATI: |_______|
/ / _ _ _ _ _ _ _ _ _ ___ ___
/ / SCK: __ | | __ | | __ | | __ | | __ | | __ | | __ | | __ | | __ | |______| |___| |______
/************************************************* *******************************/
/************************************************* *******************************/
par spēkā neesošu sht11_connectionreset (spēkā neesošs)
(
neparakstīts char i;
output_high (sht11_data);
output_low (sht11_sck); / / Sākuma stāvoklis
(i = 0; i <9; i ) / / 9 SCK cikliem
(
output_high (sht11_sck);
output_low (sht11_sck);
)
sht11_transstart (); / / pārraides sākums
)
/************************************************* *******************************/
/************************************************* *******************************/
/ / Nodzēš sensoru ar softreset
/************************************************* *******************************/
/************************************************* *******************************/
char sht11_softreset (spēkā neesošs)
(
neparakstīts char kļūda = 0;
sht11_connectionreset (); / / reset komunikācijas
kļūda = sht11_write_byte (sht_RESET); / / sūtīt RESET-komanda sensoru
atgriezties kļūdas; / / kļūda = 1, ja nav atbildes veidlapu sensors
)
/************************************************* *******************************/
/************************************************* *******************************/
/ / Skan statusu jāreģistrējas kontrolsumma (8-bitu)
/************************************************* *******************************/
/************************************************* *******************************/
char sht11_read_statusreg ()
(
neparakstīts char kļūda = 0;
neparakstīts char p_value, p_checksum;
sht11_transstart (); / / pārraides sākums
kļūda = sht11_write_byte (sht_STATUS_REG_R); / / sūtīt komandu sensoru
p_value = sht11_read_byte (sht_ACK); / / lasīt statusa reģistru (8-bitu)
p_checksum = sht11_read_byte (sht_noACK); / / lasīt kontrolsumma (8-bitu)
atgriezties kļūdas; / / kļūda = 1, ja nav atbildes veidlapu sensors
)
/************************************************* *******************************/
/************************************************* *******************************/
/ / Raksta statusu jāreģistrējas kontrolsumma (8-bitu)
/************************************************* *******************************/
/************************************************* *******************************/
char sht11_write_statusreg (neparakstīta CHAR * p_value)
(
neparakstīts char kļūda = 0;
sht11_transstart (); / / pārraides sākums
kļūda = sht11_write_byte (sht_STATUS_REG_W); / / sūtīt komandu sensoru
kļūda = sht11_write_byte (* p_value); / / sūtīt vērtības statusu reģistrs
atgriezties kļūdas; / / kļūda> = 1, ja nav atbildes veidlapu sensors
)
/************************************************* *******************************/
/************************************************* *******************************/
/ / Rada mērījumu (mitrums / temperatūra) ar kontrolsumma
/************************************************* *******************************/
/************************************************* *******************************/
char sht11_measure (neparakstīta CHAR * p_value, neparakstīta CHAR * p_checksum, neparakstītu palija režīmā)
(
neparakstīts kļūda = 0;
neparakstīts int i;
sht11_transstart (); / / pārraides sākums
slēdzis (režīms)
(/ / Sūtīt komandu sensoru
lieta TEMP: kļūda = sht11_write_byte (sht_MEASURE_TEMP); pārtraukuma;
lieta HUMI: kļūda = sht11_write_byte (sht_MEASURE_HUMI); pārtraukuma;
noklusējuma: pārtraukums;
)
(i = 0; i <65535; i )
ja (ievade (sht11_data) == 0)
pārtraukumu; / / gaidīt, kamēr sensors nav pabeigts novērtēšanas
ja (ievade (sht11_data) == 1)
kļūda = 1; / / vai timeout (~ 2 sek.) tiek sasniegta
* (P_value 1) = sht11_read_byte (sht_ACK); / / izlasīt pirmo baits (MSB)
* (P_value) = sht11_read_byte (sht_ACK); / / lasīt otro baits (LSB)
* P_checksum = sht11_read_byte (sht_noACK); / / lasīt kontrolsumma
atgriezties kļūda;
)
char sht11_measure_temp (neparakstīta CHAR * p_value, neparakstīts char * p_checksum)
(
atgriezties sht11_measure (p_value, p_checksum, TEMP);
)
char sht11_measure_humi (neparakstīta CHAR * p_value, neparakstīts char * p_checksum)
(
atgriezties sht11_measure (p_value, p_checksum, HUMI);
)/************************************************* *******************************/
/************************************************* *******************************/
/ / Aprēķina temperatūra [° C] un mitruma [% RH]
/ / Ievade: humi [Ērces] (12 bitu)
/ / Temp [Ērces] (14 bitu)
/ / Izejas: humi [% RH]
/ / Temperatūra [° C]
/************************************************* *******************************/
/************************************************* *******************************/
par spēkā neesošu sth11_calc (float * p_humidity, peldēt * p_temperature)
(
const pludiņš C1 =- 4,0; / / 12 Bit
const pludiņš C2 = 0,0405; / / 12 Bit
const pludiņš C3 0,0000028 =-; / / 12 Bit
const pludiņš T1 = 0,01; / / 14 Bit @ 5V
const pludiņš T2 = 0,00008; / / 14 Bit @ 5V
pludiņš RH, t, rh_lin, rh_true, t_C;
/ / Rh_lin: Mitruma lineāra
/ / Rh_true: Temperatūras kompensācija mitruma
/ / T_C: Temperatūra [° C]
RH =* p_humidity; / / RH: Mitruma [Ērces] 12 Bit
t =* p_temperature; / / t: temperatūra [Ērces] 14 Bit
t_C = t * ,01-40; / / Calc.temperatūra no ērcēm līdz [° C]
rh_lin = C3 * rh * rh C2 * rh C1, / / Calc.mitrums no ērcēm līdz [% RH]
rh_true = (t_C-25) * (T1 T2 * rh) rh_lin; / / Calc.temperatūras kompensācijas mitrums [% RH]
ja (rh_true> 100)
rh_true = 100; / / cut, ja vērtība ir ārpus
ja (rh_true <0,1)
rh_true = 0,1; / / fiziskā iespējas dažādām
* P_temperature = t_C; / / atgriešanās temperatūra [° C]
* P_humidity = rh_true; / / atgriešanās mitrumam [% RH]
)/************************************************* *******************************/
/************************************************* *******************************/
/ / Calcul de l'humidite en entier (sans calcul float)
/************************************************* *******************************/
/************************************************* *******************************/
int sht11_calc_humid_int (int16 w_humidity)
(
int32 H1, H2;
h1 = ((int32) w_humidity) * ((int32) w_humidity);
h1 = H1 / (int32) 1000;
h1 = h1 * (int32) 28;
h2 = ((int32) w_humidity) * (int32) 405;
h2 = h2 - h1;
h2 = h2 / (int32) 1000;
h2 = h2 - (int32) 40;
h2 = h2 / (int32) 10;
atgriešanās (h2);
)/************************************************* *******************************/
/************************************************* *******************************/
/ / Aprēķina rasas punkta
/ / Ievade: mitruma [% RH], temperatūra [° C]
/ / Izejas: rasas punkts [° C]
/************************************************* *******************************/
/************************************************* *******************************/
pludiņš sht11_calc_dewpoint (pludiņš h, peldēt t)
(
pludiņš logEx, dew_point;
logEx = 0,66077 7,5 * t / (237,3 t) (log10 (h) -2);
dew_point = (logEx - 0,66077) * 237,3 / (0,66077 7,5-logEx);
atgriezties dew_point;
)
/************************************************* ********************************/
/************************************************* ********************************/
//------------------------------------------------ ----------------------------------
/ / Paraugs programmu, kas parāda, kā izmantot SHT11 funkcijas
/ / 1.savienojums reset
/ / 2.pasākums mitrums [ērces] (12 bitu) un temperatūra [] ērces (14 bitu)
/ / 3.aprēķināt mitrums [% RH] un temperatūras []. C
/ / 4.aprēķināt rasas punktu []. C
/ / 5.drukāt temperatūra, mitrums, rasas punkts
/************************************************* *********************************/
/************************************************* *********************************/
par spēkā neesošu galvenais ()
(
vērtība humi_val, temp_val;
peldēt dew_point;
neparakstīts CHAR kļūda, kontrolsumma, temperatūra;
sht11_connectionreset ();
kamēr (1)
(
kļūda = 0;
kļūda = sht11_measure ((unsigned char *) un humi_val.i, un kontrolsumma, HUMI); / / pasākums mitruma
kļūda = sht11_measure ((unsigned char *) un temp_val.i, un kontrolsumma, TEMP); / / pasākums temperatūras
ja (kļūda! = 0)
sht11_connectionreset (); / / ja kļūda: savienojums atiestatīt
vēl
(
humi_val.f = (float) humi_val.i; / / pārveido vesels skaitlis peldēt
temp_val.f = (float) temp_val.i; / / pārveido vesels skaitlis peldēt
sth11_calc (& humi_val.f, un temp_val.f); / / aprēķināt mitrums, temperatūra
dew_point = sht11_calc_dewpoint (humi_val.f, temp_val.f); / / aprēķināt rasas punkta
/ / Nosūta galīgos datus sērijas saskarni (UART)
/ / Printf (temperatūra:% 5.1fC humi:% 5.1f%% rasas punkts:% 5.1fC \ n, temp_val.f, humi_val.f, dew_point);
/ / SendDataToPC (temp_val.f, 0x04);
/ / SendDataToPC (humi_val.f, 0x04);
/ / SendDataToPC (dew_point, 0x04); * /
floatToInt (temp_val.f);
floatToInt (humi_val.f);
floatToInt (dew_point);
floatToInt (kļūda);
)
//---------- Jāgaida apm.0.8s, lai izvairītos no sakaršanas SHTxx ------------------------------
delay_ms (1000);
temp = "\ r";
sendDataToPC (un temperatūras, 1);
/ / Temp = "\ n";
/ / SendDataToPC (un temperatūras, 1);
)
)
rezultāts ir alwayes 37,22 4,25 64,13 0,1.
pls man palīdzēt .........
Šeit ir kods
Kods:
# Ietvert <18F8720.h>
# Ietvert <math.h>
# Ietvert <stdlib.h>typedef savienība
(
neparakstīts int i;
peldēt f;
) Vērtību;# Baits PORT_G = 0x00FD
# Baits PORT_f = 0x0000
# Baits PORT_c = 0x00BF
# Baits PORT_D = 0x0000
# Baits PORT_E = 0x0002
# Drošinātāji HS, NOLVP, NOWDT, NOPROTECT
# Izmantot nekavējoties (pulkstenis = 20000000)
# Izmantot RS232 (bodu = 9600, rcv = PIN_G2, xmit = PIN_G1, STREAM = COMM_B)enum (TEMP, HUMI);
# Define sht11_data PIN_F2
# Define sht11_sck PIN_F3
# Define sht_noACK 0
# Define sht_ACK 1
/ / ADR komandu r / w
# Define sht_STATUS_REG_W 0x06 / / 000 0011 0
# Define sht_STATUS_REG_R 0x07 / / 000 0011 1
# Define sht_MEASURE_TEMP 0x03 / / 000 0001 1
# Define sht_MEASURE_HUMI 0x05 / / 000 0010 1
# Define sht_RESET 0x1e / / 000 1111 0
/************************************************* *******************************/
/************************************************* *******************************/
/ / Nosūtīt aprēķina datus pc
/************************************************* *******************************/
/************************************************* *******************************/
par spēkā neesošu sendDataToPC (char * dati, int LEN)
(
int i;
output_high (PIN_G0);
delay_ms (10); / / pagaidīt
(i = 0; i <len; i )
(
fprintf (COMM_B "% c" * dati); / / ierakstīt failā
Datu ;
)
delay_ms (10); / / pagaidīt
output_low (PIN_G0);
delay_ms (10);
)int checkLength (int vērtība)
(
int len = 0;
bet (vērtība! = 0)
(
vērtība = value/10;
len ;
)
atgriezties LEN;
)par spēkā neesošu floatToInt (dubultā vērtība)
(
int, rem, len = 0, aizdod;
char arr [5];
char * dati, temperatūra;
dubultā d = 100,0;
= abs (vērtība);
len = checkLength ();
aizdeva = LEN;
bet (a)! = 0
(
Lietu =% 10;
arr [len 1], = rem 48;
= a/10;
LEN -;
)
Datu = arr;
sendDataToPC (dati, aizdeva);
temp ='.';
sendDataToPC (un temperatūras, 1);
= abs (vērtība);
vērtība = vērtību;
vērtība = vērtība * d;
= abs (vērtība) 1;
len = checkLength ();
aizdeva = LEN;
bet (a)! = 0
(
Lietu =% 10;
arr [len 1], = rem 48;
= a/10;
LEN -;
)
Datu = arr;
sendDataToPC (dati, aizdeva);
temp = "";
sendDataToPC (un temperatūra, 2);
)
/************************************************* ******************************/
/************************************************* ******************************/
/ / Raksta baitu par Sensibus un pārbaudes apstiprināt
/************************************************* ******************************/
/************************************************* ******************************/
char sht11_write_byte (neparakstīts char vērtība)
(
neparakstīts CHAR i, kļūda = 0;
(i = 0x80; i> 0; i = 2) / / maiņu mazliet par masku
(
ja (i & vērtība)
output_high (sht11_data); / / aizseguma vērtību ar i, rakstiet uz Sensi-BUS
vēl
output_low (sht11_data);
output_high (sht11_sck); / / CLK par sensi-BUS
delay_us (5); / / pulswith apm.5 ar mums
output_low (sht11_sck);
)
output_high (sht11_data); / / Dati-line
output_high (sht11_sck); / / CLK # 9 ack
kļūda = ievade (sht11_data) / / pārbaudīt ack (dati tiks jāvelk uz leju aiz SHT11)
output_low (sht11_sck);
atgriezties kļūdas; / / kļūda = 1, ja ne apstiprināt
)/************************************************* *******************************/
/************************************************* *******************************/
/ / Skan baitu formu Sensibus un dod atzīst gadījumā "ack 1 ="
/************************************************* *******************************/
/************************************************* *******************************/
char sht11_read_byte (neparakstīts char ack)
(
neparakstīts CHAR i, val = 0;
output_high (sht11_data); / / Dati-line
(i = 0x80; i> 0; i = 2) / / maiņu mazliet par masku
(
output_high (sht11_sck); / / CLK par sensi-BUS
ja (ievade (sht11_data) == 1)
val = (Val | i); / / lasīt bitu
output_low (sht11_sck);
)
output_bit (sht11_data,)! ack, / / ja "ack == 1" nojaukt DATA-Line
output_high (sht11_sck); / / CLK # 9 ack
delay_us (5); / / pulswith apm.5 ar mums
output_low (sht11_sck);
output_high (sht11_data); / / Dati-line
atgriezties val;
)/************************************************* *******************************/
/************************************************* *******************************/
/ / Rada pārraides sākumu
/ / _____ ________
/ / DATI: |_______|
/ / ___ ___
/ / SCK: ___ | |___| |______
/************************************************* *******************************/
/************************************************* *******************************/
par spēkā neesošu sht11_transstart (spēkā neesošs)
(
output_high (sht11_data);
output_low (sht11_sck); / / Sākuma stāvoklis
delay_us (1);
output_high (sht11_sck);
delay_us (1);
output_low (sht11_data);
delay_us (1);
output_low (sht11_sck);
delay_us (3);
output_high (sht11_sck);
delay_us (1);
output_high (sht11_data);
delay_us (1);
output_low (sht11_sck);
)
/************************************************* *******************************/
/************************************************* *******************************/
/ / Sakaru reset: DATA-line = 1 un vismaz 9 SCK cikli
/ / Seko transstart
/ / _____________________________________________________ ________
/ / DATI: |_______|
/ / _ _ _ _ _ _ _ _ _ ___ ___
/ / SCK: __ | | __ | | __ | | __ | | __ | | __ | | __ | | __ | | __ | |______| |___| |______
/************************************************* *******************************/
/************************************************* *******************************/
par spēkā neesošu sht11_connectionreset (spēkā neesošs)
(
neparakstīts char i;
output_high (sht11_data);
output_low (sht11_sck); / / Sākuma stāvoklis
(i = 0; i <9; i ) / / 9 SCK cikliem
(
output_high (sht11_sck);
output_low (sht11_sck);
)
sht11_transstart (); / / pārraides sākums
)
/************************************************* *******************************/
/************************************************* *******************************/
/ / Nodzēš sensoru ar softreset
/************************************************* *******************************/
/************************************************* *******************************/
char sht11_softreset (spēkā neesošs)
(
neparakstīts char kļūda = 0;
sht11_connectionreset (); / / reset komunikācijas
kļūda = sht11_write_byte (sht_RESET); / / sūtīt RESET-komanda sensoru
atgriezties kļūdas; / / kļūda = 1, ja nav atbildes veidlapu sensors
)
/************************************************* *******************************/
/************************************************* *******************************/
/ / Skan statusu jāreģistrējas kontrolsumma (8-bitu)
/************************************************* *******************************/
/************************************************* *******************************/
char sht11_read_statusreg ()
(
neparakstīts char kļūda = 0;
neparakstīts char p_value, p_checksum;
sht11_transstart (); / / pārraides sākums
kļūda = sht11_write_byte (sht_STATUS_REG_R); / / sūtīt komandu sensoru
p_value = sht11_read_byte (sht_ACK); / / lasīt statusa reģistru (8-bitu)
p_checksum = sht11_read_byte (sht_noACK); / / lasīt kontrolsumma (8-bitu)
atgriezties kļūdas; / / kļūda = 1, ja nav atbildes veidlapu sensors
)
/************************************************* *******************************/
/************************************************* *******************************/
/ / Raksta statusu jāreģistrējas kontrolsumma (8-bitu)
/************************************************* *******************************/
/************************************************* *******************************/
char sht11_write_statusreg (neparakstīta CHAR * p_value)
(
neparakstīts char kļūda = 0;
sht11_transstart (); / / pārraides sākums
kļūda = sht11_write_byte (sht_STATUS_REG_W); / / sūtīt komandu sensoru
kļūda = sht11_write_byte (* p_value); / / sūtīt vērtības statusu reģistrs
atgriezties kļūdas; / / kļūda> = 1, ja nav atbildes veidlapu sensors
)
/************************************************* *******************************/
/************************************************* *******************************/
/ / Rada mērījumu (mitrums / temperatūra) ar kontrolsumma
/************************************************* *******************************/
/************************************************* *******************************/
char sht11_measure (neparakstīta CHAR * p_value, neparakstīta CHAR * p_checksum, neparakstītu palija režīmā)
(
neparakstīts kļūda = 0;
neparakstīts int i;
sht11_transstart (); / / pārraides sākums
slēdzis (režīms)
(/ / Sūtīt komandu sensoru
lieta TEMP: kļūda = sht11_write_byte (sht_MEASURE_TEMP); pārtraukuma;
lieta HUMI: kļūda = sht11_write_byte (sht_MEASURE_HUMI); pārtraukuma;
noklusējuma: pārtraukums;
)
(i = 0; i <65535; i )
ja (ievade (sht11_data) == 0)
pārtraukumu; / / gaidīt, kamēr sensors nav pabeigts novērtēšanas
ja (ievade (sht11_data) == 1)
kļūda = 1; / / vai timeout (~ 2 sek.) tiek sasniegta
* (P_value 1) = sht11_read_byte (sht_ACK); / / izlasīt pirmo baits (MSB)
* (P_value) = sht11_read_byte (sht_ACK); / / lasīt otro baits (LSB)
* P_checksum = sht11_read_byte (sht_noACK); / / lasīt kontrolsumma
atgriezties kļūda;
)
char sht11_measure_temp (neparakstīta CHAR * p_value, neparakstīts char * p_checksum)
(
atgriezties sht11_measure (p_value, p_checksum, TEMP);
)
char sht11_measure_humi (neparakstīta CHAR * p_value, neparakstīts char * p_checksum)
(
atgriezties sht11_measure (p_value, p_checksum, HUMI);
)/************************************************* *******************************/
/************************************************* *******************************/
/ / Aprēķina temperatūra [° C] un mitruma [% RH]
/ / Ievade: humi [Ērces] (12 bitu)
/ / Temp [Ērces] (14 bitu)
/ / Izejas: humi [% RH]
/ / Temperatūra [° C]
/************************************************* *******************************/
/************************************************* *******************************/
par spēkā neesošu sth11_calc (float * p_humidity, peldēt * p_temperature)
(
const pludiņš C1 =- 4,0; / / 12 Bit
const pludiņš C2 = 0,0405; / / 12 Bit
const pludiņš C3 0,0000028 =-; / / 12 Bit
const pludiņš T1 = 0,01; / / 14 Bit @ 5V
const pludiņš T2 = 0,00008; / / 14 Bit @ 5V
pludiņš RH, t, rh_lin, rh_true, t_C;
/ / Rh_lin: Mitruma lineāra
/ / Rh_true: Temperatūras kompensācija mitruma
/ / T_C: Temperatūra [° C]
RH =* p_humidity; / / RH: Mitruma [Ērces] 12 Bit
t =* p_temperature; / / t: temperatūra [Ērces] 14 Bit
t_C = t * ,01-40; / / Calc.temperatūra no ērcēm līdz [° C]
rh_lin = C3 * rh * rh C2 * rh C1, / / Calc.mitrums no ērcēm līdz [% RH]
rh_true = (t_C-25) * (T1 T2 * rh) rh_lin; / / Calc.temperatūras kompensācijas mitrums [% RH]
ja (rh_true> 100)
rh_true = 100; / / cut, ja vērtība ir ārpus
ja (rh_true <0,1)
rh_true = 0,1; / / fiziskā iespējas dažādām
* P_temperature = t_C; / / atgriešanās temperatūra [° C]
* P_humidity = rh_true; / / atgriešanās mitrumam [% RH]
)/************************************************* *******************************/
/************************************************* *******************************/
/ / Calcul de l'humidite en entier (sans calcul float)
/************************************************* *******************************/
/************************************************* *******************************/
int sht11_calc_humid_int (int16 w_humidity)
(
int32 H1, H2;
h1 = ((int32) w_humidity) * ((int32) w_humidity);
h1 = H1 / (int32) 1000;
h1 = h1 * (int32) 28;
h2 = ((int32) w_humidity) * (int32) 405;
h2 = h2 - h1;
h2 = h2 / (int32) 1000;
h2 = h2 - (int32) 40;
h2 = h2 / (int32) 10;
atgriešanās (h2);
)/************************************************* *******************************/
/************************************************* *******************************/
/ / Aprēķina rasas punkta
/ / Ievade: mitruma [% RH], temperatūra [° C]
/ / Izejas: rasas punkts [° C]
/************************************************* *******************************/
/************************************************* *******************************/
pludiņš sht11_calc_dewpoint (pludiņš h, peldēt t)
(
pludiņš logEx, dew_point;
logEx = 0,66077 7,5 * t / (237,3 t) (log10 (h) -2);
dew_point = (logEx - 0,66077) * 237,3 / (0,66077 7,5-logEx);
atgriezties dew_point;
)
/************************************************* ********************************/
/************************************************* ********************************/
//------------------------------------------------ ----------------------------------
/ / Paraugs programmu, kas parāda, kā izmantot SHT11 funkcijas
/ / 1.savienojums reset
/ / 2.pasākums mitrums [ērces] (12 bitu) un temperatūra [] ērces (14 bitu)
/ / 3.aprēķināt mitrums [% RH] un temperatūras []. C
/ / 4.aprēķināt rasas punktu []. C
/ / 5.drukāt temperatūra, mitrums, rasas punkts
/************************************************* *********************************/
/************************************************* *********************************/
par spēkā neesošu galvenais ()
(
vērtība humi_val, temp_val;
peldēt dew_point;
neparakstīts CHAR kļūda, kontrolsumma, temperatūra;
sht11_connectionreset ();
kamēr (1)
(
kļūda = 0;
kļūda = sht11_measure ((unsigned char *) un humi_val.i, un kontrolsumma, HUMI); / / pasākums mitruma
kļūda = sht11_measure ((unsigned char *) un temp_val.i, un kontrolsumma, TEMP); / / pasākums temperatūras
ja (kļūda! = 0)
sht11_connectionreset (); / / ja kļūda: savienojums atiestatīt
vēl
(
humi_val.f = (float) humi_val.i; / / pārveido vesels skaitlis peldēt
temp_val.f = (float) temp_val.i; / / pārveido vesels skaitlis peldēt
sth11_calc (& humi_val.f, un temp_val.f); / / aprēķināt mitrums, temperatūra
dew_point = sht11_calc_dewpoint (humi_val.f, temp_val.f); / / aprēķināt rasas punkta
/ / Nosūta galīgos datus sērijas saskarni (UART)
/ / Printf (temperatūra:% 5.1fC humi:% 5.1f%% rasas punkts:% 5.1fC \ n, temp_val.f, humi_val.f, dew_point);
/ / SendDataToPC (temp_val.f, 0x04);
/ / SendDataToPC (humi_val.f, 0x04);
/ / SendDataToPC (dew_point, 0x04); * /
floatToInt (temp_val.f);
floatToInt (humi_val.f);
floatToInt (dew_point);
floatToInt (kļūda);
)
//---------- Jāgaida apm.0.8s, lai izvairītos no sakaršanas SHTxx ------------------------------
delay_ms (1000);
temp = "\ r";
sendDataToPC (un temperatūras, 1);
/ / Temp = "\ n";
/ / SendDataToPC (un temperatūras, 1);
)
)