#1
Сообщение
smirnoff » 17.04.2020{, 22:08}
Доброго дня всем форумчанам.
Подскажите пожалуйста может кто сталкивался с такой проблемой:
Программа FLProg-6.3.1
Arduino IDE 1.8.10
Датчик влажности и температуры DHT22
Плата arduino NANO (китайская)
Нарисовал схему вывода температуры и влажности с данного датчика на LCD экран. (все блоки стандартные из программы)
Скомпилировал, залил скетч в NANO все отлично работает показывает температуру и влажность при подключенном кабеле USB к компьютеру.
Как только подключаешь кабель USB к любому другому источнику (кроме компьютера) и при подаче питания на вход Vin (12 V) и при подаче питания на ногу 5V (соответственно 5 вольт) на экран перестают выводиться показания с датчика,
пишет влажность 1 % и температура 1 °С.
Датчик подключал к разным ногам, поведение одинаковое.
Схему подключения не прилагаю, на другом скетче все работает с любым питанием.
Вот скетч:
#include "DHT_NEW.h"
#include <LiquidCrystal.h>
LiquidCrystal _lcd1(9, 8, 4, 5, 6, 7);
int _dispTempLength1=0;
boolean _isNeedClearDisp1;
DHT _dht1;
unsigned long _dht1LRT = 0UL;
unsigned long _dht1Tti = 0UL;
int _disp2oldLength = 0;
int _disp1oldLength = 0;
void setup()
{
_lcd1.begin(20, 4);
_dht1.setup(10);
_dht1LRT = millis();
_dht1Tti = millis();
}
void loop()
{
if (_isNeedClearDisp1) {_lcd1.clear(); _isNeedClearDisp1= 0;}
//Плата:1
if(_isTimer(_dht1Tti, 1000)) {
if(_isTimer(_dht1LRT,( _dht1.getMinimumSamplingPeriod()))) {
_dht1.readSensor();
_dht1LRT = millis();
_dht1Tti = millis();
}
}
if (!(0)) {
_dispTempLength1 = ((((String("humidity ")) + (( _floatToStringWitRaz(_dht1.humidity,2))) + (String(" %"))))).length();
if (_disp2oldLength > _dispTempLength1) {_isNeedClearDisp1 = 1;}
_disp2oldLength = _dispTempLength1;
_lcd1.setCursor(0, 1);
_lcd1.print((((String("humidity ")) + (( _floatToStringWitRaz(_dht1.humidity,2))) + (String(" %")))));
} else {
if (_disp2oldLength > 0) {_isNeedClearDisp1 = 1; _disp2oldLength = 0;}
}
if (!(0)) {
_dispTempLength1 = ((((String("temperatura ")) + (( _floatToStringWitRaz(_dht1.temperature,2))) + (String(" C"))))).length();
if (_disp1oldLength > _dispTempLength1) {_isNeedClearDisp1 = 1;}
_disp1oldLength = _dispTempLength1;
_lcd1.setCursor(0, 0);
_lcd1.print((((String("temperatura ")) + (( _floatToStringWitRaz(_dht1.temperature,2))) + (String(" C")))));
} else {
if (_disp1oldLength > 0) {_isNeedClearDisp1 = 1; _disp1oldLength = 0;}
}
}
String _floatToStringWitRaz(float value, int raz)
{
return String(value,raz);
}
bool _isTimer(unsigned long startTime, unsigned long period )
{
unsigned long currentTime;
currentTime = millis();
if (currentTime>= startTime) {return (currentTime>=(startTime + period));} else {return (currentTime >=(4294967295-startTime+period));}
}
Отправлено спустя 6 минут 2 секунды:
На надпись над блоком LCD не обращайте внимания в настройках строки разные.
-
Вложения
-