Перестает работать дисплей при подключении библиотеки RTC

scott2to
Offline
Зарегистрирован: 04.04.2015

Сделал на базе Leonardo проветривание теплицы. Датчик температуры, три релюхи и актуатор. Пытаюсь теперь докрутить полив. Так вот при подключении библиотеки DS1307RTC перестает работать экран ЖК. Причем сама система работать продолжает. На температуру реагирует и форточку открывает-закрывает. Вот набор библиотек которые подключаю и использую.


#include <OneWire.h>
#include <DallasTemperature.h>

#include <LiquidCrystal.h>

#include <Wire.h>
#include <Time.h>
//#include <DS1307RTC.h>

Если раскоментирую библиотеку RTC, то ЖК перестает показывать то что нужно. Модуль времени работает нормально при этом. Подскажите в чем проблема. Я уже сломался искать ответ. 

bwn
Offline
Зарегистрирован: 25.08.2014

А библа часом не с програмным SPI? RTC на каких пинах вешаете?

scott2to
Offline
Зарегистрирован: 04.04.2015

rtc вешаю на sda и на scl. Сначала тестировал на nano, там вешал на a4 a5. Про программный SPI я не в курсе к сожалению. 

Radjah
Offline
Зарегистрирован: 06.08.2014

Если проверишь тестером, то эти пины будут звониться. У чипа один TWI-интерфейс, а развести его можно на много пинов.

scott2to
Offline
Зарегистрирован: 04.04.2015

а что делать то?

scott2to
Offline
Зарегистрирован: 04.04.2015

и при чем тут ЖК?

Radjah
Offline
Зарегистрирован: 06.08.2014

Ты кода больше давай. В хрустальный шар видно хреново, что ты там куда написал и натыкал.

scott2to
Offline
Зарегистрирован: 04.04.2015

Да мне не жалко) 



#include <OneWire.h>
#include <DallasTemperature.h>

#include <LiquidCrystal.h>

#include <Wire.h>
#include <Time.h>
//#include <DS1307RTC.h>


// Data wire is plugged into port 2 on the Arduino
#define ONE_WIRE_BUS 10

// Пины управления актуатором
int actuatorPower = 7;
int actuatorPlus = 8;
int actuatorMinus = 9;

int actuatorState = 0;

int atxPower = 13;



// Setup a oneWire instance to communicate with any OneWire devices (not just Maxim/Dallas temperature ICs)
OneWire oneWire(ONE_WIRE_BUS);

// Pass our oneWire reference to Dallas Temperature. 
DallasTemperature sensors(&oneWire);


// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

void setup(void)
{
  // start serial port
  Serial.begin(9600);
  Serial.println("Dallas Temperature IC Control Library Demo");



  // Start up the library
  sensors.begin();
  
    //Выход реле питания
   pinMode(atxPower, OUTPUT);
  digitalWrite(atxPower,LOW);
  
    // set up the LCD's number of columns and rows:
  lcd.begin(8, 2);
  // Print a message to the LCD.
  //lcd.print("Привет!");
  
  //Пробуем работать с актуатором
  pinMode(actuatorPower, OUTPUT);
  pinMode(actuatorPlus, OUTPUT);
  pinMode(actuatorMinus, OUTPUT);

  digitalWrite(actuatorPower,HIGH);
  
  calibrate();
//   atuatorMoveForward();
//  atuatorMoveBack();

    //Выход реле питания
  digitalWrite(atxPower,HIGH);
 
  
  

}

void loop(void)
{ 
  // call sensors.requestTemperatures() to issue a global temperature 
  // request to all devices on the bus
  Serial.print("Requesting temperatures...");
  sensors.requestTemperatures(); // Send the command to get temperatures
  Serial.println("DONE");
  
  Serial.print("Temperature for the device 1 (index 0) is: ");
  Serial.println(sensors.getTempCByIndex(0)); 
  
  if (sensors.getTempCByIndex(0)>30){
    if (actuatorState!=1){
      atuatorMoveForward();
    }
  } else{
     if (actuatorState!=0){
       atuatorMoveBack();
     }
  }
  
  lcd.setCursor(0, 0);
  lcd.print("T:");
  lcd.setCursor(2, 0);
  lcd.print(sensors.getTempCByIndex(0));
  delay(500);
  
//  tmElements_t tm;
//
//  if (RTC.read(tm)) {
//    Serial.print("Ok, Time = ");
//    print2digits(tm.Hour);
//    Serial.write(':');
//    print2digits(tm.Minute);
//    Serial.write(':');
//    print2digits(tm.Second);
//    Serial.print(", Date (D/M/Y) = ");
//    Serial.print(tm.Day);
//    Serial.write('/');
//    Serial.print(tm.Month);
//    Serial.write('/');
//    Serial.print(tmYearToCalendar(tm.Year));
//    Serial.println();
//  } else {
//    if (RTC.chipPresent()) {
//      Serial.println("The DS1307 is stopped.  Please run the SetTime");
//      Serial.println("example to initialize the time and begin running.");
//      Serial.println();
//    } else {
//      Serial.println("DS1307 read error!  Please check the circuitry.");
//      Serial.println();
//    }
//    delay(9000);
//  }
  
}


