Как вывести данные на дисплей?

Бенедикт
Offline
Зарегистрирован: 01.05.2016

Собираю мини комплекс  сбора и регистрации агро данных. Цель моей работы заключается в том, что данные с подключенных датчиков сверяясь с часом реального времени записывались на флеш карту и параллельно показывать на дисплее с задержкой(можно при нажатии кнопки).  Скетчи  датчиков по отдельности включаются и работают:

  • 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);

}


releyshic
Offline
Зарегистрирован: 20.11.2015

Бенедикт пишет:

void loop() {

  sensors.requestTemperatures();
  Serial.print("Датчик температуры 1  ");
  printTemperature(Thermometer1);

  Serial.print("Датчик температуры 2  ");
  printTemperature(Thermometer2);

  Serial.print("Датчик температуры 3  ");
  printTemperature(Thermometer3);

и с какой скоростью он по твоему должен рисовать с таким кодом?

Просто дисплей запускал? скетч есть?

Бенедикт
Offline
Зарегистрирован: 01.05.2016

 Serial.begin(9600); показания каждого датчика можно на 1-2сек задержать

да, просто дисплей по этому скетчу запускается

/*
 * Displays text sent over the serial port (e.g. from the Serial Monitor) on
 * an attached LCD.
 * DFRobot.com
 *Compatible with the Arduino IDE 1.0
 *Library version:1.1
 */
#include <Wire.h> 
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27,16,2);  // set the LCD address to 0x27 for a 16 chars and 2 line display

void setup()
{
  lcd.init();                      // initialize the lcd 
  lcd.backlight();
  Serial.begin(9600);
}

void loop()
{
  // when characters arrive over the serial port...
  if (Serial.available()) {
    // wait a bit for the entire message to arrive
    delay(100);
    // clear the screen
    lcd.clear();
    // read all the available characters
    while (Serial.available() > 0) {
      // display each character to the LCD
      lcd.write(Serial.read());
    }
  }
}