как же вы без функций то... ну ничего, еще научитесь...программка для метеостанции норм, но есть куда рости. попробуйте если хотите значения выводить не int а froat, это те что с точкой. вместо if else можно switch использовать, он при больших объемах как то нагляднее... но это кому как нравится. Если используете много однотипных переменных (у вас r1-r8) то можно их задать через массив r[8], и обращаться через for (byte i=0;i<8;i++){обращение r[i]} но помните что адреса будут с 0 по 7, если обратиться r[8] будет рандомное значение из памяти...
да в принципе вроде все тоже:) Спасибо, у Вас от LCD.clear() и delay() экран не мерцает?
Узнаю свое меню о котором я писал года три назад (радует что комуто оно пригождаеться), вот тут ребята над ним работали и вроде довели до ума, я сам его в железе не пробовал, только в proteus. Т.к. на тот момент я только начинал изучать Arduino многое делал не правильно.
На данный момент думаю чтобы в этом меню избавиться от мерцания необходимо секцию кода которая выводит экранчики вызывать раз в 50-100мск по millis() (как бы 20 кадров в секунду), например как я делал тут143 строка кода.
а есть кто-нибудь кто подключал ардруино к бортовой сети авто? было бы круто если бы поделились опытом:( знаю, что там скачки напряжений могут быть до 100 В, и переполюсовки, обычный преобразователь DC/DC не поставишь, нужна еще защита от всех этих "прелестей"?
Снеси нах-р свою ардуину ИДЕ!!!
и установи последнюю чтоб никому мозг не епать!
Снеси нах-р свою ардуину ИДЕ!!!
и установи последнюю чтоб никому мозг не епать!
тоже вариант, так и сделаю:) мозг "ипать" никому и не собирался, зря Вы так
тоже вариант, так и сделаю:) мозг "ипать" никому и не собирался, зря Вы так
*работает только в версии arduino-1.6.7
что бы работало в версиях младше вплоть до Arduino 1.0, нужно в код #1 добавить первой строкой
**проверяем.
добавь строку #include <Arduino.h> и сообщи, какая версия Дуино ИДЕ у тебя, если не работает - я перепроверю, что не так.
добавлял 1.0.5
сейчас последнюю поставлю попробую
добавлял 1.0.5
хреново добавлял.
проверено всё работает без ошибок в:
*работает только в версии arduino-1.6.7
что бы работало в версиях младше вплоть до Arduino 1.0, нужно в код #1 добавить первой строкой
**проверяем.
поставил 1.6.6 тут описание ошибки нормальное, это с директорией ошибка была:)
James, посмотрите на код проекта, над которым я сейчас работаю. Код рабочий. Много чего прокомментировано, может что-либо почерпнете для себя:
//================================================================================================= // НАЗВАНИЕ ПРОГРАММЫ: Погодная станция // ВЕРСИЯ ПРОГРАММЫ: v0.7 // КОМПОНЕНТЫ:Датчик DS18b20 1 шт, Экран 1602 с подсветкой, резистор 4,7ком 1шт, датчик влажности DHT22. // ВЕРСИЯ ARDUINO IDE: 1.0.5 r2 // ПОДКЛЮЧАЕМЫЕ БИБЛИОТЕКИ: OneWire.h, Wire.h, LiquidCrystal.h, DS3231.h, DHT.h, // ФУНКЦИОНАЛ: // а) 31.01.16 (+) Считывает текущую дату и время с RTC DS3231, а также отображает их на дисплее на главном экране (экране №1) // б) 07.02.16 (+) Считывает нажатие кнопок клавиатуры, подключенной на аналоговый вход A5. (5 кнопок) // в) 08.02.16 (+) Считывает показания температуры с датчика 1 и отображает их на дисплее на экране №2 в строке Tnar // г) 08.02.16 (-) v0.4 Добавлена возможность работы с eeprom на основе микросхемы 24с02 // д) 14.02.16 (-) v0.5 Перенос проекта на ардуино 2560. Подключен экран, аналог.клав-ра, 1 датчик темп. // е) 05.03.16 (+) v0.6 Подключение 1 датчика температуры-влажности DHT22 ко 2 цифр. пину, теперь инф-я о темп. получается с него. // ё) 13.03.16 (+) v0.7 Внедрение пид-регулирования для обогревателя в гараже. Добавлено сохранение данных в eeprom // ж) 13.03.16 (+) v0.8 Переработан порядок следования по окнам экрана. Теперь можно выставить любую последовательность, какое окно за каким идет. // ------ // ОСОБЕННОСТИ:ds18b20 запитан от шины на 5в./ DS3231 запитан от 5в./ // контакт V0 экрана 1602 отвечает за контрастность. Подключил его к ШИМ-пину 9 ардуино. // С ЧЕМ НУЖНО РАЗОБРАТЬСЯ: / исключить английский из комментариев. // //================================================================================================= #include <DS3231.h> //библиотека часов #include <OneWire.h> #include <Wire.h> // I2C #include <LiquidCrystal.h> // LCD #include <DHT.h> // для датчика темп-влажности. #include <PID_v1.h> // библиотека PID #include <EEPROM.h> // работа с eeprom, встроенным в ардуину. #define DHTPIN 2 // 1-й датчик температуры-влажности подключен к 2 цифр.пину. датчик в гараже #define DHTPIN2 3 // 2-й датчик температуры-влажности подключен к 3 цифр.пину. датчик в подвале #define DHTPIN3 4 // 3-й датчик температуры-влажности подключен к 4 цифр.пину. датчик на улице DHT dht(DHTPIN, DHT22); // Инициируем датчик, в данном случае DHT22, еслу будет DHT11, то строка примет вид: DHT dht(DHTPIN, DHT11); int t1,h1,t2,h2,t3,h3; #define PIN_OUTPUT 13 // ПИД: ПИН ВЫХОДНОГО СИГНАЛА1, 13 цифровой пин. double Setpoint, Input, Output; // ПИД: определение переменных double aggKp=4, aggKi=0.2, aggKd=1; // ПИД: параметры агрессивного режима double consKp=1, consKi=0.05, consKd=0.25; // ПИД: параметры консервативного режима PID myPID(&Input, &Output, &Setpoint, consKp, consKi, consKd, DIRECT); //ПИД: указываем переменные и начальные параметры настройки double gap; // Переключатель параметров; int outPercente; // переменная пересчета шим в % мощьности. int ekran; //переменная для выбора экрана меню int m=0; //переменная для экранов меню int tgarust = EEPROM.read(0); // переменная для хранения желаемой температуры в гараже. Значение хранится в eeprom по адресу 0. int tpodust = EEPROM.read(1); // переменная для хранения желаемой температуры в подвале. Значение хранится в eeprom по адресу 1. int TEMPgarMIN = EEPROM.read(2); // переменная для хранения минимальной температуры в гараже. Значение хранится в eeprom по адресу 2. int TEMPgarMAX = EEPROM.read(3); // -//- максимальной температуры в гараже. int TEMPpodMIN = EEPROM.read(4); // -//- минимальной температуры в подвале. int TEMPpodMAX = EEPROM.read(5); // -//- максимальной температуры в подвале. int r1=0; // переменная состояния реле 1 int r2=0; // -//- реле 2 int r3=0; // -//- реле 3 int r4=0; // -//- реле 4 int r5=0; // -//- реле 5 int r6=0; // -//- реле 6 int r7=0; // -//- реле 7 int r8=0; // -//- реле 8 int b,c=0; //переменные для аналоговой клавиатуры. int analogPin=2; //пин А2 для аналоговой клавиатуры. long previousMillis = 0; //счетчик прошедшего времени для AutoMainScreen (автоматического возврата к клавному экрану через определенное время) long interval = 30000; //задержка автовозврата к MainScreen 30сек /* OneWire ds (6); //Пин 6 для подключения датчика температуры по шине 1-wire byte data[12]; //не знаю что это, пока. byte addr1[8] = {0x28, 0x92, 0x15, 0xD6, 0x04, 0x00, 0x00, 0xF9}; // ID индивидуально для каждого датчика температуры, было считано 289215D6040000F9. byte addr2[8] = {0x28, 0xFF, 0xA1, 0x9B, 0x67, 0x14, 0x04, 0xAA}; //!!! Этот id пока нигде не используется byte addr3[8] = {0x28, 0xFF, 0xA1, 0x9B, 0x67, 0x14, 0x04, 0xAA}; //!!! Этот id пока нигде не используется unsigned int raw; float temp1, temp2, temp3; //переменные для обозначенния температур. */ DS3231 rtc(20, 21); //шина, на которую подключены часы (для ардуино нано на 328 чипе, это пины A4/A5)(для меги - пины 20/21) // LiquidCrystal lcd(12, 11, 10, 5, 4, 3, 2); // для УНО. пины подключения к экрану 1602A (A=5v/K=GND)(VSS+VO=GND/VDD=5v/RS=pin12/RW=pin11/E=pin10/D4=pin5/D5=pin4/D6=pin3/D7=pin2) LiquidCrystal lcd(22, 28, 23, 24, 25, 26, 27); // для МЕГИ 2560. (A=5v/K=GND)(VSS=GND/VDD=5v/RS=pin22/RW=pin28/E=pin23/D4=pin24/D5=pin25/D6=pin26/D7=pin27) void setup(){ Input = t1; //ПИД: получение показаний с датчика1 температуры-влажности. Setpoint = tgarust; //ПИД: берем значение из переменной устанавливаемой желаемой температуры гаража. myPID.SetMode(AUTOMATIC); //ПИД: инициализация в автоматическом режиме. Serial.begin(9600); // инициализация сериал-монитора, для вывода любой инф-ии в порт. pinMode(9, OUTPUT); //инициализируем 9 выход. analogWrite(9, 100); // устанавливаем ШИМ-выход управления контрастностью дисплея на значение 100. rtc.begin(); // инициализация часов на DS3231. lcd.begin(16, 2); // инициализация экрана (16 символов в 2 строках). dht.begin(); // инициализация датчика температуры-влажности. // Вывод приветствия lcd.setCursor(0, 0); lcd.print( "Pogodnaya" ); // Вывод приветствия lcd.setCursor(0, 1); lcd.print( "stanciya v0.8" ); delay (3000); // Конец вывода приветствия+задержка. } void loop() { float h1 = dht.readHumidity(); //переменная h1 для датчика 1 температуры-влажности. float t1 = dht.readTemperature(); //переменная t1 для датчика 1 температуры-влажности. unsigned long currentMillis = millis(); //начало отсчета цикла для возврата к главному экрану //================================================================================================= // НАЧАЛО РАБОТЫ ПИД-РЕГУЛЯТОРА 1 //================================================================================================= Input = t1; double gap = abs(Setpoint-Input); //distance away from setpoint if (gap < 3) { //we're close to setpoint, use conservative tuning parameters myPID.SetTunings(consKp, consKi, consKd); } else { //we're far from setpoint, use aggressive tuning parameters myPID.SetTunings(aggKp, aggKi, aggKd); } myPID.Compute(); analogWrite(PIN_OUTPUT, Output); outPercente = (byte)(Output/255*100);// Считаем в процентах мощность вывода ШИМ для отображения на LCD; //================================================================================================= // КОНЕЦ РАБОТЫ ПИД-РЕГУЛЯТОРА 1 //================================================================================================= //================================================================================================= // НАЧАЛО СЧИТЫВАНИЯ ЗНАЧЕНИЙ С КЛАВИАТУРЫ //================================================================================================= int c = analogRead(analogPin); if (c>950) { b=0; } // ни одна клавиша не нажата. else if (c>170 && c<200) { b=1; } // нажата кнопка 1 ВВЕРХ else if (c<30) { b=2; } // нажата кнопка 2 ВПРАВО else if (c>390 && c<420) { b=3; } // нажата кнопка 3 ВНИЗ else if (c>300 && c<330) { b=4; } // нажата кнопка 4 ВЛЕВО else if (c>465 && c<505) { b=5; } // нажата кнопка 5 ЦЕНТР //================================================================================================= // КОНЕЦ СЧИТЫВАНИЯ ЗНАЧЕНИЙ С КЛАВИАТУРЫ //================================================================================================= //================================================================================================= // НАЧАЛО ОБРАБОТКИ НАЖАТИЯ КЛАВИШ ВВЕРХ/ВНИЗ. //================================================================================================= //Обработка нажатия NEXT (кнопка 3-вниз) if (b==3) { m++;//увеличиваем переменную уровня меню previousMillis = currentMillis; //если кнопка была нажата сбросить счетчик автовозврата к главному экрану delay (100); lcd.clear(); if (m>17) //если уровень больше 15 { m=17; //то оставаться на значении 15 } } //Обработка нажатия кнопки PREV (кнопка 1-вверх) if (b==1) { m--; previousMillis = currentMillis; delay (100); lcd.clear(); if (m<0) //если уровень меньше 0 { m=0; //то оставаться на 0. } } //================================================================================================= // КОНЕЦ ОБРАБОТКИ НАЖАТИЯ КЛАВИШ ВВЕРХ/ВНИЗ. //================================================================================================= //================================================================================================= // НАЧАЛО ОБРАБОТКИ ВЫБОРА ОТОБРАЖАЕМОГО ЭКРАНА В ЗАВИСИМОСТИ ОТ ПЕРЕМЕННОЙ "m" //================================================================================================= if (m==0){ ekran = 0; } if (m==1){ ekran = 1; } if (m==2){ ekran = 2; } if (m==3){ ekran = 3; } if (m==4){ ekran = 14; } if (m==5){ ekran = 16; } if (m==6){ ekran = 17; } if (m==7){ ekran = 11; } if (m==8){ ekran = 12; } if (m==9){ ekran = 13; } if (m==10){ ekran = 4; } if (m==11){ ekran = 5; } if (m==12){ ekran = 6; } if (m==13){ ekran = 7; } if (m==14){ ekran = 8; } if (m==15){ ekran = 9; } if (m==16){ ekran = 10; } if (m==17){ ekran = 15; } //================================================================================================= // НАЧАЛО ОБРАБОТКИ ВЫБОРА ОТОБРАЖАЕМОГО ЭКРАНА В ЗАВИСИМОСТИ ОТ ПЕРЕМЕННОЙ "m" //================================================================================================= //================================================================================================= // НАЧАЛО ОБРАБОТКИ НАЖАТИЯ КЛАВИШ ВЛЕВО/ВПРАВО/ЦЕНТР. //================================================================================================= // ---------------------------- ЭКРАН 0 (+) ------------------------------------ //нет обработок для этого экрана // ---------------------------- ЭКРАН 1 (+) ------------------------------------ //нет обработок для этого экрана // ---------------------------- ЭКРАН 2 (+) ------------------------------------ //нет обработок для этого экрана // ---------------------------- ЭКРАН 3 (+) ------------------------------------ //нет обработок для этого экрана // ---------------------------- ЭКРАН 4 (+) ------------------------------------ //нет обработок для этого экрана // ---------------------------- ЭКРАН 5 (+) ------------------------------------ //нет обработок для этого экрана // ---------------------------- ЭКРАН 6 (+) ------------------------------------ //нет обработок для этого экрана // ---------------------------- ЭКРАН 7 (+) ------------------------------------ if (b==2 && ekran==7) { TEMPgarMIN++; previousMillis = currentMillis; delay (100); lcd.clear(); if (TEMPgarMIN>50) { TEMPgarMIN=50; }} if (b==4 && ekran==7) { TEMPgarMIN--; previousMillis = currentMillis; delay (100); lcd.clear(); if (TEMPgarMIN<1){ TEMPgarMIN=1; }} // ---------------------------- ЭКРАН 8 (+) ------------------------------------ if (b==2 && ekran==8) { TEMPgarMAX++; previousMillis = currentMillis; delay (100); lcd.clear(); if (TEMPgarMAX>50) { TEMPgarMAX=50; }} if (b==4 && ekran==8) { TEMPgarMAX--; previousMillis = currentMillis; delay (100); lcd.clear(); if (TEMPgarMAX<1){ TEMPgarMAX=1; }} // ---------------------------- ЭКРАН 9 (+) ------------------------------------ if (b==2 && ekran==9) { TEMPpodMIN++; previousMillis = currentMillis; delay (100); lcd.clear(); if (TEMPpodMIN>50) { TEMPpodMIN=50; }} if (b==4 && ekran==9) { TEMPpodMIN--; previousMillis = currentMillis; delay (100); lcd.clear(); if (TEMPpodMIN<1){ TEMPpodMIN=1; }} // ---------------------------- ЭКРАН 10 (+) ------------------------------------ if (b==2 && ekran==10) { TEMPpodMAX++; previousMillis = currentMillis; delay (100); lcd.clear(); if (TEMPpodMAX>50) { TEMPpodMAX=50; }} if (b==4 && ekran==10) { TEMPpodMAX--; previousMillis = currentMillis; delay (100); lcd.clear(); if (TEMPpodMAX<1){ TEMPpodMAX=1; }} // ---------------------------- ЭКРАН 11 (+) ------------------------------------ //нет обработок для этого экрана // ---------------------------- ЭКРАН 12 (+) ------------------------------------ //нет обработок для этого экрана // ---------------------------- ЭКРАН 13 (+) ------------------------------------ //нет обработок для этого экрана // ---------------------------- ЭКРАН 14 (+) ------------------------------------ if (b==2 && ekran==14) //если находимся на экране 14, Обработка нажатия кнопки 2-вправо для экрана { tgarust++; //то при нажатии кнопки вправо увеличиваем переменную tgarust на единицу previousMillis = currentMillis; delay (100); lcd.clear(); if (tgarust>50) //устанавливаем предел изменения переменной = 50 { //если больше предела tgarust=50; //то оставляем значение 50 (тут код условия что делать при достижении пределов) } } if (b==4 && ekran==14) // аналогично Обработка нажатия кнопки 4-влево для экрана 14 { tgarust--; //то при нажатии кнопки вправо уменьшаем переменную tgarust на единицу previousMillis = currentMillis; delay (100); lcd.clear(); if (tgarust<1) //устанавливаем предел изменения переменной = 1 { //если меньше предела tgarust=1; //то оставляем значение 1 (тут код условия что делать при достижении пределов) } } // ---------------------------- ЭКРАН 15 (+) ------------------------------------ if (b==5 && ekran==15) // если находимся на экране 15 и нажали клавишу 5-центр. { EEPROM.write(0, tgarust); // запись всех обьявленных переменных в eeprom. EEPROM.write(1, tpodust); EEPROM.write(2, TEMPgarMIN); EEPROM.write(3, TEMPgarMAX); EEPROM.write(4, TEMPpodMIN); EEPROM.write(5, TEMPpodMAX); } // ---------------------------- ЭКРАН 16 (+) ------------------------------------ if (b==2 && ekran==16) { tpodust++; previousMillis = currentMillis; delay (100); lcd.clear(); if (tpodust>50) { tpodust=50; }} if (b==4 && ekran==16) { tpodust--; previousMillis = currentMillis; delay (100); lcd.clear(); if (tpodust<1){ tpodust=1; }} // ---------------------------- ЭКРАН 17 (+) ------------------------------------ //нет обработок для этого экрана //================================================================================================= // КОНЕЦ ОБРАБОТКИ НАЖАТИЯ КЛАВИШ ВЛЕВО/ВПРАВО/ЦЕНТР. //================================================================================================= //================================================================================================= // НАЧАЛО ВЫВОДА ЭКРАНОВ МЕНЮ, ОПИСАНИЕ ЭКРАНОВ //================================================================================================= if (ekran==0) //переменная ekran=0 (+), главный экран. { //отображаем lcd.setCursor(0, 0); // ****************** lcd.print("DATE: "); // *DATE: 08.08.1976* lcd.print(rtc.getDateStr()); // *TIME: 22:08:54 * lcd.setCursor(0, 1); // ****************** lcd.print("TIME: "); lcd.print(rtc.getTimeStr()); } else if (ekran==1) //переменная ekran=1 (+), экран 1 { //отображаем lcd.setCursor(0, 0); //******************* lcd.print("Tnar|Vnar|Pnar"); //*Tnar|Vnar|Pnar * lcd.setCursor(0, 1); //*30C |99% |745mm * lcd.print(t1, 0); //******************* lcd.print("c"); lcd.setCursor(4, 1); lcd.print("|"); lcd.print(h1, 0); lcd.print("%"); lcd.setCursor(9, 1); lcd.print("|"); lcd.print(t1, 0); lcd.print("mm"); } else if (ekran==2) //переменная ekran=2 (+), экран 2 { //отображаем lcd.setCursor(0, 0); //******************* lcd.print("Tgar|Vgar|"); //*Tgar|Vgar| * lcd.setCursor(0, 1); //*30C |99% | * lcd.print(t1, 0); //******************* lcd.print("C"); lcd.setCursor(4, 1); lcd.print("|"); lcd.print(t1, 0); lcd.print("%"); lcd.setCursor(9, 1); lcd.print("|"); } else if (ekran==3) //переменная ekran=3 (+), экран 3 { //отображаем lcd.setCursor(0, 0); //******************* lcd.print("Tpod|Vpod|"); //*Tpod|Vpod| * lcd.setCursor(0, 1); //*30C |99% | * lcd.print(t1, 0); //******************* lcd.print("C"); lcd.setCursor(4, 1); lcd.print("|"); lcd.print(t1, 0); lcd.print("%"); lcd.setCursor(9, 1); lcd.print("|"); } else if (ekran==4) //переменная ekran=4 (-), экран 4 { //отображаем lcd.setCursor(0, 0); //******************* lcd.print("R1 |R2 |R3 |R4 |"); //*R1 |R2 |R3 |R4 | * lcd.setCursor(0, 1); //*ON |OFF|OFF|ON | * if (r1==1) {lcd.print("ON");} //******************* if (r1==0) {lcd.print("OFF");} lcd.setCursor(3, 1); lcd.print("|"); if (r2==1) {lcd.print("ON");} if (r2==0) {lcd.print("OFF");} lcd.setCursor(7, 1); lcd.print("|"); if (r3==1) {lcd.print("ON");} if (r3==0) {lcd.print("OFF");} lcd.setCursor(11, 1); lcd.print("|"); if (r4==1) {lcd.print("ON");} if (r4==0) {lcd.print("OFF");} lcd.setCursor(15, 1); lcd.print("|"); } else if (ekran==5) //переменная ekran=5 (-), экран 5 { //отображаем lcd.setCursor(0, 0); //******************* lcd.print("R5 |R6 |R7 |R8 |"); //*R5 |R6 |R7 |R8 | * lcd.setCursor(0, 1); //*ON |OFF|OFF|ON | * if (r5==1) {lcd.print("ON");} //******************* if (r5==0) {lcd.print("OFF");} lcd.setCursor(3, 1); lcd.print("|"); if (r6==1) {lcd.print("ON");} if (r6==0) {lcd.print("OFF");} lcd.setCursor(7, 1); lcd.print("|"); if (r7==1) {lcd.print("ON");} if (r7==0) {lcd.print("OFF");} lcd.setCursor(11, 1); lcd.print("|"); if (r8==1) {lcd.print("ON");} if (r8==0) {lcd.print("OFF");} lcd.setCursor(15, 1); lcd.print("|"); } else if (ekran==6) //переменная ekran=6 (+), экран 6 { //отображаем lcd.setCursor(0, 0); //******************* lcd.print(" CONFIGURATION "); //* CONFIGURATION * lcd.setCursor(0, 1); //* PARAMETER * lcd.print(" PARAMETER "); //******************* } else if (ekran==7) //переменная ekran=7 (-), экран 7 { //отображаем lcd.setCursor(0, 0); //******************* lcd.print("CONFIGURATION: "); //*CONFIGURATION: * lcd.setCursor(0, 1); //*TEMPgarMIN= * lcd.print("TEMPgarMIN="); //******************* lcd.print(TEMPgarMIN); lcd.setCursor(16, 1); lcd.print("C"); } else if (ekran==8) //переменная ekran=8 (-), экран 8 { //отображаем lcd.setCursor(0, 0); //******************* lcd.print("CONFIGURATION: "); //*CONFIGURATION: * lcd.setCursor(0, 1); //*TEMPgarMAX= * lcd.print("TEMPgarMAX="); //******************* lcd.print(TEMPgarMAX); lcd.setCursor(16, 1); lcd.print("C"); } else if (ekran==9) //переменная ekran=9 (-), экран 9 { //отображаем lcd.setCursor(0, 0); //******************* lcd.print("CONFIGURATION: "); //*CONFIGURATION: * lcd.setCursor(0, 1); //*TEMPpodMIN= * lcd.print("TEMPpodMIN="); //******************* lcd.print(TEMPpodMIN); lcd.setCursor(16, 1); lcd.print("C"); } else if (ekran==10) //переменная ekran=10 (-), экран 10 { //отображаем lcd.setCursor(0, 0); //******************* lcd.print("CONFIGURATION: "); //*CONFIGURATION: * lcd.setCursor(0, 1); //*TEMPpodMAX= * lcd.print("TEMPpodMAX="); //******************* lcd.print(TEMPpodMAX); lcd.setCursor(16, 1); lcd.print("C"); } else if (ekran==11) //переменная ekran=11 (-), экран 11 { //отображаем lcd.setCursor(0, 0); //******************* lcd.print("INFO: DHT22-gar"); //*CONF: DHT22-gar* lcd.setCursor(0, 1); if (isnan(h1) || isnan(t1)) { Serial.println("NO SIGNAL"); return; } lcd.print("H1:"); lcd.print(h1); lcd.print("%"); lcd.print("T1:"); lcd.print(t1); lcd.print("*C"); } else if (ekran==12) //переменная ekran=12 (-), экран 12 { //отображаем lcd.setCursor(0, 0); //******************* lcd.print("INFO: DHT22-pod"); //*CONF: DHT22-pod* lcd.setCursor(0, 1); if (isnan(h1) || isnan(t1)) { Serial.println("NO SIGNAL"); return; } lcd.print("H1:"); lcd.print(h1); lcd.print("%"); lcd.print("T1:"); lcd.print(t1); lcd.print("*C"); } else if (ekran==13) { lcd.setCursor(0, 0); lcd.print("INFO: DHT22-ulic"); lcd.setCursor(0, 1); if (isnan(h1) || isnan(t1)) { Serial.println("NO SIGNAL"); return; } lcd.print("H3:"); lcd.print(h1); lcd.print("%"); lcd.print("T2:"); lcd.print(t1); lcd.print("*C"); } else if (ekran==14) //переменная ekran=14 (-), экран 14 { //отображаем lcd.setCursor(0, 0); //*Tgaraj=26/T=24,5* lcd.print("Tgaraj="); //*Out=100% OFF* lcd.print(tgarust); lcd.setCursor(9, 0); lcd.print("/T="); lcd.print(t1); lcd.setCursor(0, 1); lcd.print("Out="); lcd.print(outPercente); lcd.print("%"); lcd.setCursor(13, 1); lcd.print("OFF"); } else if (ekran==15) //переменная ekran=15, экран 15 { //отображаем lcd.setCursor(0, 0); //*SAVE CONFIG:press* lcd.print("SAVE CONFIG:press"); //*center button* lcd.setCursor(0, 1); lcd.print("center button"); } else if (ekran==16) //переменная ekran=16 (-), экран 16 { //отображаем lcd.setCursor(0, 0); //*Tpod=26/T=24,5* lcd.print("Tpod="); //*Out=100% OFF* lcd.print(tpodust); lcd.setCursor(9, 0); lcd.print("/T="); lcd.print(t1); lcd.setCursor(0, 1); lcd.print("Out="); lcd.print(outPercente); lcd.print("%"); lcd.setCursor(13, 1); lcd.print("OFF"); } else if (ekran==17) //переменная ekran=17 (-), экран 17 { //отображаем lcd.setCursor(0, 0); //*INFORMATION* lcd.print("INFORMATION"); } //================================================================================================= // КОНЕЦ ВЫВОДА ЭКРАНОВ МЕНЮ, ОПИСАНИЕ ЭКРАНОВ //================================================================================================= //================================================================================================= // НАЧАЛО СЧИТЫВАНИЯ ТЕМПЕРАТУРЫ С ДАТЧИКОВ И ЕЁ ПРЕОБРАЗОВАНИЕ //================================================================================================= /* temp1 = DS18B20(addr1); temp2 = DS18B20(addr2); temp3 = DS18B20(addr3); */ } /* float DS18B20(byte *adres) { ds.reset(); ds.select(adres); ds.write(0x44, 1); // start conversion, with parasite power on at the end ds.reset(); ds.select(adres); ds.write(0xBE); // Read Scratchpad for (byte i = 0; i < 9; i++) // можно увеличить точность измерения до 0.0625 *С (от 9 до 12 бит) { // we need 9 bytes data[i] = ds.read (); } raw = (data[1] << 8) | data[0];//=======Пересчитываем в температуру float celsius = (float)raw / 16.0; return celsius; } */ //================================================================================================= // КОНЕЦ СЧИТЫВАНИЯ ТЕМПЕРАТУРЫ //=================================================================================================да в принципе вроде все тоже:) Спасибо, у Вас от LCD.clear() и delay() экран не мерцает?
как же вы без функций то... ну ничего, еще научитесь...программка для метеостанции норм, но есть куда рости. попробуйте если хотите значения выводить не int а froat, это те что с точкой. вместо if else можно switch использовать, он при больших объемах как то нагляднее... но это кому как нравится. Если используете много однотипных переменных (у вас r1-r8) то можно их задать через массив r[8], и обращаться через for (byte i=0;i<8;i++){обращение r[i]} но помните что адреса будут с 0 по 7, если обратиться r[8] будет рандомное значение из памяти...
да в принципе вроде все тоже:) Спасибо, у Вас от LCD.clear() и delay() экран не мерцает?
Узнаю свое меню о котором я писал года три назад (радует что комуто оно пригождаеться), вот тут ребята над ним работали и вроде довели до ума, я сам его в железе не пробовал, только в proteus. Т.к. на тот момент я только начинал изучать Arduino многое делал не правильно.
На данный момент думаю чтобы в этом меню избавиться от мерцания необходимо секцию кода которая выводит экранчики вызывать раз в 50-100мск по millis() (как бы 20 кадров в секунду), например как я делал тут 143 строка кода.
Есче про меню
нет, мерцаний нет.
а есть кто-нибудь кто подключал ардруино к бортовой сети авто? было бы круто если бы поделились опытом:( знаю, что там скачки напряжений могут быть до 100 В, и переполюсовки, обычный преобразователь DC/DC не поставишь, нужна еще защита от всех этих "прелестей"?