Прошу помощи по коду
- Войдите на сайт для отправки комментариев
Втр, 20/10/2015 - 22:14
Помогите пожалуйста. Составил вот код для UNO, дисплея 1602, DS3231 и DHT11, но не могу понять почему же все-таки не работает. 1602 подключен по I2C так-же как и ds3231, DHT11 на А2. Смысл такой что на дисплей выводится время (ну тобишь часы)температура и влажность с DHT11. В процессе написания кода получалось вывести всю инфу, а в итоге после всех изменений и совершенствований кода работать перестало. Прошу помощи и не судить строго, т.к. еще начинающий )))))) заранее спасибо всем
#include <DHT.h>
#define DHTPIN A2
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
#include <DS3231.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2);
DS3231 Clock;
bool Century=false;
bool h12;
bool PM;
byte ADay, AHour, AMinute, ASecond, ABits;
bool ADy, A12h, Apm;
byte year, month, date, DoW, hour, minute, second;
void setup () {
Clock.setSecond(00);//Set the second
Clock.setMinute(40);//Set the minute
Clock.setHour(21); //Set the hour
Clock.setDoW(2); //Set the day of the week
Clock.setDate(20); //Set the date of the month
Clock.setMonth(10); //Set the month of the year
Clock.setYear(15); //Set the year (Last two digits of the year)
dht.begin();
lcd.init();
lcd.backlight();
lcd.begin(16, 2);
lcd.clear();
Wire.begin();
Wire.beginTransmission(0x68);
Wire.write(0x07);
Wire.write(0x10);
Wire.endTransmission();
}
void ReadDS3231()
{
int second,minute,hour,date,month,year,temperature;
second=Clock.getSecond();
minute=Clock.getMinute();
hour=Clock.getHour(h12, PM);
date=Clock.getDate();
month=Clock.getMonth(Century);
year=Clock.getYear();
}
void loop () {ReadDS3231();
int h = dht.readHumidity();
int t = dht.readTemperature();
lcd.setCursor(1, 0);
//lcd.print(Clock.getYear(), DEC);
//lcd.print('-');
//lcd.print(Clock.getMonth(Century), DEC);
//lcd.print('-');
//lcd.print(Clock.getDate(), DEC);
//lcd.print(' ');
//lcd.print(Clock.getDoW(), DEC);
//lcd.print(' ');
// Finally the hour, minute, and second
lcd.print(Clock.getHour(h12, PM), DEC);
lcd.print(':');
lcd.print(Clock.getMinute(), DEC);
lcd.print(':');
lcd.print(Clock.getSecond(), DEC);
// Add AM/PM indicator
if (h12) {
if (PM) {
lcd.print(" PM ");
} else {
lcd.print(" AM ");
}
} else {
lcd.print(" 24h ");
lcd.setCursor(12, 0);
lcd.print(t);
lcd.write(0b11011111);
lcd.print("C");
lcd.setCursor(12, 1);
lcd.print(h);
lcd.print("%u");
}
}
P.S. Первый мой пост тут, может что не так сделал, заранее извиняюсь, обещаю исправиться.
Для начала в IDE нажми Ctrl+T, чтобы код нормально отфарматировался.
18 и 47 строки. ReadDS3231 пишет в локальные переменные, которые уничтожаются при выходе из функции.
Не вижу выдержки для DHT11. Он чаще раза в секунду данные выдавать не может.
Прочитай про printf и sprintf, чтобы не загоняться с нулями.
Вообще, для часов очень рекомендую https://github.com/adafruit/RTClib
18 и 47 строки. ReadDS3231 пишет в локальные переменные, которые уничтожаются при выходе из функции.
А что с этим делать??? Поясните пожалуйста.
Не вижу выдержки для DHT11. Он чаще раза в секунду данные выдавать не может.
поставил задержку
lcd.setCursor(12, 1); lcd.print(h); lcd.print("%u"); delay, (1000); } }> А что с этим делать?
Убрать объявление локальных переменных же.
Ладно, спасибо, буду пробовать.
Подредактировал, упростил, проверить пока не могу, но IDE при компиляции не ругается.
#include "DHT.h" #define DHTPIN A2 #define DHTTYPE DHT11 DHT dht(DHTPIN, DHTTYPE); #include <DS3231.h> #include <Wire.h> #include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd(0x27, 16, 2); DS3231 rtc(SDA, SCL); Time time; void setup () { dht.begin(); rtc.begin(); lcd.init(); lcd.backlight(); lcd.begin(16, 2); lcd.clear(); Wire.begin(); Wire.beginTransmission(0x68); Wire.write(0x07); Wire.write(0x10); Wire.endTransmission(); time = rtc.getTime(); } void loop () { int h = dht.readHumidity(); int t = dht.readTemperature(); lcd.setCursor(1, 0); lcd.print(rtc.getTimeStr(FORMAT_LONG)); lcd.setCursor(1, 1); lcd.print(t); lcd.write(0b11011111); lcd.print("C"); lcd.setCursor(6, 1); lcd.print(h); lcd.print("%u"); delay, (1000); }На Ваш взгляд как, корректно???
Убрал часть кода
наверно из-за этого он у меня после отключения питания на дуине и очередного включения показывал не текущее время, а то, которое было при выключении???
В 38 строке лишняя запятая.
Ага, спасибо, поправил. А все остальное грамотно???
Я бы сделал с форматированием, чтобы при переходе у меньшении/увеличении количества разрдяов в градусах артефактов не было.
Ладно, спасибо за помощь и за советы. Вечером проверю как работает, если что позволю себе обратиться снова за помощью.
Все отлично работает )))) еще раз спасибо за помощь