Вывод на LCD монитор больше 2 условий

fanat.arduino
Offline
Зарегистрирован: 10.11.2019

Здравствуйте, такая проблема, как вывести на lcd монитор больше 2 данных.

Moderator : пожалуйста, вставьте код правильно (новым сообщением в тему), как описано в http://arduino.ru/forum/obshchii/vstavka-programmnogo-koda-v-temukommentarii
 
BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

Вставьте код согласно правил форума. 
PS: Начать в любом случае надо с этого - http://wikihandbk.com/wiki/Arduino:Примеры/LiquidCrystalSetCursor

fanat.arduino
Offline
Зарегистрирован: 10.11.2019
#include <LiquidCrystal_I2C.h>
#include <RTClib.h>
#include <Wire.h> 
LiquidCrystal_I2C lcd(0x27, 16, 2);

int GAZ = 0;
int switcPin = 8;
boolean lastButton = LOW;
boolean currentButton = LOW;
boolean temperature = true;
char t[32];
char t1[32];

RTC_DS1307 rtc;

void setup(){
    lcd.begin();
  Serial.begin(9600);
  Wire.begin();
  //lcd.backlight();
pinMode (switcPin, INPUT);
 rtc.begin();
//rtc.adjust(DateTime(2019, 11, 8, 16, 7, 0));  //для настройки времени 
}
boolean debounce(boolean last)
{
boolean current = digitalRead(switcPin);
if  (last != current)
  {
    delay(5);
    current = digitalRead(switcPin);
   }
  return current;
    
    }
  
void loop(){
  int val = analogRead(GAZ);
 DateTime now = rtc.now();
sprintf(t, "%02d:%02d:%02d",  now.hour(), now.minute(), now.second());  
sprintf(t1, "%02d/%02d/%02d",  now.day(), now.month(), now.year());  
byte data[2]; // Место для значения температуры
currentButton = debounce (lastButton);
if (lastButton == LOW && currentButton == HIGH)
{
  if(temperature) temperature = false;
  else temperature = true;
}
lastButton = currentButton;

lcd.setCursor(0,1);
if (temperature)

{
  lcd.setCursor(0,0);
  lcd.print("TIME");
  lcd.setCursor(0,1);
lcd.print(t);
  lcd.setCursor(8,1);
lcd.print("  ");
}
else 
{
  lcd.setCursor(0,0);
  lcd.print("DATE");
  lcd.setCursor(0,1);
    lcd.print(t1);
  }


/*
 
{
  lcd.setCursor(0,0);
  lcd.print("GAZ");
 lcd.print(GAZ);
 
}
*/
}

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

А по ссылке моей ходил?

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

fanat.arduino, Вы бы написали:

1. Чего Вы хотите. 

2. Что получается на самом деле.

3. Чем 2 отличается от 1.

И... это... слово "данные" не употребляется совместно с числительным. Нужна какая-то единица измерения данных: байты, числа, строки, массивы, сектора...

fanat.arduino
Offline
Зарегистрирован: 10.11.2019

да, изучаю.

fanat.arduino
Offline
Зарегистрирован: 10.11.2019

 

1 - Чтоб по нажатию кнопки, он выводил на экран (Дату, время, и данные с датчика)

2- Он выводит только (Время и Дату)

3 - Не понял

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

fanat.arduino пишет:

3 - Не понял

:)

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

fanat.arduino пишет:

 

1 - Чтоб по нажатию кнопки, он выводил на экран (Дату, время, и данные с датчика)

как это должно выглядеть?

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

fanat.arduino пишет:

 

1 - Чтоб по нажатию кнопки, он выводил на экран (Дату, время, и данные с датчика)

2- Он выводит только (Время и Дату)

3 - Не понял

Что мешает сделать так, как в 1? http://arduino.ru/Reference/Else

fanat.arduino
Offline
Зарегистрирован: 10.11.2019

Нажал кнопку раз, выдало время (с датчика RTC)

Нажал еще раз, выдало дату(с датчика RTC)

Нажал еще раз, выдало данные с другого датчика данные

Нажал еще раз, вернулось на время

fanat.arduino
Offline
Зарегистрирован: 10.11.2019
if (temperature)
{
  lcd.setCursor(0,1);
  lcd.print(t);
}
else if (temperature)
{
  lcd.setCursor(0,1);
  lcd.print(t1);
}
else
{
 lcd.setCursor(0,1);
  lcd.print(GAZ);
}
}

Я не знаю как условия ему задать, сейчас он также делает 2 действия

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

А в чем разница в строках 1 и 6?

fanat.arduino
Offline
Зарегистрирован: 10.11.2019

Получается нету, надо задать ему условия, как я понял, на выполнение действия "B", но я не могу понять, изучаю Arduino неделю

gfx125
Offline
Зарегистрирован: 27.05.2017

fanat.arduino пишет:

