A
amitumi1003
Guest
проблему это alwayes проявлять такую же ценность, даже я изменить темп или humi кода нет.
В результате alwayes 37,22 4,25 64,13 .1.
PLS помогите мне .........
Вот код
Код:
# включить <18F8720.h>
# включить <math.h>
# включить <stdlib.h>типа союза
(
Неподписанный INT I;
поплавковый F;
Значение);# PORT_G байт = 0x00FD
# PORT_f байт = 0x0000
# PORT_c байт = 0x00BF
# PORT_D байт = 0x0000
# PORT_E байт = 0x0002
# предохранители СС, NOLVP, NOWDT, NOPROTECT
# использовать задержку (часы = 20000000)
# использовать RS232 (бод = 9600, RCV = PIN_G2, xmit = PIN_G1, STREAM = COMM_B)Enum (TEMP, HUMI);
# определить sht11_data PIN_F2
# определить sht11_sck PIN_F3
# определить sht_noACK 0
# определить sht_ACK 1
/ / ДОПОГ команды R / W
# определить sht_STATUS_REG_W 0x06 / / 000 0011 0
# определить sht_STATUS_REG_R 0x07 / / 000 0011 1
# определить sht_MEASURE_TEMP 0x03 / / 000 0001 1
# определить sht_MEASURE_HUMI 0x05 / / 000 0010 1
# определить sht_RESET 0x1e / / 000 1111 0
/************************************************* *******************************/
/************************************************* *******************************/
/ / Отправить расчетных данных для ПК
/************************************************* *******************************/
/************************************************* *******************************/
недействительным sendDataToPC (символ * данные, INT Len)
(
INT I;
output_high (PIN_G0);
delay_ms (10); / / подождать
для (i = 0; I <Len; I )
(
fprintf (COMM_B, "% C" * данные); / / запись в файл
Данные ;
)
delay_ms (10); / / подождать
output_low (PIN_G0);
delay_ms (10);
)INT checkLength (INT стоимость)
(
INT Len = 0;
хотя (значение! = 0)
(
Значение = value/10;
Len ;
)
вернуться Len;
)недействительным floatToInt (двойное значение)
(
INT A, REM, Len = 0, оказали;
обр символов [5];
знаков * данные, TEMP;
двойной D = 100.0;
A = ABS (стоимость);
Len = checkLength (а);
Поста = Len;
а (а! = 0)
(
REM A% = 10;
обр [Len-1] =
48 бэр;
A = a/10;
Лен -;
)
Данные = обр;
sendDataToPC (данные, пост);
Темп ='.';
sendDataToPC (И Temp, 1);
A = ABS (стоимость);
стоимость = стоимость-A;
стоимость = стоимость * D;
A = ABS (стоимость) 1;
Len = checkLength (а);
Поста = Len;
а (а! = 0)
(
REM A% = 10;
обр [Len-1] =
48 бэр;
A = a/10;
Лен -;
)
Данные = обр;
sendDataToPC (данные, пост);
Temp = '';
sendDataToPC (И температура, 2);
)
/************************************************* ******************************/
/************************************************* ******************************/
/ / Пишет в байтах на Sensibus и проверяет признать
/************************************************* ******************************/
/************************************************* ******************************/
символ sht11_write_byte (беззнаковое значение символов)
(
Неподписанный символ I, ошибки = 0;
для (i = 0x80; I> 0; I / = 2) / / сдвиг бит для маскировки
(
если (I
И стоимость)
output_high (sht11_data); / / маскировки значение I, напишите SENSI-BUS
еще
output_low (sht11_data);
output_high (sht11_sck); / / CLK для SENSI-BUS
delay_us (5); / / pulswith прибл.5 нас
output_low (sht11_sck);
)
output_high (sht11_data); / / релиз ДАННЫХ-лайн
output_high (sht11_sck); / / CLK # 9 ACK
= ошибка ввода (sht11_data); / / проверка ACK (данные будут снесены в SHT11)
output_low (sht11_sck);
вернуться ошибка / / ошибка = 1, если не признаете
)/************************************************* *******************************/
/************************************************* *******************************/
/ /
Читаем байт образуют Sensibus и дает признать в случае "АСК = 1"
/************************************************* *******************************/
/************************************************* *******************************/
символ sht11_read_byte (неподписанные символ ACK)
(
Неподписанный символ I, Val = 0;
output_high (sht11_data); / / релиз ДАННЫХ-лайн
для (i = 0x80; I> 0; I / = 2) / / сдвиг бит для маскировки
(
output_high (sht11_sck); / / CLK для SENSI-BUS
если (ввод (sht11_data) == 1)
Вал = (Val | I) / / читать битных
output_low (sht11_sck);
)
output_bit (sht11_data,! ACK); / / в случае "ACK == 1" раскрывающемся DATA-линия
output_high (sht11_sck); / / CLK # 9 ACK
delay_us (5); / / pulswith прибл.5 нас
output_low (sht11_sck);
output_high (sht11_data); / / релиз ДАННЫХ-лайн
вернуться вал;
)/************************************************* *******************************/
/************************************************* *******************************/
/ / Генерирует начать передачу
/ / _____ ________
/ / ДАННЫЕ: |_______|
/ / ___ ___
/ / SCK: ___ | |___| |______
/************************************************* *******************************/
/************************************************* *******************************/
sht11_transstart недействительным (недействительными)
(
output_high (sht11_data);
output_low (sht11_sck); / / Исходное состояние
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);
)
/************************************************* *******************************/
/************************************************* *******************************/
/ / Сброс связь: DATA-лайн = 1, и по меньшей мере 9 SCK циклов
/ / Затем transstart
/ / _____________________________________________________ ________
/ / ДАННЫЕ: |_______|
/ / _ _ _ _ _ _ _ _ _ ___ ___
/ / SCK: __ | | __ | | __ | | __ | | __ | | __ | | __ | | __ | | __ | |______| |___| |______
/************************************************* *******************************/
/************************************************* *******************************/
sht11_connectionreset недействительным (недействительными)
(
Неподписанный символ I;
output_high (sht11_data);
output_low (sht11_sck); / / Исходное состояние
для (i = 0; I <9; I ) / / 9 циклов SCK
(
output_high (sht11_sck);
output_low (sht11_sck);
)
sht11_transstart (); / / начать передачу
)
/************************************************* *******************************/
/************************************************* *******************************/
/ / Сброс датчика на softreset
/************************************************* *******************************/
/************************************************* *******************************/
символ sht11_softreset (вакуума)
(
Неподписанный символ Ошибка = 0;
sht11_connectionreset (); / / сброс связь
погрешность = sht11_write_byte (sht_RESET); / / отправить RESET-командной к датчику
вернуться ошибка / / ошибка = 1, в случае отсутствия ответа форме датчика
)
/************************************************* *******************************/
/************************************************* *******************************/
/ /
Читаем статус регистрации в контрольной (8-бит)
/************************************************* *******************************/
/************************************************* *******************************/
символ sht11_read_statusreg ()
(
Неподписанный символ Ошибка = 0;
Неподписанный символ p_value, p_checksum;
sht11_transstart (); / / начать передачу
Ошибка = sht11_write_byte (sht_STATUS_REG_R); / / отправить команду на датчике
p_value = sht11_read_byte (sht_ACK); / / читать статус регистра (8-бит)
p_checksum = sht11_read_byte (sht_noACK); / / читать контрольная (8-бит)
вернуться ошибка / / ошибка = 1, в случае отсутствия ответа форме датчика
)
/************************************************* *******************************/
/************************************************* *******************************/
/ / Пишет статус регистра с контрольной (8-бит)
/************************************************* *******************************/
/************************************************* *******************************/
символ sht11_write_statusreg (неподписанные символ * p_value)
(
Неподписанный символ Ошибка = 0;
sht11_transstart (); / / начать передачу
погрешность = sht11_write_byte (sht_STATUS_REG_W); / / отправить команду на датчике
погрешность = sht11_write_byte (* p_value); / / отправить стоимость статус регистра
вернуться ошибка / / ошибка> = 1, в случае отсутствия ответа форме датчика
)
/************************************************* *******************************/
/************************************************* *******************************/
/ / Делает измерения (влажность / температура) с контрольной
/************************************************* *******************************/
/************************************************* *******************************/
символ sht11_measure (неподписанные символ * p_value, беззнаковое символ * p_checksum, беззнаковое символ режима)
(
Неподписанный ошибки = 0;
Неподписанный INT I;
sht11_transstart (); / / начать передачу
переключатель (режим)
(/ / Отправить команду на датчике
ТЕМР случае: погрешность = sht11_write_byte (sht_MEASURE_TEMP); перерыва;
случае HUMI: Ошибка = sht11_write_byte (sht_MEASURE_HUMI); перерыва;
по умолчанию:-брейк;
)
для (i = 0; I <65535; I )
если (ввод (sht11_data) == 0)
Перерыв / / подождать до тех пор, пока датчик закончила измерения
если (ввод (sht11_data) == 1)
погрешность = 1; / / или тайм-аута (~ 2 сек.) достигается
* (p_value 1) = sht11_read_byte (sht_ACK); / / чтения первого байта (MSB)
* (p_value) = sht11_read_byte (sht_ACK); / / читать второй байт (LSB)
* p_checksum = sht11_read_byte (sht_noACK); / / читать контрольная
возвращают ошибку;
)
символ sht11_measure_temp (неподписанные символ * p_value, беззнаковое символ * p_checksum)
(
вернуться sht11_measure (p_value, p_checksum, TEMP);
)
символ sht11_measure_humi (неподписанные символ * p_value, беззнаковое символ * p_checksum)
(
вернуться sht11_measure (p_value, p_checksum, HUMI);
)/************************************************* *******************************/
/************************************************* *******************************/
/ / Вычисляет температуру [° C], а влажность воздуха [% RH]
/ / Ввод: humi [Клещи] (12 бит)
/ / Temp [Клещи] (14 бит)
/ / Результат: humi [% RH]
/ / Температура [° C]
/************************************************* *******************************/
/************************************************* *******************************/
недействительным sth11_calc (флоат * p_humidity, поплавковый * p_temperature)
(
Const поплавковый C1 =- 4.0; / / 12 Bit
Const поплавковый C2 = 0,0405; / / 12 Bit
Const поплавковый C3 =- 0.0000028 / / 12 Bit
Const поплавковый T1 = 0,01; / / 14 Bit @ 5V
Const поплавковый T2 = 0,00008 / / 14 Bit @ 5V
поплавковый Rh, T, rh_lin, rh_true, t_C;
/ / Rh_lin: Влажность линейная
/ / Rh_true: температурная компенсация влажность
/ / T_C: температура [° C]
Rh =* p_humidity / / Rh: Влажность [Клещи] 12 Bit
T =* p_temperature / / T: Температура [Клещи] 14 Bit
t_C = T * 0,01 - 40 / / Calc.Температура от клещей к [° C]
rh_lin = C3 * * Rh Rh C2 * Rh С1 / / Calc.влажность от клещей-с [% RH]
rh_true = (t_C-25) * (T1 T2 * RH) rh_lin / / Calc.с температурной компенсацией влажность [% RH]
если (rh_true> 100)
rh_true = 100; / / если сократить стоимость не входит
если (rh_true <0,1)
rh_true = 0.1; / / физический возможный диапазон
* p_temperature = t_C / / возвращение температуры [° C]
* p_humidity = rh_true / / возврата влажность [% RH]
)/************************************************* *******************************/
/************************************************* *******************************/
/ / CALCUL DE L'humidite EN entier (без CALCUL поплавковый)
/************************************************* *******************************/
/************************************************* *******************************/
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;
возвращение (H2);
)/************************************************* *******************************/
/************************************************* *******************************/
/ / Вычисляет точку росы
/ / Ввод: Влажность [% RH], температура [° C]
/ / Вывод: точка росы [° C]
/************************************************* *******************************/
/************************************************* *******************************/
поплавковый sht11_calc_dewpoint (флоат ч, поплавковый т)
(
поплавковый logEx, dew_point;
logEx = 0,66077 * 7,5 т / (237.3 Т) (LOG10 (H) -2);
dew_point = (logEx - 0,66077) * 237.3 / (0,66077 7,5-logEx);
вернуться dew_point;
)
/************************************************* ********************************/
/************************************************* ********************************/
//------------------------------------------------ ----------------------------------
/ / Выборка программа, которая показывает, как использовать функции SHT11
/ / 1.Сброс подключения
/ / 2.измерения влажности [галочка] (12 бит) и температуры [галочка] (14 бит)
/ / 3.рассчитать влажность [% RH] и температуры [. C]
/ / 4.рассчитать точку росы [. C]
/ / 5.Версия для печати температуры, влажности, точки росы
/************************************************* *********************************/
/************************************************* *********************************/
недействительным Main ()
(
Значение humi_val, temp_val;
поплавковый dew_point;
Неподписанный символ ошибку, контрольная, TEMP;
sht11_connectionreset ();
в то время как (1)
(
Ошибка = 0;
Ошибка sht11_measure = ((беззнаковое символ *)
И humi_val.i,
И контрольная, HUMI); / / измерения влажности
Ошибка sht11_measure = ((беззнаковое символ *)
И temp_val.i,
И контрольную, TEMP); / / измерения температуры
если (ошибка! = 0)
sht11_connectionreset (); / / в случае ошибки: подключение сброс
еще
(
humi_val.f = (флоат) humi_val.i / / конвертирует целое число с плавающей точкой
temp_val.f = (флоат) temp_val.i / / конвертирует целое число с плавающей точкой
sth11_calc (И humi_val.f,
И temp_val.f); / / вычислить влажность, температура
dew_point = sht11_calc_dewpoint (humi_val.f, temp_val.f); / / вычислить точку росы
/ / отправить окончательных данных по последовательному интерфейсу (UART)
/ / printf (Temp:% 5.1fC humi:% 5.1f%% точка росы:% 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 (ошибка);
)
//---------- подождать ок.0.8s избежать разогрева SHTxx ------------------------------
delay_ms (1000);
Temp = '\ R';
sendDataToPC (И Temp, 1);
/ / Temp = '\ N';
/ / sendDataToPC (И Temp, 1);
)
)
В результате alwayes 37,22 4,25 64,13 .1.
PLS помогите мне .........
Вот код
Код:
# включить <18F8720.h>
# включить <math.h>
# включить <stdlib.h>типа союза
(
Неподписанный INT I;
поплавковый F;
Значение);# PORT_G байт = 0x00FD
# PORT_f байт = 0x0000
# PORT_c байт = 0x00BF
# PORT_D байт = 0x0000
# PORT_E байт = 0x0002
# предохранители СС, NOLVP, NOWDT, NOPROTECT
# использовать задержку (часы = 20000000)
# использовать RS232 (бод = 9600, RCV = PIN_G2, xmit = PIN_G1, STREAM = COMM_B)Enum (TEMP, HUMI);
# определить sht11_data PIN_F2
# определить sht11_sck PIN_F3
# определить sht_noACK 0
# определить sht_ACK 1
/ / ДОПОГ команды R / W
# определить sht_STATUS_REG_W 0x06 / / 000 0011 0
# определить sht_STATUS_REG_R 0x07 / / 000 0011 1
# определить sht_MEASURE_TEMP 0x03 / / 000 0001 1
# определить sht_MEASURE_HUMI 0x05 / / 000 0010 1
# определить sht_RESET 0x1e / / 000 1111 0
/************************************************* *******************************/
/************************************************* *******************************/
/ / Отправить расчетных данных для ПК
/************************************************* *******************************/
/************************************************* *******************************/
недействительным sendDataToPC (символ * данные, INT Len)
(
INT I;
output_high (PIN_G0);
delay_ms (10); / / подождать
для (i = 0; I <Len; I )
(
fprintf (COMM_B, "% C" * данные); / / запись в файл
Данные ;
)
delay_ms (10); / / подождать
output_low (PIN_G0);
delay_ms (10);
)INT checkLength (INT стоимость)
(
INT Len = 0;
хотя (значение! = 0)
(
Значение = value/10;
Len ;
)
вернуться Len;
)недействительным floatToInt (двойное значение)
(
INT A, REM, Len = 0, оказали;
обр символов [5];
знаков * данные, TEMP;
двойной D = 100.0;
A = ABS (стоимость);
Len = checkLength (а);
Поста = Len;
а (а! = 0)
(
REM A% = 10;
обр [Len-1] =
48 бэр;
A = a/10;
Лен -;
)
Данные = обр;
sendDataToPC (данные, пост);
Темп ='.';
sendDataToPC (И Temp, 1);
A = ABS (стоимость);
стоимость = стоимость-A;
стоимость = стоимость * D;
A = ABS (стоимость) 1;
Len = checkLength (а);
Поста = Len;
а (а! = 0)
(
REM A% = 10;
обр [Len-1] =
48 бэр;
A = a/10;
Лен -;
)
Данные = обр;
sendDataToPC (данные, пост);
Temp = '';
sendDataToPC (И температура, 2);
)
/************************************************* ******************************/
/************************************************* ******************************/
/ / Пишет в байтах на Sensibus и проверяет признать
/************************************************* ******************************/
/************************************************* ******************************/
символ sht11_write_byte (беззнаковое значение символов)
(
Неподписанный символ I, ошибки = 0;
для (i = 0x80; I> 0; I / = 2) / / сдвиг бит для маскировки
(
если (I
И стоимость)
output_high (sht11_data); / / маскировки значение I, напишите SENSI-BUS
еще
output_low (sht11_data);
output_high (sht11_sck); / / CLK для SENSI-BUS
delay_us (5); / / pulswith прибл.5 нас
output_low (sht11_sck);
)
output_high (sht11_data); / / релиз ДАННЫХ-лайн
output_high (sht11_sck); / / CLK # 9 ACK
= ошибка ввода (sht11_data); / / проверка ACK (данные будут снесены в SHT11)
output_low (sht11_sck);
вернуться ошибка / / ошибка = 1, если не признаете
)/************************************************* *******************************/
/************************************************* *******************************/
/ /
Читаем байт образуют Sensibus и дает признать в случае "АСК = 1"
/************************************************* *******************************/
/************************************************* *******************************/
символ sht11_read_byte (неподписанные символ ACK)
(
Неподписанный символ I, Val = 0;
output_high (sht11_data); / / релиз ДАННЫХ-лайн
для (i = 0x80; I> 0; I / = 2) / / сдвиг бит для маскировки
(
output_high (sht11_sck); / / CLK для SENSI-BUS
если (ввод (sht11_data) == 1)
Вал = (Val | I) / / читать битных
output_low (sht11_sck);
)
output_bit (sht11_data,! ACK); / / в случае "ACK == 1" раскрывающемся DATA-линия
output_high (sht11_sck); / / CLK # 9 ACK
delay_us (5); / / pulswith прибл.5 нас
output_low (sht11_sck);
output_high (sht11_data); / / релиз ДАННЫХ-лайн
вернуться вал;
)/************************************************* *******************************/
/************************************************* *******************************/
/ / Генерирует начать передачу
/ / _____ ________
/ / ДАННЫЕ: |_______|
/ / ___ ___
/ / SCK: ___ | |___| |______
/************************************************* *******************************/
/************************************************* *******************************/
sht11_transstart недействительным (недействительными)
(
output_high (sht11_data);
output_low (sht11_sck); / / Исходное состояние
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);
)
/************************************************* *******************************/
/************************************************* *******************************/
/ / Сброс связь: DATA-лайн = 1, и по меньшей мере 9 SCK циклов
/ / Затем transstart
/ / _____________________________________________________ ________
/ / ДАННЫЕ: |_______|
/ / _ _ _ _ _ _ _ _ _ ___ ___
/ / SCK: __ | | __ | | __ | | __ | | __ | | __ | | __ | | __ | | __ | |______| |___| |______
/************************************************* *******************************/
/************************************************* *******************************/
sht11_connectionreset недействительным (недействительными)
(
Неподписанный символ I;
output_high (sht11_data);
output_low (sht11_sck); / / Исходное состояние
для (i = 0; I <9; I ) / / 9 циклов SCK
(
output_high (sht11_sck);
output_low (sht11_sck);
)
sht11_transstart (); / / начать передачу
)
/************************************************* *******************************/
/************************************************* *******************************/
/ / Сброс датчика на softreset
/************************************************* *******************************/
/************************************************* *******************************/
символ sht11_softreset (вакуума)
(
Неподписанный символ Ошибка = 0;
sht11_connectionreset (); / / сброс связь
погрешность = sht11_write_byte (sht_RESET); / / отправить RESET-командной к датчику
вернуться ошибка / / ошибка = 1, в случае отсутствия ответа форме датчика
)
/************************************************* *******************************/
/************************************************* *******************************/
/ /
Читаем статус регистрации в контрольной (8-бит)
/************************************************* *******************************/
/************************************************* *******************************/
символ sht11_read_statusreg ()
(
Неподписанный символ Ошибка = 0;
Неподписанный символ p_value, p_checksum;
sht11_transstart (); / / начать передачу
Ошибка = sht11_write_byte (sht_STATUS_REG_R); / / отправить команду на датчике
p_value = sht11_read_byte (sht_ACK); / / читать статус регистра (8-бит)
p_checksum = sht11_read_byte (sht_noACK); / / читать контрольная (8-бит)
вернуться ошибка / / ошибка = 1, в случае отсутствия ответа форме датчика
)
/************************************************* *******************************/
/************************************************* *******************************/
/ / Пишет статус регистра с контрольной (8-бит)
/************************************************* *******************************/
/************************************************* *******************************/
символ sht11_write_statusreg (неподписанные символ * p_value)
(
Неподписанный символ Ошибка = 0;
sht11_transstart (); / / начать передачу
погрешность = sht11_write_byte (sht_STATUS_REG_W); / / отправить команду на датчике
погрешность = sht11_write_byte (* p_value); / / отправить стоимость статус регистра
вернуться ошибка / / ошибка> = 1, в случае отсутствия ответа форме датчика
)
/************************************************* *******************************/
/************************************************* *******************************/
/ / Делает измерения (влажность / температура) с контрольной
/************************************************* *******************************/
/************************************************* *******************************/
символ sht11_measure (неподписанные символ * p_value, беззнаковое символ * p_checksum, беззнаковое символ режима)
(
Неподписанный ошибки = 0;
Неподписанный INT I;
sht11_transstart (); / / начать передачу
переключатель (режим)
(/ / Отправить команду на датчике
ТЕМР случае: погрешность = sht11_write_byte (sht_MEASURE_TEMP); перерыва;
случае HUMI: Ошибка = sht11_write_byte (sht_MEASURE_HUMI); перерыва;
по умолчанию:-брейк;
)
для (i = 0; I <65535; I )
если (ввод (sht11_data) == 0)
Перерыв / / подождать до тех пор, пока датчик закончила измерения
если (ввод (sht11_data) == 1)
погрешность = 1; / / или тайм-аута (~ 2 сек.) достигается
* (p_value 1) = sht11_read_byte (sht_ACK); / / чтения первого байта (MSB)
* (p_value) = sht11_read_byte (sht_ACK); / / читать второй байт (LSB)
* p_checksum = sht11_read_byte (sht_noACK); / / читать контрольная
возвращают ошибку;
)
символ sht11_measure_temp (неподписанные символ * p_value, беззнаковое символ * p_checksum)
(
вернуться sht11_measure (p_value, p_checksum, TEMP);
)
символ sht11_measure_humi (неподписанные символ * p_value, беззнаковое символ * p_checksum)
(
вернуться sht11_measure (p_value, p_checksum, HUMI);
)/************************************************* *******************************/
/************************************************* *******************************/
/ / Вычисляет температуру [° C], а влажность воздуха [% RH]
/ / Ввод: humi [Клещи] (12 бит)
/ / Temp [Клещи] (14 бит)
/ / Результат: humi [% RH]
/ / Температура [° C]
/************************************************* *******************************/
/************************************************* *******************************/
недействительным sth11_calc (флоат * p_humidity, поплавковый * p_temperature)
(
Const поплавковый C1 =- 4.0; / / 12 Bit
Const поплавковый C2 = 0,0405; / / 12 Bit
Const поплавковый C3 =- 0.0000028 / / 12 Bit
Const поплавковый T1 = 0,01; / / 14 Bit @ 5V
Const поплавковый T2 = 0,00008 / / 14 Bit @ 5V
поплавковый Rh, T, rh_lin, rh_true, t_C;
/ / Rh_lin: Влажность линейная
/ / Rh_true: температурная компенсация влажность
/ / T_C: температура [° C]
Rh =* p_humidity / / Rh: Влажность [Клещи] 12 Bit
T =* p_temperature / / T: Температура [Клещи] 14 Bit
t_C = T * 0,01 - 40 / / Calc.Температура от клещей к [° C]
rh_lin = C3 * * Rh Rh C2 * Rh С1 / / Calc.влажность от клещей-с [% RH]
rh_true = (t_C-25) * (T1 T2 * RH) rh_lin / / Calc.с температурной компенсацией влажность [% RH]
если (rh_true> 100)
rh_true = 100; / / если сократить стоимость не входит
если (rh_true <0,1)
rh_true = 0.1; / / физический возможный диапазон
* p_temperature = t_C / / возвращение температуры [° C]
* p_humidity = rh_true / / возврата влажность [% RH]
)/************************************************* *******************************/
/************************************************* *******************************/
/ / CALCUL DE L'humidite EN entier (без CALCUL поплавковый)
/************************************************* *******************************/
/************************************************* *******************************/
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;
возвращение (H2);
)/************************************************* *******************************/
/************************************************* *******************************/
/ / Вычисляет точку росы
/ / Ввод: Влажность [% RH], температура [° C]
/ / Вывод: точка росы [° C]
/************************************************* *******************************/
/************************************************* *******************************/
поплавковый sht11_calc_dewpoint (флоат ч, поплавковый т)
(
поплавковый logEx, dew_point;
logEx = 0,66077 * 7,5 т / (237.3 Т) (LOG10 (H) -2);
dew_point = (logEx - 0,66077) * 237.3 / (0,66077 7,5-logEx);
вернуться dew_point;
)
/************************************************* ********************************/
/************************************************* ********************************/
//------------------------------------------------ ----------------------------------
/ / Выборка программа, которая показывает, как использовать функции SHT11
/ / 1.Сброс подключения
/ / 2.измерения влажности [галочка] (12 бит) и температуры [галочка] (14 бит)
/ / 3.рассчитать влажность [% RH] и температуры [. C]
/ / 4.рассчитать точку росы [. C]
/ / 5.Версия для печати температуры, влажности, точки росы
/************************************************* *********************************/
/************************************************* *********************************/
недействительным Main ()
(
Значение humi_val, temp_val;
поплавковый dew_point;
Неподписанный символ ошибку, контрольная, TEMP;
sht11_connectionreset ();
в то время как (1)
(
Ошибка = 0;
Ошибка sht11_measure = ((беззнаковое символ *)
И humi_val.i,
И контрольная, HUMI); / / измерения влажности
Ошибка sht11_measure = ((беззнаковое символ *)
И temp_val.i,
И контрольную, TEMP); / / измерения температуры
если (ошибка! = 0)
sht11_connectionreset (); / / в случае ошибки: подключение сброс
еще
(
humi_val.f = (флоат) humi_val.i / / конвертирует целое число с плавающей точкой
temp_val.f = (флоат) temp_val.i / / конвертирует целое число с плавающей точкой
sth11_calc (И humi_val.f,
И temp_val.f); / / вычислить влажность, температура
dew_point = sht11_calc_dewpoint (humi_val.f, temp_val.f); / / вычислить точку росы
/ / отправить окончательных данных по последовательному интерфейсу (UART)
/ / printf (Temp:% 5.1fC humi:% 5.1f%% точка росы:% 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 (ошибка);
)
//---------- подождать ок.0.8s избежать разогрева SHTxx ------------------------------
delay_ms (1000);
Temp = '\ R';
sendDataToPC (И Temp, 1);
/ / Temp = '\ N';
/ / sendDataToPC (И Temp, 1);
)
)