Проблема с меню для LCD

releyshic
Offline
Зарегистрирован: 20.11.2015

Снеси нах-р свою ардуину ИДЕ!!!

и установи последнюю чтоб никому мозг не епать!

James
Offline
Зарегистрирован: 26.02.2016

releyshic пишет:

Снеси нах-р свою ардуину ИДЕ!!!

и установи последнюю чтоб никому мозг не епать!

тоже вариант, так и сделаю:) мозг "ипать" никому и не собирался, зря Вы так

Клапауций 322
Offline
Зарегистрирован: 31.12.2015

James пишет:

тоже вариант, так и сделаю:) мозг "ипать" никому и не собирался, зря Вы так

Клапауций 322 пишет:

*работает только в версии arduino-1.6.7

что бы работало в версиях младше вплоть до Arduino 1.0, нужно в код #1 добавить первой строкой

#include <Arduino.h>

**проверяем.

добавь строку #include <Arduino.h> и сообщи, какая версия Дуино ИДЕ у тебя, если не работает - я перепроверю, что не так.

James
Offline
Зарегистрирован: 26.02.2016

добавлял 1.0.5

James
Offline
Зарегистрирован: 26.02.2016

сейчас последнюю поставлю попробую

 

Клапауций 322
Offline
Зарегистрирован: 31.12.2015

James пишет:

добавлял 1.0.5

хреново добавлял.

проверено всё работает без ошибок в:

arduino-1.0
arduino-1.0.5-r2
 
*ещё раз повторяю

Клапауций 322 пишет:

*работает только в версии arduino-1.6.7

что бы работало в версиях младше вплоть до Arduino 1.0, нужно в код #1 добавить первой строкой

#include <Arduino.h>

**проверяем.

 
James
Offline
Зарегистрирован: 26.02.2016

поставил 1.6.6 тут описание ошибки нормальное, это с директорией ошибка была:)

wenom86
Offline
Зарегистрирован: 04.11.2012

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;
}
*/
//=================================================================================================
//                                  КОНЕЦ СЧИТЫВАНИЯ ТЕМПЕРАТУРЫ
//=================================================================================================

 

James
Offline
Зарегистрирован: 26.02.2016

да в принципе вроде все тоже:) Спасибо, у Вас от LCD.clear() и delay() экран не мерцает?

Mr.Privet
Mr.Privet аватар
Offline
Зарегистрирован: 17.11.2015

как же вы без функций то... ну ничего, еще научитесь...программка для метеостанции норм, но есть куда рости. попробуйте если хотите значения выводить не int а froat, это те что с точкой. вместо if else можно switch использовать, он при больших объемах как то нагляднее... но это кому как нравится. Если используете много однотипных переменных (у вас r1-r8) то можно их задать через массив r[8], и обращаться через for (byte i=0;i<8;i++){обращение r[i]} но помните что адреса будут с 0 по 7, если обратиться r[8] будет рандомное значение из памяти... 

yul-i-an
yul-i-an аватар
Offline
Зарегистрирован: 10.12.2012

James пишет:

да в принципе вроде все тоже:) Спасибо, у Вас от LCD.clear() и delay() экран не мерцает?

Узнаю свое меню о котором я писал года три назад (радует что комуто оно пригождаеться), вот тут ребята над ним работали и вроде довели до ума, я сам его в железе не пробовал, только в proteus. Т.к. на тот момент я только начинал изучать Arduino многое делал не правильно.

На данный момент думаю чтобы в этом меню избавиться от мерцания необходимо секцию кода которая выводит экранчики вызывать раз в 50-100мск по millis() (как бы 20 кадров в секунду), например как я делал тут 143 строка кода.

Есче про меню

wenom86
Offline
Зарегистрирован: 04.11.2012

нет, мерцаний нет.

James
Offline
Зарегистрирован: 26.02.2016

а есть кто-нибудь кто подключал ардруино к бортовой сети авто? было бы круто если бы поделились опытом:( знаю, что там скачки напряжений могут быть до 100 В, и переполюсовки, обычный преобразователь DC/DC  не поставишь, нужна еще защита от всех этих "прелестей"?