Нажал кнопку раз, выдало время (с датчика RTC)

Нажал еще раз, выдало дату(с датчика RTC)

Нажал еще раз, выдало данные с другого датчика данные

Нажал еще раз, вернулось на время

Сделайте счетчик нажатий кнопки и в зависимости от его значения выводите нужные данные

fanat.arduino
Offline
Зарегистрирован: 10.11.2019

Не подскажешь как, заранее спасибо 

gfx125
Offline
Зарегистрирован: 27.05.2017

Здесь почитай

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

fanat.arduino пишет:

Нажал кнопку раз, выдало время (с датчика RTC)

Нажал еще раз, выдало дату(с датчика RTC)

Нажал еще раз, выдало данные с другого датчика данные

Нажал еще раз, вернулось на время

Обычный конечный автомат на 4 состояния.

fanat.arduino
Offline
Зарегистрирован: 10.11.2019
#include <LiquidCrystal_I2C.h>
#include <RTClib.h>
#include <Wire.h> 
LiquidCrystal_I2C lcd(0x27, 16, 2);
#include <OneWire.h>  
char t[32];
char t1[32];
OneWire ds(2); // Создаем объект OneWire для шины 1-Wire, с помощью которого будет осуществляться работа с датчиком
RTC_DS1307 rtc;
int regim=1;
int flag=0;
void setup() 

{
  lcd.begin();
  Wire.begin();
 rtc.begin();
 rtc.adjust(DateTime(2019, 11, 11, 12, 47, 0)); 
 }

 void loop()
{
   DateTime now = rtc.now();
sprintf(t, "%02d:%02d:%02d",  now.hour(), now.minute(), now.second());  
sprintf(t1,"%02d/%02d/%02d", now.day(), now.month(), now.year()); 
byte data[2]; // Место для значения температуры
  ds.reset(); // Начинаем взаимодействие со сброса всех предыдущих команд и параметров
  ds.write(0xCC); // Даем датчику DS18b20 команду пропустить поиск по адресу. В нашем случае только одно устрйоство 
  ds.write(0x44); // Даем датчику DS18b20 команду измерить температуру. Само значение температуры мы еще не получаем - датчик его положит во внутреннюю память
  ds.reset(); // Теперь готовимся получить значение измеренной температуры
  ds.write(0xCC); 
  ds.write(0xBE); // Просим передать нам значение регистров со значением температуры
  // Получаем и считываем ответ
  data[0] = ds.read(); // Читаем младший байт значения температуры
  data[1] = ds.read(); // А теперь старший
  // Формируем итоговое значение: 
  //    - сперва "склеиваем" значение, 
  //    - затем умножаем его на коэффициент, соответсвующий разрешающей способности (для 12 бит по умолчанию - это 0,0625)
 float temperature =  ((data[1] << 8) | data[0]) * 0.0625;
 
 if(digitalRead(8)==HIGH&&flag==0)//если кнопка нажата  
{
regim++;  
 flag=1;
if(regim>3)//ограничим количество режимов
{
regim=1;//так как мы используем только одну кнопку,
 }
 }
if(digitalRead(8)==LOW&&flag==1)//если кнопка НЕ нажата
//и переменная flag равна - 1 ,то ...
{
flag=0;//обнуляем переменную "knopka"
}
if(regim==1)//первый режим
{
lcd.setCursor(0,0);
lcd.print("vremy  ");
lcd.setCursor(0,1);
lcd.print(t);
}
if(regim==2)//второй режим
{
lcd.setCursor(0,0);
lcd.print("data ");
lcd.setCursor(0,1);
lcd.print(t1);
}
if(regim==3)//третий режим
{
lcd.setCursor(0,0);
lcd.print("t_room");
lcd.setCursor(2,1);
lcd.print("          ");
lcd.setCursor(0,1);
lcd.print(temperature,0);
}
}

Большое спасибо, вот так получилось в конце

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

Ну молодец! Все ноют что им не помогают, но ведь человека с головой нужно только подтолкнуть! )

Оффтоп: Сегодня старый знакомый заезжал, говорит - Внуки хреново учатся, по информатике одни трояки, хотя и компьютеры мощные купили и на доп. курсы ходят. Говорит - будущее за компьютерами. А я сижу, его слушаю, старый ламповый приёмник ковыряю... Говорю - Будущее за умными людьми (возможно далеко от нашей страны, как не прискорбно говорить), а внуки - это наше все, но в голову же не вбить! Мой внук балбес балбесом. 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

А ты поищи по форуму, как Петрович с внуками занимается. Там много интересного.

antiofftop:

to fanat.arduino

не в качестве придирки, а как совет на будущее: если состояний больше двух, обычно применяют не if, а switch.

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

Это когда надоест по 50 if лепить , сам дойдёт 

fanat.arduino
Offline
Зарегистрирован: 10.11.2019

спасибо, изучу