void actuatorPowerON(){
   delay (100);
   digitalWrite(actuatorPower,LOW);
   delay (100);
}

void actuatorPowerOFF(){
    delay (100);
    digitalWrite(actuatorPower,HIGH);
    delay (100);
}

void atuatorMoveBack(){
  actuatorPowerON();
  delay(4000);
  actuatorPowerOFF();
  actuatorState = 0;
}

void atuatorMoveForward(){
  digitalWrite(actuatorPlus,HIGH);
  digitalWrite(actuatorMinus,HIGH);
  delay(100);
  actuatorPowerON();
  delay(4000);
  actuatorPowerOFF();
  delay(100);

  digitalWrite(actuatorPlus,LOW);
  digitalWrite(actuatorMinus,LOW);
  actuatorState = 1;

}

void calibrate(){

   delay(100);
   actuatorPowerON();
   atuatorMoveBack();
}

void print2digits(int number) {
  if (number >= 0 && number < 10) {
    Serial.write('0');
  }
  Serial.print(number);
}

 

scott2to
Offline
Зарегистрирован: 04.04.2015

Я собственно и боялся код выкладывать) Не хотел пугать народ. 

bwn
Offline
Зарегистрирован: 25.08.2014

А в чем выражается неверная работа дисплея? Перестает работать после снятия комментария с 8 строки или всего кода?
Про программный SPI забейте, у вас дисплей напрямую разведен.

scott2to
Offline
Зарегистрирован: 04.04.2015

Ну вот и я подумал, что на SPI у меня одино устройство. Дисплей просто ничего не показывает в основном. Иногда на нем зависает последняя температура с последнего удачного запуска. Иногда все знакогенерирующие ячейки просто черным закрашиваются. Я так понял когда я перепрошиваю плату без снятия питания в памяти дисплея что-то остается и поэтому есть какие-то реакции. Если отключить питание и включить плохой вариант кода дисплей просто ничего не показывает. 

Radjah
Offline
Зарегистрирован: 06.08.2014

Так у тебя и на SPI что-то висит?

Тогда зачем дергаешь пины с 11 по 13? Их как раз шина SPI использует.

13 - SCK

12 - MISO

11 - MOSI

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

Нельзя    atxPower = 13; это клок SPI

И здесь LiquidCrystal lcd (12, 11, 5, 4, 3, 2)

scott2to
Offline
Зарегистрирован: 04.04.2015

На леонардо есть отдельные выходы scl sda и я к ним подключил. Получается, что если я подключаю что-то на них то 11,12 и 13 должны быть свободны?

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

Прозвоните тестером вашего леопарда.
У вас исчезнут все вопросы

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

trembo пишет:

Нельзя    atxPower = 13; это клок SPI

И здесь LiquidCrystal lcd (12, 11, 5, 4, 3, 2)


Я вообще уже косею. Какой нафиг SPI? Откуда он тут вообще? Нафиг вы его сюда плетете?
Часы висят на i2c. Это 2 и 3 пин у леонардо.
и дисплей на них же болтается.

ПС смотришь вроде умные люди, что то понимают, собирают, и даже работает у них что то. А потом бац, порют чушь и даже не знаешь что им сказать.

Radjah
Offline
Зарегистрирован: 06.08.2014

В #10 он сам сказал, что у него что-то на SPI висит.

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

Radjah пишет:

В #10 он сам сказал, что у него что-то на SPI висит.


А попробовать прочитать с 1 поста? Не?

Radjah
Offline
Зарегистрирован: 06.08.2014

Если у тебя хрустальный шар круче, то сам и помогай.

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

Radjah пишет:

Если у тебя хрустальный шар круче, то сам и помогай.


А в чём тут помогать то? Человек на 2 и 3 пин вешает пачку проводов и это не вызывает у него никакого диссонанса. Ну тык флаг ему красный. И барабан.
Вы толпой заместо того что бы написать что подмоедини экран с 2 и 3 пина куда нибуть на свободные и в инициализации замени 2 и 3 на те пины. Читаете ему лекцию про spi.
Все гармонично.

scott2to
Offline
Зарегистрирован: 04.04.2015

Большое всем спасибо. Я как-то не подумал, что если выводы есть отдельными пинами, то они могут параллельно выведены на обычные цифровые. Теперь буду внимательнее читать описание выводов для каждой платы.