Re: Простые часы на LCD2004 (Arduino)
Датчик с платой или без.
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
forum.rcl-radio.ru → Тестирование скетчей → Простые часы на LCD2004 (Arduino)
Датчик с платой или без.
Датчик с платой или без.
Датчик металлический на проводе, вот такой:
На выход датчика через резистор 4,7 кОм подайте +5В
На выход датчика через резистор 4,7 кОм подайте +5В
"Резистор на желтый провод и к нему +5В - правильно я понимаю?"
Всё нашел способ подключения датчика через резистор.
Спасибо за совет!
да
Не компилируется почему то, выдаёт ошибку 'RTCDateTime' does not name a type; did you mean 'DateTime'? в 9 строке.
Установите старую версию библиотеки - Данный контент доступен только зарегистрированным пользователям.
liman324 Спасибо. Помогло.
Такая же ерунда как в посте 25 показывает -127. Датчик 18b20 на плате(модуль). А вообще правильно ли 18b20 садить на аналоговый пин? Все предыдущие скетчи проверил, с одним 18b20 всё нормально, а скетч где добавлен BME280 показывает ерунду.
Проверьте наличие подтягивающего резистора 4,7К на плате датчика.
А вообще правильно ли 18b20 садить на аналоговый пин?
Не имеет значения, аналоговый пин он же и цифровой
Проверьте наличие подтягивающего резистора 4,7К на плате датчика.
А вообще правильно ли 18b20 садить на аналоговый пин?
Не имеет значения, аналоговый пин он же и цифровой
Резистор есть, ещё не отображается день недели. Я тестирую без BME, без датчика должны отображатся ноли, но температура с BME(в его отсутствии) 29 градусов, а с 18b20 -127
Вы какой скетч используете?
Вы какой скетч используете?
Из 9 поста.
Заменил модуль 18b20 на отдельный датчик 18b20 с резистором тоже самое -127
Вы два датчика DS18b20 подключаете?
Вы два датчика DS18b20 подключаете?
один
Я точно не скажу, но с одним скорее всего работать не будет.
Удалите строку:
if(DateTime.second==30){t2 = temp.getTempCByIndex(1);}
Я точно не скажу, но с одним скорее всего работать не будет.
Удалите строку:
if(DateTime.second==30){t2 = temp.getTempCByIndex(1);}
Я не внимательно читал. Оказывается там помимо ВМЕ ещё два 18b20. Установил второй и всё стало норм, кроме дня недели.
Если закоментировать строку которую Вы сказали то один показывает "0", а второй температуру.
Температура снимается с датчиков не постоянно, а по какому то алгоритму? Очень инертно реагируют на изменения температуры.
Температура снимается с датчиков не постоянно, а по какому то алгоритму?
В 15 и 20 секунд каждой минуты идет замер температуры.
Попробуйте этот скетч:
#include <Wire.h>
#include <LiquidCrystal_I2C.h> //Библиотека - http://forum.rcl-radio.ru/misc.php?action=pan_download&item=45&download=1
#include <DS3231.h>//https://github.com/jarzebski/Arduino-DS3231/archive/master.zip // DS3231.zip
#include <DallasTemperature.h>// http://rcl-radio.ru/wp-content/uploads/2018/07/DallasTemperature.zip
#include <Adafruit_Sensor.h> // https://github.com/adafruit/Adafruit_Sensor
#include <Adafruit_BME280.h> // https://github.com/adafruit/Adafruit_BME280_Library
OneWire oneWire(A0);// вход датчика 18b20
DallasTemperature temp(&oneWire);
DS3231 clock;RTCDateTime DateTime;
LiquidCrystal_I2C lcd(0x27,20,4); // Устанавливаем дисплей
Adafruit_BME280 bme;
byte v1[8] = {7,7,7,7,7,7,7,7};
byte v2[8] = {7,7,0, 0, 0, 0, 0, 0};
byte v3[8] = { 0, 0, 0, 0, 0,0,31,31};
byte v4[8] = {31,31, 0, 0, 0, 0,31,31};
byte v5[8] = { 28, 28, 0, 0, 0, 0, 28, 28};//
byte v6[8] = {28,28,28,28,28,28,28,28};
byte v7[8] = { 0, 0, 0, 0, 0, 0,7,7};
byte v8[8] = { 31, 31,0,0,0,0,0, 0};
int a[6];
byte i,d1,d2,d3,d4,d5,d6,e1,e2,e3;
char * mes[12]{"Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"};
char * den[8]{" ","Mon","Tue","Wed","Thu","Fri","Sat","Sun"};
float hpa,h,t1,t2;
void setup(){ Wire.begin(); clock.begin();
bme.begin(0x76);
temp.begin(); temp.setResolution(9);//9 бит
//clock.setDateTime(__DATE__, __TIME__);
lcd.init();lcd.backlight();// Включаем подсветку дисплея
lcd.createChar(1, v1);lcd.createChar(2, v2);lcd.createChar(3, v3);lcd.createChar(4, v4);lcd.createChar(5, v5);lcd.createChar(6, v6);lcd.createChar(7, v7);lcd.createChar(8, v8);
}
void loop(){
if(DateTime.second==0){temp.requestTemperatures();}
if(DateTime.second==15){t1 = temp.getTempCByIndex(0);}
if(DateTime.second==30){t2 = temp.getTempCByIndex(1);}
if(DateTime.second==45){
hpa = bme.readPressure() / 100.0F;
h = bme.readHumidity();}
// hpa=1002;
// h=35;
if(DateTime.hour>=0&&DateTime.hour<6){lcd.noBacklight();}else{lcd.backlight();}
DateTime=clock.getDateTime();
a[0]=DateTime.hour/10;
a[1]=DateTime.hour%10;
a[2]=DateTime.minute/10;
a[3]=DateTime.minute%10;
a[4]=DateTime.second/10;
a[5]=DateTime.second%10;
for(i=0;i<6;i++){
switch(i){
case 0: e1=0,e2=1,e3=2;break;
case 1: e1=3,e2=4,e3=5;break;
case 2: e1=7,e2=8,e3=9;break;
case 3: e1=10,e2=11,e3=12;break;
case 4: e1=14,e2=15,e3=16;break;
case 5: e1=17,e2=18,e3=19;break;
}
switch(a[i]){
case 0: d1=1,d2=8,d3=6,d4=1,d5=3,d6=6;break;
case 1: d1=32,d2=2,d3=6,d4=32,d5=32,d6=6;break;
case 2: d1=2,d2=8,d3=6,d4=1,d5=4,d6=5;break;
case 3: d1=2,d2=4,d3=6,d4=7,d5=3,d6=6;break;
case 4: d1=1,d2=3,d3=6,d4=32,d5=32,d6=6;break;
case 5: d1=1,d2=4,d3=5,d4=7,d5=3,d6=6;break;
case 6: d1=1,d2=4,d3=5,d4=1,d5=3,d6=6;break;
case 7: d1=1,d2=8,d3=6,d4=32,d5=32,d6=6;break;
case 8: d1=1,d2=4,d3=6,d4=1,d5=3,d6=6;break;
case 9: d1=1,d2=4,d3=6,d4=7,d5=3,d6=6;break;
}
lcd.setCursor(e1,0);lcd.write((uint8_t)d1);lcd.setCursor(e2,0);lcd.write((uint8_t)d2);lcd.setCursor(e3,0);lcd.write((uint8_t)d3);
lcd.setCursor(e1,1);lcd.write((uint8_t)d4);lcd.setCursor(e2,1);lcd.write((uint8_t)d5);lcd.setCursor(e3,1);lcd.write((uint8_t)d6);
}
lcd.setCursor(6,0);lcd.print(".");lcd.setCursor(13,0);lcd.print(".");lcd.setCursor(6,1);lcd.print(".");lcd.setCursor(13,1);lcd.print(".");
lcd.setCursor(2,2);if(DateTime.day<10){lcd.print(" ");}lcd.print(DateTime.day);lcd.print(" ");
lcd.print(mes[DateTime.month-1]);lcd.print(" ");lcd.print(DateTime.year);lcd.print(" ");lcd.print(den[DateTime.dayOfWeek]);
lcd.setCursor(0,3);lcd.print("P");lcd.print(hpa*0.75,0);lcd.print(" ");lcd.print(h,0);lcd.print("% ");
lcd.setCursor(9,3);if(t1<0){lcd.print(t1,0);lcd.print("C ");}else{lcd.print(t1,1);lcd.print("C ");}
lcd.setCursor(15,3);if(t2<0){lcd.print(t2,0);lcd.print("C");}else{lcd.print(t2,1);lcd.print("C");}
}
liman324
А зачем два 18b20? если в BME280 есть датчик температуры
BME280 - немного завышает.
Попробовал скетч из 43 поста. День недели не отображается, остальное норм.
Ещё хотел спросить hpa = bme.readPressure() / 100.0F; почему делим на 100, а не на 133.322 ?
День недели должен работать, попробуйте переустановить время:
clock.setDateTime(__DATE__, __TIME__);
Ещё хотел спросить hpa = bme.readPressure() / 100.0F; почему делим на 100, а не на 133.322 ?
Так было в примере в библиотеки указано.
День недели должен работать, попробуйте переустановить время:
clock.setDateTime(__DATE__, __TIME__);
Ещё хотел спросить hpa = bme.readPressure() / 100.0F; почему делим на 100, а не на 133.322 ?
Так было в примере в библиотеки указано.
Переустановил время всё заработало. Спасибо.
А по поводу деления на 100, правильно будет делить на 133.322(проверено на практике), при делении на 100 будет врать т.е. завышать давление в мм.рт.ст.
Добрый день. Скетч заливается в ардуино нано,lcd горит но ничего не показывает. Прошу помощи.
#include <Wire.h>
#include <LiquidCrystal_I2C.h> //Библиотека - http://forum.rcl-radio.ru/misc.php?action=pan_download&item=45&download=1
#include <DS3231.h>//https://github.com/jarzebski/Arduino-DS3231/archive/master.zip // DS3231.zip
#include <Adafruit_Sensor.h> // https://github.com/adafruit/Adafruit_Sensor
#include <Adafruit_BME280.h> // https://github.com/adafruit/Adafruit_BME280_Library
DS3231 clock;RTCDateTime DateTime;
LiquidCrystal_I2C lcd(0x27,20,4); // Устанавливаем дисплей
Adafruit_BME280 bme;
byte v1[8] = {7,7,7,7,7,7,7,7};
byte v2[8] = {7,7,0, 0, 0, 0, 0, 0};
byte v3[8] = { 0, 0, 0, 0, 0,0,31,31};
byte v4[8] = {31,31, 0, 0, 0, 0,31,31};
byte v5[8] = { 28, 28, 0, 0, 0, 0, 28, 28};//
byte v6[8] = {28,28,28,28,28,28,28,28};
byte v7[8] = { 0, 0, 0, 0, 0, 0,7,7};
byte v8[8] = { 31, 31,0,0,0,0,0, 0};
int a[6];
byte i,d1,d2,d3,d4,d5,d6,e1,e2,e3;
char const* mes[12]{"Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"};
char const* den[7]{"Mon","Tue","Wed","Thu","Fri","Sat","Sun"};
float hpa,h,t;
void setup(){ Wire.begin(); clock.begin();
bme.begin(0x76);
//temp.begin(); temp.setResolution(9);//9 бит
//clock.setDateTime(2021, 15, 11, 1, 11, 0);
lcd.init();lcd.backlight();// Включаем подсветку дисплея
lcd.createChar(1, v1);lcd.createChar(2, v2);lcd.createChar(3, v3);lcd.createChar(4, v4);lcd.createChar(5, v5);lcd.createChar(6, v6);lcd.createChar(7, v7);lcd.createChar(8, v8);
}
void loop(){
{
t = bme.readTemperature();
hpa = bme.readPressure() / 100.0F;
h = bme.readHumidity();}
hpa=1002;
h=35;
if(DateTime.hour>=0&&DateTime.hour<6){lcd.noBacklight();}else{lcd.backlight();}
DateTime=clock.getDateTime();
a[0]=DateTime.hour/10;
a[1]=DateTime.hour%10;
a[2]=DateTime.minute/10;
a[3]=DateTime.minute%10;
a[4]=DateTime.second/10;
a[5]=DateTime.second%10;
for(i=0;i<6;i++){
switch(i){
case 0: e1=0,e2=1,e3=2;break;
case 1: e1=3,e2=4,e3=5;break;
case 2: e1=7,e2=8,e3=9;break;
case 3: e1=10,e2=11,e3=12;break;
case 4: e1=14,e2=15,e3=16;break;
case 5: e1=17,e2=18,e3=19;break;
}
switch(a[i]){
case 0: d1=1,d2=8,d3=6,d4=1,d5=3,d6=6;break;
case 1: d1=32,d2=2,d3=6,d4=32,d5=32,d6=6;break;
case 2: d1=2,d2=8,d3=6,d4=1,d5=4,d6=5;break;
case 3: d1=2,d2=4,d3=6,d4=7,d5=3,d6=6;break;
case 4: d1=1,d2=3,d3=6,d4=32,d5=32,d6=6;break;
case 5: d1=1,d2=4,d3=5,d4=7,d5=3,d6=6;break;
case 6: d1=1,d2=4,d3=5,d4=1,d5=3,d6=6;break;
case 7: d1=1,d2=8,d3=6,d4=32,d5=32,d6=6;break;
case 8: d1=1,d2=4,d3=6,d4=1,d5=3,d6=6;break;
case 9: d1=1,d2=4,d3=6,d4=7,d5=3,d6=6;break;
}
lcd.setCursor(e1,0);lcd.write((uint8_t)d1);lcd.setCursor(e2,0);lcd.write((uint8_t)d2);lcd.setCursor(e3,0);lcd.write((uint8_t)d3);
lcd.setCursor(e1,1);lcd.write((uint8_t)d4);lcd.setCursor(e2,1);lcd.write((uint8_t)d5);lcd.setCursor(e3,1);lcd.write((uint8_t)d6);
}
lcd.setCursor(6,0);lcd.print(".");lcd.setCursor(13,0);lcd.print(".");lcd.setCursor(6,1);lcd.print(".");lcd.setCursor(13,1);lcd.print(".");
lcd.setCursor(2,2);if(DateTime.day<10){lcd.print(" ");}lcd.print(DateTime.day);lcd.print(" ");lcd.print(mes[DateTime.month-1]);lcd.print(" ");lcd.print(DateTime.year);lcd.print(" ");lcd.print(den[DateTime.dayOfWeek-1]);
lcd.setCursor(0,3);lcd.print("P");lcd.print(hpa*0.75,0);lcd.print(" ");lcd.print(h,0);lcd.print("% ");
lcd.setCursor(9,3);lcd.print(t,0);lcd.print("C ");}
forum.rcl-radio.ru → Тестирование скетчей → Простые часы на LCD2004 (Arduino)
Форум работает на PunBB, при поддержке Informer Technologies, Inc
|