LCD+датчик влажности, температуры и газа
- Войдите на сайт для отправки комментариев
Пт, 29/11/2013 - 21:22
Всем привет.
Не давно начал заниматся Ардуино, так что простите.
#include <LiquidCrystal.h> LiquidCrystal lcd(8, 9, 4, 5, 6, 7); #include "DHT.h" const float fVerNum = 0.03; // Data pin connected to AM2302 #define DHTPIN 2 #define DHTTYPE DHT22 // DHT 22 (AM2302) DHT dht(DHTPIN, DHTTYPE); // LED pins ////////////////////////////////////////////////////// int lcd_key = 0; int adc_key_in = 0; int sensorPin = 1; // Пин, на котором у нас висит сенсор газа int gas = 0; // Переменная для хранения значения газового сенсора int read_LCD_buttons() { adc_key_in = analogRead(0); // прочитать значение от датчика } void setup() { lcd.begin(16, 2); // начало библиотеки Serial.begin(9600); // Инициализируем серийный порт } void loop() { gas = analogRead(sensorPin); // Получаем значения из датчика газа float h = dht.readHumidity(); float t = dht.readTemperature(); if (isnan(t) || isnan(h)) { Serial.println(F("Failed to read from DHT")); } else { Serial.print(F("Humidity: ")); Serial.print(h); Serial.print(F(" %\t")); Serial.print(F("Temperature: ")); Serial.print(t); Serial.print(F(" C\t")); Serial.print(F("Gaz: ")); Serial.println(gas); } // Wait 3 seconds delay(3000); lcd.setCursor(9,1); lcd.print(gas); lcd.setCursor(0,0); lcd.print(t); lcd.setCursor(6,0); lcd.print("C"); lcd.setCursor(9,0); lcd.print(h); lcd.setCursor(15,0); lcd.print("%"); delay(1000); }
Проблемма в отображении датчика газа.
При падении значения ниже 100 остаётся треий символ. Как его убрать?
На сом порте всё нормально.
lcd.clear();
Это весь экран, мерцать будет?
Удалить только последний символ можно?
Удалить только последний символ можно?
Вывести вместо него пробел
Толко при условии если значение меньше 100
Пример можно?
Это весь экран, мерцать будет?
Удалить только последний символ можно?
можно - печатаете пробел в нужное место при условии, что разрядность цифры изменилась в меньшую сторону
вы точно уверены, что заметите мерцание при наличии delay(3000); delay(1000);
можно - печатаете пробел в нужное место при условии, что разрядность цифры изменилась в меньшую сторону
Как это сделать?
Я только учусь :)
Толко при условии если значение меньше 100
Пример можно?
Ну, типа так:
х можно определить визуально
Спасибо, попробую.
Но вообще-то лучше что-то поправить в консерватории, чтобы сразу выводилось корректно, вне зависимости от "больше 100 или меньше"
Как это сделать?
мне не хочется вспоминать школьный курс математики - очистите экран и убедитесь, что мигания вы не заметите.
" в консерватории" это где?
" в консерватории" это где?
В программе, разумеется
Я только начал разбиратся, подсказали бы , где ошибка.
Ошибка - она в том, что нужно решать задачу не "как мне стереть ненужное", а "как мне вывести так, чтобы ненужного не было".
Т.е. вытирание пробелом на первое время сойдет, но потом все равно встанет задача "как выводить правильно сразу"
Попробуйте это в качестве домашнего задания (а потом можно сходить в гугл и посмотреть "правильный ответ")
Вариант 1. Использовать char buf[4]; sprintf( buf, "%3d", gas ); lcd.print( buf );
Вариант 2. Заменить sprintf на свой преобразователь, но всё равно преобразовывать в строку и выводить строку.
Вариант 3. Добавить проверки (100, 10 и тп) и добивать пробелами.