Вывод на LCD монитор больше 2 условий
- Войдите на сайт для отправки комментариев
Вс, 10/11/2019 - 16:45
Здравствуйте, такая проблема, как вывести на lcd монитор больше 2 данных.
Moderator : пожалуйста, вставьте код правильно (новым сообщением в тему), как описано в http://arduino.ru/forum/obshchii/vstavka-programmnogo-koda-v-temukommentarii
Вставьте код согласно правил форума.
PS: Начать в любом случае надо с этого - http://wikihandbk.com/wiki/Arduino:Примеры/LiquidCrystalSetCursor
#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); } */ }А по ссылке моей ходил?
fanat.arduino, Вы бы написали:
1. Чего Вы хотите.
2. Что получается на самом деле.
3. Чем 2 отличается от 1.
И... это... слово "данные" не употребляется совместно с числительным. Нужна какая-то единица измерения данных: байты, числа, строки, массивы, сектора...
да, изучаю.
1 - Чтоб по нажатию кнопки, он выводил на экран (Дату, время, и данные с датчика)
2- Он выводит только (Время и Дату)
3 - Не понял
3 - Не понял
:)
1 - Чтоб по нажатию кнопки, он выводил на экран (Дату, время, и данные с датчика)
как это должно выглядеть?
1 - Чтоб по нажатию кнопки, он выводил на экран (Дату, время, и данные с датчика)
2- Он выводит только (Время и Дату)
3 - Не понял
Что мешает сделать так, как в 1? http://arduino.ru/Reference/Else
Нажал кнопку раз, выдало время (с датчика RTC)
Нажал еще раз, выдало дату(с датчика RTC)
Нажал еще раз, выдало данные с другого датчика данные
Нажал еще раз, вернулось на время
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 действия
А в чем разница в строках 1 и 6?
Получается нету, надо задать ему условия, как я понял, на выполнение действия "B", но я не могу понять, изучаю Arduino неделю
Нажал кнопку раз, выдало время (с датчика RTC)
Нажал еще раз, выдало дату(с датчика RTC)
Нажал еще раз, выдало данные с другого датчика данные
Нажал еще раз, вернулось на время
Сделайте счетчик нажатий кнопки и в зависимости от его значения выводите нужные данные
Не подскажешь как, заранее спасибо
Здесь почитай
Нажал кнопку раз, выдало время (с датчика RTC)
Нажал еще раз, выдало дату(с датчика RTC)
Нажал еще раз, выдало данные с другого датчика данные
Нажал еще раз, вернулось на время
Обычный конечный автомат на 4 состояния.
#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); } }Большое спасибо, вот так получилось в конце
Ну молодец! Все ноют что им не помогают, но ведь человека с головой нужно только подтолкнуть! )
Оффтоп: Сегодня старый знакомый заезжал, говорит - Внуки хреново учатся, по информатике одни трояки, хотя и компьютеры мощные купили и на доп. курсы ходят. Говорит - будущее за компьютерами. А я сижу, его слушаю, старый ламповый приёмник ковыряю... Говорю - Будущее за умными людьми (возможно далеко от нашей страны, как не прискорбно говорить), а внуки - это наше все, но в голову же не вбить! Мой внук балбес балбесом.
А ты поищи по форуму, как Петрович с внуками занимается. Там много интересного.
antiofftop:
to fanat.arduino:
не в качестве придирки, а как совет на будущее: если состояний больше двух, обычно применяют не if, а switch.
Это когда надоест по 50 if лепить , сам дойдёт
спасибо, изучу