помогите с lcd 1602 и другие вопросы
- Войдите на сайт для отправки комментариев
Втр, 25/04/2017 - 23:08
Здравствуйте.
Все сначала раскажу) В машину хочу сделать как бы мини бортового с функциями: температура газа, темп. двигателя , вольтметр, часы, пока все , а там посмотрим...
вот что пока не нравиться:
1. при работе lcd идут моржки надписей , как бы обновления данных с датчиков , как можно устранить?
2. как значение температы округлить к целому числу, точнее сделать просто целое число? вольтметр к десятым ?
пока так, дальше учусь))
Вот что накопировал))
#include <Wire.h> #include <OneWire.h> #include <DallasTemperature.h> #define ONE_WIRE_BUS 6 OneWire oneWire(ONE_WIRE_BUS); DallasTemperature sensors(&oneWire); DeviceAddress Thermometer1 = {0x28, 0xFF, 0xAA, 0xDB, 0xA2, 0x16, 0x04, 0xCD }; // адрес датчика DS18B20 28FFAADBA21604CD DeviceAddress Thermometer2 = {0x28, 0xFF, 0xF3, 0x4A, 0xA3, 0x16, 0x05, 0x30 }; // 28FFF34AA3160530 #include <LCD_1602_RUS.h> LCD_1602_RUS lcd(0x3f, 16, 2); int analogInput = A6; //вход для вольтметра float vin = 0; // ВХОДНОЕ ЕАПРЯЖЕНИЕ void setup() { lcd.init(); // Инициализация lcd lcd.backlight(); // Включаем подсветку lcd.setCursor(2, 0); lcd.print(L"Мир земляни!"); delay(400); pinMode(analogInput, INPUT); } void loop() { sensors.requestTemperatures(); lcd.init(); lcd.backlight(); lcd.setCursor(0, 0); lcd.print(L""); lcd.print(sensors.getTempCByIndex(0)); lcd.print("C"); lcd.setCursor(0, 1); lcd.print(L""); lcd.print(sensors.getTempCByIndex(1)); lcd.print("C"); lcd.setCursor(11, 1); vin = float(analogRead(analogInput))/196; //подстроичное число для показа вольтметра lcd.print(""); lcd.print(vin); lcd.print("v"); }
вот видео как моргает
https://www.youtube.com/watch?v=OGENUtyNSM4
31
//
lcd.init();
32
//
lcd.backlight();
вот так и думал, походу идет какоето постоянное обновление, спс работает)))
да, так и сделал)) спс.
2. как значение температы округлить к целому числу, точнее сделать просто целое число? вольтметр к десятым ?
lcd.print(vin, 1);
а чтоб дисплей не моргал делал так:
все получилось, всем спасибо!!) буду дальше что-то мудрувать))
C:\Users\1\AppData\Local\Temp\Rar$DIa0.033\CO2_1602_I2C\CO2_1602_I2C.ino: In function 'void get_co2()':
expected ';' before 'cd'
помогите с ошибкой
C:\Users\1\AppData\Local\Temp\Rar$DIa0.033\CO2_1602_I2C\CO2_1602_I2C.ino: In function 'void get_co2()':
expected ';' before 'cd'
помогите с ошибкой
верните l на место )))
Компилятор говорит перед строчкой cd.setCursor(0, 1); горе-программист потерял ;
#include <LiquidCrystal_I2C.h>
#include <SoftwareSerial.h>;
#include <Encoder.h>
#include "Timer.h"
#include <Adafruit_Sensor.h>
#include <DHT.h>
#include <DHT_U.h>
#define DHTTYPE DHT11 // DHT 11
//#define DHTTYPE DHT22 // DHT 22 (AM2302)
DHT_Unified dht(DHTPIN, DHTTYPE);
unsigned char response[9];
int hum;
LiquidCrystal_I2C lcd(0x27, 16, 2);
#define ENCODER_DO_NOT_USE_INTERRUPTS
Encoder myEnc(2, 3); //подключение энкодера
int flag=0;
void setup()
{
Serial.begin(9600);
mySerial.begin(9600);
dht.begin();
sensor_t sensor;
digitalWrite(7,HIGH);
// инициализация LCD
lcd.begin();
lcd.backlight();
t.every(15000, get_co2);
t.every(2000, get_temp);
}
long criticalppm = -999;
{
t.update();
if (newppm != criticalppm) {
criticalppm = newppm;
lcd.setCursor(0, 1);
lcd.print(" ");
}
lcd.setCursor(0, 1);
lcd.print("CO2=");lcd.print(ppm);
lcd.setCursor(10, 1);
lcd.print("V:");lcd.print(criticalppm);
lcd.print("T=");lcd.print(tem);lcd.print(" C");
lcd.setCursor(9, 0);
lcd.print("H=");lcd.print(hum);lcd.print(" %");
digitalWrite(7,LOW);
else digitalWrite(7,HIGH);
}
//=================================================
void get_co2()
{
mySerial.write(cmd, 9);
memset(response, 0, 9);
mySerial.readBytes(response, 9);
int i;
byte crc = 0;
for (i = 1; i < 8; i++) crc+=response[i];
crc = 255 - crc;
crc++;
Serial.println("CRC error: " + String(crc) + " / "+ String(response[8]));
} else {
unsigned int responseHigh = (unsigned int) response[2];
unsigned int responseLow = (unsigned int) response[3];
ppm = (256*responseHigh) + responseLow;
Serial.println(ppm);
lcd.print(" ");
}
}
//=================================================
void get_temp(){
sensors_event_t event;
dht.temperature().getEvent(&event);
tem=event.temperature;
dht.humidity().getEvent(&event);
hum=event.relative_humidity;
lcd.setCursor(0, 0);
lcd.print(" ");
}
вроде так и написанно
1 cd.setCursor(0, 1);
1 cd.setCursor(0, 1);
ну нах 1.
напиши просто cd.setCursor(0, 1); / но скорее всего lcd.setCursor(0, 1);
А компилятор говорит. если горе программист втулил зачем-то 1, то надо воткнуть и ;
Спасибо помогло....правильно lcd
здраствуйте всем!!!
обратно нужна ваша помощь)
написал, ну как написал, накопировал скетч который выводит на екран температуру, вольтметр, часы (блок реального времени), включен или выключен газ. все вроди работает но есть одно но. Ранее был написан скетч для пульта магнитолы и 3 месяца была практика, которая показала отличий функционал. И вот установил экран в авто и соединив 2 скетча в 1 вылезли некоторые косяки, а именно не кожное нажатие отрабатываеться (особенно громкость), время сежду нажатиями.
Подскажите как можно избавиться от этих косяков или как упростить скетч чтоб уменьшить цикл.
зарание спасибо))
Подскажите как можно избавиться от этих косяков или как упростить скетч чтоб уменьшить цикл.
совершенно верно говорите и сам думаю о развитии но ездить то не удобно...))
Вот присмотритесь к этому.
qwone, эдак Вы всех неофитов в кардиологию отправите.)))
Katroha, вы пример, вышепредставленный, изучите и постарайтесь понять.
А основной ваш косяк в том, что все запихали в loop и долбитесь в разные функции на каждом проходе. И все бы опять ничего, если бы не поганая библиотека Dallas Temperature, в которой прямо прописан delay(750), вот во время этого факенделая ничего и не считывается, а МК занимается работой сотрудников думы, сидит и нихрена не делает.(((
Для разделения дел во времени почитайте блог одного уважаемого члена сообщества. Для ликвидации DT библиотеки и экономии 2К памяти, топик не менее уважаемого.
qwone, эдак Вы всех неофитов в кардиологию отправите.)))
Я вообще удивляюсь как они на таких этажерках летают.
qwone, эдак Вы всех неофитов в кардиологию отправите.)))
Я вообще удивляюсь как они на таких этажерках летают.
Не может, но летает. А самое смешное, что с того момента принципиально ничего не изменилось.)))
Летает. @_@. Да оно больше падает, ломается и чинится,чем делает вид, что летает. Все поменялось принципиально. Вот только слепые, глухие и тупые этого не видят. Или же им мозг полностью засрали.
Принципиально, это когда убрали крылья, поставили винт сверху и получили вертолет, или набили трубу топливом и получили ракету. Это принципиально. Для самолетов, появились новые конструкционные материалы (которых на тот момент просто не существовало), набрали статистику, подвели математическую базу, но вертолетом он от этого не стал (корпус, крылья, двигатель в продольной плоскости и все сопутствующие данной конструкции ограничения).
Принципиально это когда не убрали крылья, а когда безопасность полетов возросла. Причем подымали эту безопасность на каждом этапе, от идеи, преектирования, до эксплуатации. Вот так и с проектированием программ. Ведь почему появились языки высокого уровня, а потом и они усложнились. Это ведь не потому ,что программисты сектанты какие-то, а потому что так лучше проще и надежнее создавать программы. А тут на Ардуине дали кусок ткани, рейки и моток веревки и лети наш дорогой Икар и не падай возле наших глаз.
А тут на Ардуине дали кусок ткани, рейки и моток веревки и лети наш дорогой Икар и не падай возле наших глаз.
Так ведь никто и никогда не пытался позиционировать Ардуино как профессиональное средство разработки. Конструктор для домашних поделок и ничего более, ошибка в программе или схемотехнике кроме разочарования ничего за собой не влечет.
Летает. @_@. Да оно больше падает, ломается и чинится,чем делает вид, что летает. Все поменялось принципиально. Вот только слепые, глухие и тупые этого не видят. Или же им мозг полностью засрали.
просто как в церкви каких то новых проповедников послушал))))
Так ведь никто и никогда не пытался позиционировать Ардуино как профессиональное средство разработки. Конструктор для домашних поделок и ничего более, ошибка в программе или схемотехнике кроме разочарования ничего за собой не влечет.
на 100% поддержал)))
Ведь для чего народ парится на Ардуине. Ради разочарования.
А основной ваш косяк в том, что все запихали в loop и долбитесь в разные функции на каждом проходе.
Вот про это и думал. Просто с разных скетчей делал один, вот такое и получилось, а как по другому хз.
Спасибо за ссылки, буду изучать. Думаю все что связано с lcd отправить как-бы в один loop, а кнопки от магнитолы у второй? Ну и избавиться от библиотеки ДалласТемп.
вот так и думал, походу идет какоето постоянное обновление, спс работает)))
еще будет моргать если в коде loop есть
http://arduino.ru/forum/programmirovanie/pochistil-sketch-primera-raboty-s-ds18b20-iz-bibly-oneware?page=3#comment-280218
*в 19 строке кода вместо 100 нужно поставить 1000
От библиотеки не избавлялся, а вот из цикла вынес датчики температуры и вольтметр. Теперь пульт к магнетоле работает отлично и остальное без замечаний. Спасибо!!!))
Появился новый вопрос))
Хотел сделать програмную регулировку яркости подсвети LCD1602? скетч написал, тестером проверил с пина выходит 5в. , а при подключении к экрану подсветка светит только в половину яркости, тестер показывает 2.5в., резик в экрани стоит всего на 100Ом.
Вчем прикол? ардуина про мини 5в. не вытягивает светик или еще может быть что-то???
Спасибо.
Я надеюсь, транзистор не забыли поставить?
Вчем прикол?
Пин не может отдавать ток более 40 мА.
Как раз без него и делал. В уроках про светодиод подключались напрямую.
Буду искать, учить. Спасибо.