Как вывести данные на дисплей?
- Войдите на сайт для отправки комментариев
Вс, 01/05/2016 - 02:22
Собираю мини комплекс сбора и регистрации агро данных. Цель моей работы заключается в том, что данные с подключенных датчиков сверяясь с часом реального времени записывались на флеш карту и параллельно показывать на дисплее с задержкой(можно при нажатии кнопки). Скетчи датчиков по отдельности включаются и работают:
- 3 Датчика температуры DS18B20
- Фоторезистор
- Датчик влажности почвы
- Часы реального времени
- Флеш карта SD
- Дисплей I2C
Объеденил все скетчи кроме скетча дисплея. Работают. Никак не могу вписать туда скетч дисплея. Serial.println заменял на lcd.print не помогает. Не показывает данные на дисплее. Люди добрые помогите откорректировать скетч. Буду блогадарен. Только скетч дисплея до конца не написан. Схема и скетч внизу)
#include <OneWire.h> #include <DallasTemperature.h> #include <Wire.h> #include <LiquidCrystal_I2C.h> #include <stdio.h> #include <DS1302.h> #define ONE_WIRE_BUS 10 OneWire oneWire(ONE_WIRE_BUS); DallasTemperature sensors(&oneWire); DeviceAddress Thermometer1 = { 0x28, 0xFF, 0x95, 0x23, 0x65, 0x15, 0x03, 0xB4 }; DeviceAddress Thermometer2 = { 0x28, 0xFF, 0x97, 0x43, 0x65, 0x15, 0x01, 0x1B }; DeviceAddress Thermometer3 = { 0x28, 0xFF, 0x23, 0x2E, 0x65, 0x15, 0x02, 0xA4 }; int photocellPin = 0; int photocellReading; int umidade; LiquidCrystal_I2C lcd(0x27,16,2); namespace { const int kCePin = 5; // Chip Enable const int kIoPin = 6; // Input/Output const int kSclkPin = 7; // Serial Clock DS1302 rtc(kCePin, kIoPin, kSclkPin); String dayAsString(const Time::Day day) { switch (day) { case Time::kSunday: return "Sunday"; case Time::kMonday: return "Monday"; case Time::kTuesday: return "Tuesday"; case Time::kWednesday: return "Wednesday"; case Time::kThursday: return "Thursday"; case Time::kFriday: return "Friday"; case Time::kSaturday: return "Saturday"; } return "(unknown day)"; } void printTime() { Time t = rtc.time(); const String day = dayAsString(t.day); char buf[50]; snprintf(buf, sizeof(buf), "%s %04d-%02d-%02d %02d:%02d:%02d", day.c_str(), t.yr, t.mon, t.date, t.hr, t.min, t.sec); Serial.println(buf); } } void setup() { sensors.begin(); sensors.setResolution(Thermometer1, 10); sensors.setResolution(Thermometer2, 10); sensors.setResolution(Thermometer3, 10); lcd.init(); lcd.backlight(); pinMode(13, OUTPUT); Serial.begin(9600); } void printTemperature(DeviceAddress deviceAddress) { float tempC = sensors.getTempC(deviceAddress); Serial.println(tempC); rtc.writeProtect(false); rtc.halt(false); Time t(2013, 9, 22, 1, 38, 50, Time::kSunday); rtc.time(t); } void loop() { sensors.requestTemperatures(); Serial.print("Датчик температуры 1 "); printTemperature(Thermometer1); Serial.print("Датчик температуры 2 "); printTemperature(Thermometer2); Serial.print("Датчик температуры 3 "); printTemperature(Thermometer3); photocellReading = analogRead(photocellPin); Serial.print("Освещение = "); Serial.print(photocellReading); if (photocellReading < 10) { Serial.println(" - Dark"); } else if (photocellReading < 200) { Serial.println(" - Dim"); } else if (photocellReading < 500) { Serial.println(" - Light"); } else if (photocellReading < 800) { Serial.println(" - Bright"); } else { Serial.println(" - Very bright"); } printTime(); umidade = analogRead(A0); int Porcento = map(umidade, 1023, 0, 0, 100); Serial.print(Porcento); Serial.println("%"); if(Porcento <=70) { Serial.println("Irrigando..."); digitalWrite(13, HIGH); } else { digitalWrite(13, LOW); } delay(1000); }
и с какой скоростью он по твоему должен рисовать с таким кодом?
Просто дисплей запускал? скетч есть?
Serial.begin(9600); показания каждого датчика можно на 1-2сек задержать
да, просто дисплей по этому скетчу запускается