Применение millis для нескольких процессов

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Posol88 пишет:

но вот что такое "корень"? я догадываюсь что это главный фаил библиотеки. А как его распознать?  

Запишитесь на Курсы ПК для домохозяек.

Ну ведь вопрос явно не для этого форума.

Posol88
Offline
Зарегистрирован: 14.11.2019
#включить <Wire.h> 
 
#define disk1 0x50 //адрес чипа EEPROM 24LC256
 
void setup(пустота)
{
 Serial. begin(9600);
 Провод.начинайте(); 
 
 unsigned int address = 0;
 
 writeEEPROM(диск1, адрес, 123);
 Serial.print(readEEPROM(disk1, address), DEC);
}
 
пустотная петля(){}
 
void writeEEPROM(int deviceaddress, unsigned int eeaddress, байтовые данные ) 
{
 Wire.beginTransmission(deviceaddress);
 Wire.write((int)(eeaddress >>> 8)); // MSB
 Wire.write((int)(eeaddress & 0xFF)); // LSB
 Wire.write(данные);
 Провод.конечная передача();
 
 задержка(5);
}
 
байт readEEPROM(int deviceaddress, unsigned int eeaddress ) 
{
 байт rdata = 0xFF;
 
 Wire. beginTransmission(deviceaddress);
 Wire. write ((int)(eeaddress > > > 8)); / / MSB
 Wire. write ((int)(eeaddress & 0xFF)); / / LSB
 Провод.конечная передача();
 
 Wire. requestFrom(deviceaddress, 1);
 
 если (Wire.available ()) rdata = Wire. read();
 
 возврат rdata;
}

в 13й строчке кода "DEC" что означает? 

 

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Posol88 пишет:
в 13й строчке кода "DEC" что означает?

Ну матьтваю, ну прям на этом же сайте написано 

http://arduino.ru/Reference/Serial/Print

Posol88
Offline
Зарегистрирован: 14.11.2019

andriano пишет:

Ну ведь вопрос явно не для этого форума.

конечно. ведь за значением жаргонного слова программистов явно к сантехникам обращаться нужно.

пришел тут... фигню всякую спрашивает))

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Posol88 пишет:

пришел тут... фигню всякую спрашивает))

Реально так.  И даже хуже. 

Posol88
Offline
Зарегистрирован: 14.11.2019

DetSimen пишет:

 на этом же сайте написано 

http://arduino.ru/Reference/Serial/Print

спасибо) выходит этот указатель нужен только для монитора порта, если мне просто нужно присвоить считываемое значение переменной, его указывать не нужно. я правильно понял? 

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Во-первых, где ты тут чо присваиваешь? 

Serial.print(readEEPROM(disk1, address), DEC);

Во-вторых, может потратишь своё время на изучение матчасти, а не наше, чтоб отвечать на идиотские вопросы? 

Posol88
Offline
Зарегистрирован: 14.11.2019

DetSimen пишет:

Во-первых, где ты тут чо присваиваешь? 

Serial.print(readEEPROM(disk1, address), DEC);

Во-вторых, может потратишь своё время на изучение матчасти, а не наше, чтоб отвечать на идиотские вопросы? 

не тут. это код примера. присваиваю я вот тут:

#define CLK 2
#define DT 3
#define SW 12
#define RST A0
#define CLK_rts A2
#define DAT A1
#define ventilation 6  
#define heater 5
#define FILTER_STEP 2021
#define disk1 0x50
#include <LiquidCrystal_I2C_OLED.h>
#include <Servo.h>                                                                         
#include <iarduino_RTC.h>                                                                  
#include "GyverEncoder.h"
#include "iarduino_DHT.h"
#include <Wire.h>                                                                          
Encoder enc1(CLK, DT, SW,2);
iarduino_DHT sensor(A3);                                                                   
LiquidCrystal_I2C lcd(0x27, 16, 2);
Servo servo;                                                                              
iarduino_RTC Time (RTC_DS1302, RST, CLK_rts, DAT);                                                        //назначение пинов обмена данными RST, CLK, DAT
int hours1=0, hours2=0, hours3=0, minutes1=0, minutes2=0, minutes3=0,seconds1=0, seconds2=0,seconds3=0,pos = 0;                             //переменная хранящая угол поворота сервопривода
unsigned int address=0,address1=8,address2=15,address3=36,address4=68,address5=90;                                                                                           
unsigned long filter_timer,filter_timer2,TimeWork,TimsWorker=4710ul,home_timerMenu,userTemp=15ul,userHum=70ul,val_humidity,val_temperature,humidity,temperature;  

boolean qr=true,QR=true,W2=false,W3=false,w;                                                                                      
boolean statusVent=digitalRead(ventilation);
boolean statusHeat=digitalRead(heater);
byte  c = 1, menu=1;
byte line_2[8] = 
{
 B00010, 
 B10101,
 B10101,
 B01110,
 B00100,
 B00100,
 B00100,
};
byte line_1[8] = 
{
 B00100, 
 B01010,
 B00100,
 B00000,
 B00000,
 B00000,
 B00000,
};
byte line_3[8] = 
{
 B11000, 
 B01100,
 B00110,
 B00111,
 B00110,
 B01100,
 B11000,
};
byte line_4[8] = 
{
 B00000, 
 B01100,
 B10010,
 B10000,
 B10000,
 B10010,
 B01100,
};
void setup() {
  delay(300);                                                  //время на подумать
  Time.begin();                                                //инициализация работы часов
  Wire.begin();
  //Serial.begin(9600);
  pinMode(ventilation,OUTPUT);
  pinMode(heater,OUTPUT);
  digitalWrite(ventilation,HIGH);
  digitalWrite(heater, HIGH);  
  attachInterrupt(1, encoder, CHANGE);
  attachInterrupt(0, encoder, CHANGE);
  lcd.init();                                                  //инициализация работы дисплея
  enc1.setTickMode(AUTO);
  servo.attach(6);                                             //назначение пина управления сервоприводом
  filter_timer=millis();
  filter_timer2=millis();
  //Time.settime(00,30,21,15,3,2021,1);                           // 0  сек, 51 мин, 21 час, 27, октября, 2015 года, вторник
   lcd.createChar(1,line_1);
   lcd.createChar(2,line_2);
   lcd.createChar(3,line_3);
   lcd.createChar(4,line_4);
  hours1  =readEEPROM(disk1, address );
  minutes1=readEEPROM(disk1, address1);
  seconds1=readEEPROM(disk1, address2);
  hours2  =readEEPROM(disk1, address3);
  minutes2=readEEPROM(disk1, address4);
  seconds2=readEEPROM(disk1, address5);
  
}
void loop() {
  Time.period(5);
  enc1.tick();  
  if (enc1.isTurn()){lcd.backlight();home_timerMenu = millis();QR=false;w=true;lcd.clear();                          
 switch (menu){ 
   case 1: if(w==true){         
             lcd.setCursor(1,0);lcd.print("t");lcd.write(1);lcd.setCursor(3,0);lcd.print(val_temperature);lcd.write(4);lcd.write(1);lcd.setCursor(8,0);lcd.print(Time.gettime("H:i:s"));
             lcd.setCursor(1,1);lcd.write(2);lcd.setCursor(3,1);lcd.print(val_humidity);w=false;} break;                        
   case 2: if(w==true){       
             lcd.setCursor(0,0);lcd.write(3);lcd.setCursor(1,0);lcd.print("t");lcd.write(1);lcd.setCursor(3,0);lcd.print(userTemp);lcd.write(4);lcd.write(1);lcd.setCursor(8,0);lcd.print("users");
             lcd.setCursor(1,1);lcd.write(2);lcd.setCursor(3,1);lcd.print(userHum);lcd.print("%");lcd.setCursor(8,1);lcd.print("users");w=false;} break;                   
   case 3: if(w==true){         
             lcd.setCursor(1,0);lcd.print("t");lcd.write(1);lcd.setCursor(3,0);lcd.print(userTemp);lcd.write(4);lcd.write(1);lcd.setCursor(8,0);lcd.print("users");
             lcd.setCursor(0,1);lcd.write(3);lcd.setCursor(1,1);lcd.write(2);lcd.setCursor(3,1);lcd.print(userHum);lcd.print("%");lcd.setCursor(8,1);lcd.print("users");w=false;}break;
   
   case 4: if(w==true){         
              lcd.setCursor(0,0);lcd.write(3);lcd.setCursor(1,0);lcd.print(hours1);lcd.setCursor(5,0);lcd.print(minutes1);lcd.setCursor(9,0);lcd.print(seconds1);
              lcd.setCursor(1,1);lcd.print(hours2);lcd.setCursor(5,1);lcd.print(minutes2);lcd.setCursor(9,1);lcd.print(seconds2); w=false;}break;                     
   
   case 5: if(w==true){         
              lcd.setCursor(1,0);lcd.print(hours1);lcd.setCursor(4,0); lcd.write(3);lcd.setCursor(5,0);lcd.print(minutes1);lcd.setCursor(9,0);lcd.print(seconds1);
              lcd.setCursor(1,1);lcd.print(hours2);lcd.setCursor(5,1);lcd.print(minutes2);lcd.setCursor(9,1);lcd.print(seconds2);w=false;}break; 

   case 6: if(w==true){         
              lcd.setCursor(1,0);lcd.print(hours1);lcd.setCursor(5,0);lcd.print(minutes1);lcd.setCursor(8,0);lcd.write(3);lcd.setCursor(9,0);lcd.print(seconds1);
              lcd.setCursor(1,1);lcd.print(hours2);lcd.setCursor(5,1);lcd.print(minutes2);lcd.setCursor(9,1);lcd.print(seconds2); w=false;}break;
               
   
   case 7: if(w==true){         
              lcd.setCursor(1,0);lcd.print(hours1);lcd.setCursor(5,0);lcd.print(minutes1);lcd.setCursor(9,0);lcd.print(seconds1);
              lcd.setCursor(0,1);lcd.write(3);lcd.setCursor(1,1);lcd.print(hours2);lcd.setCursor(5,1);lcd.print(minutes2);lcd.setCursor(9,1);lcd.print(seconds2); w=false;}break;                     
   
   case 8: if(w==true){         
              lcd.setCursor(1,0);lcd.print(hours1);lcd.setCursor(5,0);lcd.print(minutes1);lcd.setCursor(9,0);lcd.print(seconds1);
              lcd.setCursor(1,1);lcd.print(hours2);lcd.setCursor(4,1); lcd.write(3);lcd.setCursor(5,1);lcd.print(minutes2);lcd.setCursor(9,1);lcd.print(seconds2);w=false;}break;   

   case 9: if(w==true){         
              lcd.setCursor(1,0);lcd.print(hours1);lcd.setCursor(5,0);lcd.print(minutes1);lcd.setCursor(9,0);lcd.print(seconds1);
              lcd.setCursor(1,1);lcd.print(hours2);lcd.setCursor(5,1);lcd.print(minutes2);lcd.setCursor(8,1); lcd.write(3);lcd.setCursor(9,1);lcd.print(seconds2);w=false;}break;
  
   case 10:  lcd.setCursor(1,0);lcd.print("DokopM");lcd.write(3);lcd.setCursor(10,1);lcd.print(TimsWorker);
          switch (c){
                case 1:             
                        lcd.setCursor(8,0);lcd.print("Experemen");break;
                                                          
                case 2:             
                        lcd.setCursor(8,0);lcd.print("1/2");break;
                                                                      
                case 3:            
                        lcd.setCursor(8,0);lcd.print("Doza");break;
                                                                    
                        }break;
    case 11: if(w==true){lcd.setCursor(0,1);lcd.write(3);lcd.setCursor(2,1);lcd.print("TimsWork");lcd.setCursor(10,1);lcd.print(TimsWorker);w=false;}break;
  }                          
  }


  enc1.tick();
  if(enc1.isClick()){if (menu==8){if(c==1) {servoOpen();servoToClose();             }
                                  if(c==2) {W2=true;servoOpen();TimeWork = millis();}
                                  if(c==3) {W3=true;servoOpen();TimeWork = millis();}
                                  }}
  
    
  if (W2==true &&millis()-TimeWork>=TimsWorker/2)  {servoToClose();TimeWork=0;W2=false;}
  if (W3==true &&millis()-TimeWork>=TimsWorker  )  {servoToClose();TimeWork=0;W3=false;}
    if (millis()- home_timerMenu>=30000&&QR==false){lcd.noBacklight();home_timerMenu=0;QR=true;menu=1;}
 
  if (menu==1){if (millis() - filter_timer2 > 1000ul) { lcd.clear();
                                                       lcd.setCursor(1,0);lcd.print("t");lcd.write(1);lcd.setCursor(3,0);lcd.print(val_temperature);lcd.write(4);lcd.write(1);lcd.setCursor(8,0);lcd.print(Time.gettime("H:i:s"));
                                                       lcd.setCursor(1,1);lcd.write(2);lcd.setCursor(3,1);lcd.print(val_humidity);filter_timer2=millis();}}   

  Time.gettime();         
  if (qr == true && Time.Hours == hours1 && Time.minutes == minutes1 && Time.seconds == seconds1) {
      qr = false;QR=false;TimeWork = millis();home_timerMenu=millis();lcd.backlight();servoOpen();}  
           
  if (qr == true && Time.Hours == hours2 && Time.minutes == minutes2 && Time.seconds == seconds2) {                 
      qr = false;QR=false;TimeWork = millis();home_timerMenu=millis();lcd.backlight();servoOpen();}                                                                              //присвоить переменной значение false
 
  if (qr == true && Time.Hours == hours3 && Time.minutes == minutes3 && Time.seconds == seconds3) {                 
      qr = false;QR=false;TimeWork = millis();home_timerMenu=millis();lcd.backlight();servoOpen();}    
  enc1.tick();         
  if (millis() - TimeWork >= TimsWorker && qr == false) {  
      qr = true;servoToClose();}                                                                                      //выполнить функцию
       
  if (val_humidity    - userHum     > 10  && statusVent == LOW ){
     digitalWrite (ventilation,HIGH);}
                
  if (userHum     - val_humidity    > 10  && statusVent == HIGH){
     digitalWrite (ventilation,LOW);}
                 
  if (userTemp    - val_temperature > 4   && statusHeat == LOW ){
     digitalWrite (heater,HIGH);}
    
  if (val_temperature - userTemp    > 4   && statusHeat == HIGH){
     digitalWrite (heater,LOW);}
    
  if (TimsWorker>20000){TimsWorker=20000;}
  if (TimsWorker<785){TimsWorker=785;}
  if (millis() - filter_timer > FILTER_STEP) {filter_timer = millis();
    switch(sensor.read()){
          case DHT_OK:humidity=sensor.hum; temperature=sensor.tem;
               val_humidity=(val_humidity*5 + humidity)/6;
               val_temperature=(val_temperature*5 + temperature)/6; break;                    
                      
          default:lcd.setCursor(8,1);lcd.print("ERROR");break;}
  }           
}
void writeEEPROM(int deviceaddress, unsigned int eeaddress, byte data ) 
{
  Wire.beginTransmission(deviceaddress);
  Wire.write((int)(eeaddress >> 8));   // MSB
  Wire.write((int)(eeaddress & 0xFF)); // LSB
  Wire.write(data);
  Wire.endTransmission();
 
  delay(5);
}
 
byte readEEPROM(int deviceaddress, unsigned int eeaddress ) 
{
  byte rdata = 0xFF;
 
  Wire.beginTransmission(deviceaddress);
  Wire.write((int)(eeaddress >> 8));   // MSB
  Wire.write((int)(eeaddress & 0xFF)); // LSB
  Wire.endTransmission();
 
  Wire.requestFrom(deviceaddress,1);
 
  if (Wire.available()) rdata = Wire.read();
 
  return rdata;
}
void servoOpen() {                                                                                  //создать функцию  
  for (pos = 90; pos >= 0; pos -= 1) {                                                               //оператор:если переменная pos ровна 90 то: это больше или ровно 0?: если да то отнять от значения переменной pos единицу и выполнить функцию
    servo.write(pos);                                                                                //повернуть вал сервопривода на градус равный значению переменной pos
    delay(5);}                                                                                        //перерыв в работе 0.005сек
    lcd.setCursor(2,1);
    lcd.print("OPEN");
  }
void servoToClose() {                                                                               //создать функцию
  for (pos = 0; pos <= 90; pos += 1) {servo.write(pos);delay(5);}    
  servoDo();
}
void servoDo() {
  for (pos = 90; pos >= 88; pos -= 1) {servo.write(pos);delay(5);}                            
  lcd.setCursor(2,1);
  lcd.print("CLOSE ");
}
void encoder (){
  if (enc1.isRight()){menu++;if(menu>11){menu=11;}}
  if (enc1.isLeft()){menu--;if(menu<1){menu=1;}}
  switch (menu){ 
            case 1:
                   break;    
            case 2:  
                   if (enc1.isRightH()){userTemp++;}  // если было удержание + поворот
                   if (enc1.isLeftH()) {userTemp--;} // если было удержание + поворот
                              break;
            case 3:  
                   if (enc1.isRightH()){userHum++;}  // если было удержание + поворот
                   if (enc1.isLeftH()) {userHum--;} // если было удержание + поворот
                              break;
             case 4:  
                   if (enc1.isRightH()){ hours1++;if(hours1>23){hours1=0;}writeEEPROM(disk1, address, hours1);}         // если было удержание + поворот
                   if (enc1.isLeftH()) { hours1--;if(hours1<0){hours1=23;}writeEEPROM(disk1, address, hours1);}         // если было удержание + поворот
                              break; 
             case 5:
                   if (enc1.isRightH()){ minutes1++;if(minutes1>59){minutes1=0;}writeEEPROM(disk1, address1, minutes1);}
                   if (enc1.isLeftH()) { minutes1--;if(minutes1<0){minutes1=59;}writeEEPROM(disk1, address1, minutes1);}         
                              break;
             case 6:
                   if (enc1.isRightH()){ seconds1++;if(seconds1>59){seconds1=0;}writeEEPROM(disk1, address2, seconds1);}
                   if (enc1.isLeftH()) { seconds1--;if(seconds1<0){seconds1=59;}writeEEPROM(disk1, address2, seconds1);}         
                              break;
             
             case 7:  
                   if (enc1.isRightH()){ hours2++;if(hours2>23){hours2=0;}writeEEPROM(disk1, address3, hours2);}          // если было удержание + поворот
                   if (enc1.isLeftH()) { hours2--;if(hours2<0){hours2=23;}writeEEPROM(disk1, address3, hours2);}          // если было удержание + поворот
                              break; 
             case 8:
                   if (enc1.isRightH()){ minutes2++;if(minutes2>59){minutes2=0;}writeEEPROM(disk1, address4, minutes2);}
                   if (enc1.isLeftH()) { minutes2--;if(minutes2<0){minutes2=59;}writeEEPROM(disk1, address4, minutes2);}         
                              break;
             
             case 9:
                   if (enc1.isRightH()){ seconds2++;if(seconds2>59){seconds2=0;}writeEEPROM(disk1, address5, seconds2);}
                   if (enc1.isLeftH()) { seconds2--;if(seconds2<0){seconds2=59;}writeEEPROM(disk1, address5, seconds2);}         
                              break;
             
             case 10: enc1.tick();    
                     if(enc1.isRightH()){c++; if(c>3)c=3;}
                     if(enc1.isLeftH ()){c--; if(c<1)c=1;}          
                              break;
             case 11:if(enc1.isRightH()){TimsWorker+=785ul;}
                    if(enc1.isLeftH ()){TimsWorker-=785ul;}
            }}

в строчках с 268й по 287ю. просто делаю 1в1 как в примере, а код виснет вместо того что бы записать. вот и ищу где налажал

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Posol88 пишет:

в 13й строчке кода "DEC" что означает? 

А в первой строчке "#включить <Wire.h>" что означает?

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Нет. Коррекционная педагогика - сегодня вапще не моё, у мня внучка родилась в 4:09.  Наданапицца. 

Posol88
Offline
Зарегистрирован: 14.11.2019

ЕвгенийП пишет:

А в первой строчке "#включить <Wire.h>" что означает?

это переводчик перевел. пример с сайта, а я английский очень плохо знаю, по этому пользуюсь переводчиком

 

Posol88
Offline
Зарегистрирован: 14.11.2019

DetSimen пишет:

Нет. Коррекционная педагогика - сегодня вапще не моё, у мня внучка родилась в 4:09.  Наданапицца. 

примите мои поздравления!

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Posol88 пишет:
за значением жаргонного слова программистов

https://www.forum-volgograd.ru/threads/21514/

Скажите пожалуйста, за что нынче в гугле банят? За политику? Или порнушку слишком активно искал?

Rumata
Rumata аватар
Offline
Зарегистрирован: 29.03.2019

Очень жирный тролль. Совсем толстый и беспонтовый. Предлагаю забанить нах. 

 

Posol88
Offline
Зарегистрирован: 14.11.2019

ЕвгенийП пишет:

Posol88 пишет:
за значением жаргонного слова программистов

https://www.forum-volgograd.ru/threads/21514/

Скажите пожалуйста, за что нынче в гугле банят? За политику? Или порнушку слишком активно искал?

я Вас понял)))) корень  -  это корневая папка получается (а не фаил, как я думал) 

по выше указанной ссылке много веселого, особенно "Сантехника - оборудование от Sun Microsystems Computer Corporation;" но про корень не написано)

nik182
Offline
Зарегистрирован: 04.05.2015

DetSimen пишет:

Нет. Коррекционная педагогика - сегодня вапще не моё, у мня внучка родилась в 4:09.  Наданапицца. 

Поздравляю!!! Это которая по счёту? Скольки раз ты уже дед?

b707
Offline
Зарегистрирован: 26.05.2017

Posol88 пишет:

это переводчик перевел. пример с сайта, а я английский очень плохо знаю, по этому пользуюсь переводчиком

 

Посол, вы эту тему уже мучаете полтора года - а прогресса никакого, как были дерево - так только в пень и превратились.  Еще и английского не знаете. хотя базовый уровень за это время можно было выучить...

Может хватит уже?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Posol88 пишет:

это переводчик перевел. пример с сайта, а я английский очень плохо знаю, по этому пользуюсь переводчиком

Это-то я понял, а в коде зачем так оставлять.

Попытайтесь понять, сюда нужно выкладывать ИМЕННО ТОТ код, с которым у Вас проблемы. Повторяю для альтернативно понятливых: ну, вот совсем тот самый код, прямо копипастом из IDE и никакой другой!

Если же у Вас не работает один код, а сюда Вы выложили другой (как в данном случае), то, не знаю как остальные, но я расцениваю это как издевательство: я потрачу своё время на разбор кода, чтобы Вы мне потом сказали: "Да нет, эти ошибки не при делах, т.к. реально у меня код другой". И как Вы думаете, куда я Вас после такого пошлю?  Вы это понимаете?

Posol88
Offline
Зарегистрирован: 14.11.2019

Posol88 пишет:

 код виснет вместо того что бы записать. вот и ищу где налажал

так и не нашел

b707
Offline
Зарегистрирован: 26.05.2017

Posol88 пишет:

так и не нашел

с вашими знаниями и не найдете. разве что кто-то носом ткнет.

Скажите. зачем вам внешняя ЕЕПРОМ? встроенной мало?

Posol88
Offline
Зарегистрирован: 14.11.2019

ЕвгенийП пишет:

Posol88 пишет:

это переводчик перевел. пример с сайта, а я английский очень плохо знаю, по этому пользуюсь переводчиком

Это-то я понял, а в коде зачем так оставлять.

Попытайтесь понять, сюда нужно выкладывать ИМЕННО ТОТ код, с которым у Вас проблемы. Повторяю для альтернативно понятливых: ну, вот совсем тот самый код, прямо копипастом из IDE и никакой другой!

Если же у Вас не работает один код, а сюда Вы выложили другой (как в данном случае), то, не знаю как остальные, но я расцениваю это как издевательство: я потрачу своё время на разбор кода, чтобы Вы мне потом сказали: "Да нет, эти ошибки не при делах, т.к. реально у меня код другой". И как Вы думаете, куда я Вас после такого пошлю?  Вы это понимаете?

дело было так - нашел я образец по которому делать. повторил его , поигрался с разными значениями и типами переменных - все работает.(и записывает и считывает)  адаптировал в свой код - не работает. помучал его, поискал отличия от образца - не нашел почти. кроме того что в образце функцией" readEEPROM(disk1, address), DEC;" значение выводится в порт, а у меня оно присваивается переменной "hours1  =readEEPROM(disk1, address );" стал перебирать по пунктам все что происходит. дошел до "DEC" и понял, что вроде как кроме этого момента все понятно, а тут нет. ну думаю ладно... грузить форумчан своим огромным кодом... кому он там нужен еще копаться в нем, я там такого понаписал, половина слов на английском не правильно написаны. Вот и решил спросить то что было не понятно, с надеждой найти ключ к проблеме в своем коде самостоятельно.

Posol88
Offline
Зарегистрирован: 14.11.2019

b707 пишет:

Скажите. зачем вам внешняя ЕЕПРОМ? встроенной мало?

у внешней жизнеспособность больше . ето раз

я их 5 штук купил. етодва

давно хотел ее победить, мне показалось - время пришло. ето три. вот

b707
Offline
Зарегистрирован: 26.05.2017

Posol88 - совет. НИКОГДА не переводите исходный код программы гугло переводчиком. Гугл не понимает. где операторы. а где комментарии. получается полная каша. в которой и опытный программист не разберется. И вам этот перевод для понимания не дает ничего.

b707
Offline
Зарегистрирован: 26.05.2017

Posol88 пишет:

я их 5 штук купил. етодва

каких конкретно, точное обозначение можете дать?

Posol88
Offline
Зарегистрирован: 14.11.2019

b707 пишет:

прогресса никакого, как были дерево - так только в пень и превратились.  Еще и английского не знаете. хотя базовый уровень за это время можно было выучить...

прогресс конечно ни как у студента МГУ , с интересом к знаниям, но он есть. даже уровень знания английского языка растёт. Если бы я в этом жил с этим работал - конечно бы разбирался лучше, но пока что это хобби

а не ошибается только тот - кто ни чего не делает.

Posol88
Offline
Зарегистрирован: 14.11.2019

b707 пишет:

каких конкретно, точное обозначение можете дать?

atmel536 24C256 .PI27 B

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Posol88 пишет:

дело было так ... Вот и решил

И своим решением заставили человека (пост #657) анализировать совершенно левый код и писать Вам замечание, которое Вы тут же отмели, т.к. код левый. Этот как раз то, что я Вам пытаюсь объяснить.

Что же касается Вашего "огромного кода". Ешьте слона по частям! Отлаживайте маленькие куски! Я всегда так делаю, хотя программирую уже более сорока лет!

b707
Offline
Зарегистрирован: 26.05.2017

посмотрел, вы что. охренели? у вас же половина программы засунута в прерывания по энкодеру. В том числе и запись на ЕЕПРОМ, которая сама использует прерывания. Конечно это будет виснуть.

В процедуре encoder() необходимо только считать тики энкодера. то есть буквально в ней должно быть пара строк.

Я вам год назад писал - ну читайте же книжки! А вы все как обезьяна с гранатой - то туда повернете, то сюда, а толку ноль. Если нет способностей - займитесь чем-то другим

Posol88
Offline
Зарегистрирован: 14.11.2019

b707 пишет:

половина программы засунута в прерывания по энкодеру. В том числе и запись на ЕЕПРОМ, которая сама использует прерывания. Конечно это будет виснуть.

понял, сейчас попробую исправить. а вот то что ЕЕПРОМ для записи прерывания использует - не знал и даже не догадывался... 

b707
Offline
Зарегистрирован: 26.05.2017

Posol88 пишет:

понял, сейчас попробую исправить. а вот то что ЕЕПРОМ для записи прерывания использует - не знал и даже не догадывался... 

выкидывайте из прерываний все, все свои бесконечные путанные if-ы. и не имейте привычки набивать прерывания ерундой.

Все это должно быть в ЛУПЕ.

 

Posol88
Offline
Зарегистрирован: 14.11.2019

ЕвгенийП пишет:

 заставили человека (пост #657) анализировать совершенно левый код и писать Вам замечание, которое Вы тут же отмели, т.к. код левый.

ЕвгенийП, прости пожалуйста засранца)). я был искренен в своих заблуждениях.

все осознал больше такого не повторится.

Posol88
Offline
Зарегистрирован: 14.11.2019

b707 пишет:

выкидывайте из прерываний все, все свои бесконечные путанные if-ы. 

а вот так тоже плохо?

void encoder (){
  if (enc1.isRight()){menu++;}
  if (enc1.isLeft()){menu--;}
  switch (menu){ 
            case 1:
                   break;    
            case 2:  
                   if (enc1.isRightH()){userTemp++;}  
                   if (enc1.isLeftH()) {userTemp--;} 
                              break;
            case 3:  
                   if (enc1.isRightH()){userHum++;}  
                   if (enc1.isLeftH()) {userHum--;} 
                              break;
             case 4:  
                   if (enc1.isRightH()){ hours1++;}         
                   if (enc1.isLeftH()) { hours1--;}         
                              break; 
             case 5:
                   if (enc1.isRightH()){ minutes1++;}
                   if (enc1.isLeftH()) { minutes1--;}         
                              break;
             case 6:
                   if (enc1.isRightH()){ seconds1++;}
                   if (enc1.isLeftH()) { seconds1--;}         
                              break;
             
             case 7:  
                   if (enc1.isRightH()){ hours2++;}          
                   if (enc1.isLeftH()) { hours2--;}          
                              break; 
             case 8:
                   if (enc1.isRightH()){ minutes2++;}
                   if (enc1.isLeftH()) { minutes2--;}         
                              break;
             
             case 9:
                   if (enc1.isRightH()){ seconds2++;}
                   if (enc1.isLeftH()) { seconds2--;}         
                              break;
             
             case 10: enc1.tick();    
                     if(enc1.isRightH()){c++;} 
                     if(enc1.isLeftH ()){c--;}          
                              break;
             case 11:if(enc1.isRightH()){TimsWorker+=785ul;}
                    if(enc1.isLeftH ()){TimsWorker-=785ul;}
            }}

 

b707
Offline
Зарегистрирован: 26.05.2017

внутри прерывания по энкодеру делаем еще один enc1.tick(); ???

это какой-то особый вывих мозга.

 

Да и сама логика кода просто из психолечебницы. В строчках 2 и 3 приведенного фрагмента у вас поворот энкодера перемещает вас в новый раздел меню. ВСЕГДА И этот же поворот меняет в новом разделе параметр? - это же бред.

Пример -представьте, что мне нужно поменять минуту более чем на единицу... вы поворачиваете энкодер - минута меняется на один и система сама перескакивает в следующее меню. Вы возвращаетесь обратно - но при этому у вас минута автоматически уменьшается... Это не меню, а инструмент издевательств какой-то

 

Посол, вы все время игнорируете вопрос - ЗАЧЕМ ВЫ ЗАНИМАЕТЕСЬ ТЕМ, К ЧЕМУ У ВАС НЕТ НИ МАЛЕЙШИХ СПОСОБНОСТЕЙ???

 

 

Posol88
Offline
Зарегистрирован: 14.11.2019

b707 пишет:

внутри прерывания по энкодеру делаем еще один enc1.tick(); ???

это какой-то особый вывих мозга.

в первых вариантах программы - прерываний не было... и энкодер то и дело не срабатывал

  потом пришел к выводу о необходимости использования прерываний, но накосячил с именами переменных из-за чего, опять появились задержки  и я напихал тиков во все места, до куда только дотянулся. затем разобрался с причиной, а поудалял но не все и не везде... 

Posol88
Offline
Зарегистрирован: 14.11.2019

b707 пишет:

поворот энкодера перемещает вас в новый раздел меню. ВСЕГДА И этот же поворот меняет в новом разделе параметр? 

нет. там в строчках 2 и 3 enc1.isRight() это просто поворот

а в switch                         enc1.isRightH() это поворот с нажатием

Posol88
Offline
Зарегистрирован: 14.11.2019

b707 пишет:

 ЗАЧЕМ ВЫ ЗАНИМАЕТЕСЬ ТЕМ, К ЧЕМУ У ВАС НЕТ НИ МАЛЕЙШИХ СПОСОБНОСТЕЙ???

мне нравится. это хороший способ не дать мозгу прокиснуть. и к тому же это интересно

 

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Посол, ты уже продай все это нахрен, купи себе пива ящег, и забуть все эти микроконтроллеры какстрашныйсон. Лиарьна, это не твое. 

А мозгу не давай закиснуть вычисляя НДС в уме,  када вотку покупаешь.

Posol88
Offline
Зарегистрирован: 14.11.2019

DetSimen пишет:

Посол, ты уже продай все это нахрен, купи себе пива ящег, и забуть все эти микроконтроллеры какстрашныйсон. Лиарьна, это не твое. 

А мозгу не давай закиснуть вычисляя НДС в уме,  када вотку покупаешь.

настоящих гениев всегда недооценивают))

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Posol88 пишет:

настоящих гениев всегда недооценивают))

Это - да! Тут хрен поспоришь.

Kakmyc
Offline
Зарегистрирован: 15.01.2018

Клоун ты а не посол.

Энкодер нужно как то так описывать:

//Это в прерываниии
void encoder(){
digitalRead(encoderA)==digitalRead(encoderB)?tick=1:tick=-1;
}

//А это в loop:
if(tick){
myValue+=tick;
tick=0;
}

 

Posol88
Offline
Зарегистрирован: 14.11.2019

Kakmyc пишет:

Клоун ты а не посол.

посол - это по тому что меня обычно проще послать чем закончить разговор.

но я над этим работаю.

Kakmyc пишет:

Энкодер нужно как то так описывать:

//Это в прерываниии
void encoder(){
digitalRead(encoderA)==digitalRead(encoderB)?tick=1:tick=-1;
}

//А это в loop:
if(tick){
myValue+=tick;
tick=0;
}

пойду искать что означают "?"и":"

Вот еще один повод узнать что то новое)

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Posol88 пишет:

пойду искать что означают "?"и":"

Вот еще один повод узнать что то новое)

А может это ещё один повод просто взять какую-нибудь книжку по языку (хоть тоненькую) и прочитать полностью?

Posol88
Offline
Зарегистрирован: 14.11.2019

ЕвгенийП пишет:

А может это ещё один повод просто взять какую-нибудь книжку по языку (хоть тоненькую) и прочитать полностью?

одно другого не исключает)) вообще я начинал читать, но почему то не закончил

Posol88
Offline
Зарегистрирован: 14.11.2019

Kakmyc пишет:

digitalRead(encoderA)==digitalRead(encoderB)

ни разу не могу понять, что имеется ввиду  под "encoderA" и "encoderB"

не пины же ,на которые посажен энкодер, в самом деле...

b707
Offline
Зарегистрирован: 26.05.2017

Posol88 пишет:

[ни разу не могу понять, что имеется ввиду  под "encoderA" и "encoderB"

не пины же ,на которые посажен энкодер, в самом деле...

это троллинг очередной? что это может быть еще, кроме пинов?

 

Posol88
Offline
Зарегистрирован: 14.11.2019

b707 пишет:

что это может быть еще, кроме пинов?

просто я библиотеку использовал всегда... и не задумывался о работе напрямую...

Rumata
Rumata аватар
Offline
Зарегистрирован: 29.03.2019

Артель "Напрасный труд"

Posol88
Offline
Зарегистрирован: 14.11.2019

Kakmyc пишет:

Клоун ты а не посол.

Энкодер нужно как то так описывать:

//Это в прерываниии
void encoder(){
digitalRead(encoderA)==digitalRead(encoderB)?tick=1:tick=-1;
}

//А это в loop:
if(tick){
myValue+=tick;
tick=0;
}

 

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

но получилось неочень - дребезгов много меньше, но все равно есть, а в первом варианте(когда все в прерывании было) работало четко без проблем. новый вариант :


#define CLK 2
#define DT 3
#define SW 12
#define RST A0
#define CLK_rts A2
#define DAT A1
#define ventilation 6  
#define heater 5
#define FILTER_STEP 3000
#define disk1 0x50
#include <LiquidCrystal_I2C_OLED.h>
#include <Servo.h>                                                                         
#include <iarduino_RTC.h>                                                                  
#include "GyverEncoder.h"
#include "iarduino_DHT.h"
#include <Wire.h>                                                                          
Encoder enc1(CLK, DT, SW,2);
iarduino_DHT sensor(A3);                                                                   
LiquidCrystal_I2C lcd(0x27, 16, 2);
Servo servo;                                                                              
iarduino_RTC Time (RTC_DS1302, RST, CLK_rts, DAT); //назначение пинов обмена данными RST, CLK, DAT
int hours1=0,h1, hours2=0,h2,  minutes1=0,m1, minutes2=0,m2, seconds1=0,s1, seconds2=0,s2,T1, pos = 0,/*hours3=0,h3, minutes3=0,m3,seconds3=0,s3*/ ;  
unsigned int address=0,address1=10,address2=20,address3=30,address4=40,address5=50,address6=60,address7=70,address8=80,address9=90;                                                                                           
unsigned long filter_timer,filter_timer2,TimeWork,TimsWorker=2000,home_timerMenu,userTemp=15ul,userHum=70ul,val_humidity,val_temperature,humidity,temperature;  
int  ench=0,enc=0,yearT;
boolean qr=true,QR=true,W2=false,W3=false,w;                                                                                      
boolean statusVent=digitalRead(ventilation);
boolean statusHeat=digitalRead(heater);
byte  c = 1, menu=1,secT,minT,hoursT,dayT,monthT,weekdayT;
byte line_2[8] = 
{
 B00010, 
 B10101,
 B10101,
 B01110,
 B00100,
 B00100,
 B00100,
};
byte line_1[8] = 
{
 B00100, 
 B01010,
 B00100,
 B00000,
 B00000,
 B00000,
 B00000,
};
byte line_3[8] = 
{
 B11000, 
 B01100,
 B00110,
 B00111,
 B00110,
 B01100,
 B11000,
};
byte line_4[8] = 
{
 B00000, 
 B01100,
 B10010,
 B10000,
 B10000,
 B10010,
 B01100,
};
void setup() {
  delay(300);                                                  
  Time.begin();                                                
  Serial.begin(9600);
  Wire.begin();  
  pinMode(ventilation,OUTPUT);
  pinMode(heater,OUTPUT);
  digitalWrite(ventilation,HIGH);
  digitalWrite(heater, HIGH);  
  attachInterrupt(1, encoder, CHANGE);
  attachInterrupt(0, encoder, CHANGE);
  lcd.init();                                                  
  enc1.setTickMode(AUTO);
  servo.attach(6);                                             
  filter_timer=millis();
  filter_timer2=millis();
  
   lcd.createChar(1,line_1);
   lcd.createChar(2,line_2);
   lcd.createChar(3,line_3);
   lcd.createChar(4,line_4);
  hours1    =readEEPROM(disk1, address );h1 =    hours1;
  minutes1  =readEEPROM(disk1, address1);m1 =  minutes1;
  seconds1  =readEEPROM(disk1, address2);s1 =  seconds1;
  hours2    =readEEPROM(disk1, address3);h2 =    hours2;
  minutes2  =readEEPROM(disk1, address4);m2 =  minutes2;
  seconds2  =readEEPROM(disk1, address5);s2 =  seconds2;
  //hours3    =readEEPROM(disk1, address6);h3 =    hours3;
  //minutes3  =readEEPROM(disk1, address7);m3 =  minutes3;
  //seconds3  =readEEPROM(disk1, address8);s3 =  seconds3;
  TimsWorker=readEEPROM(disk1, address9);T1= TimsWorker;
}
void loop() {
Time.period(5);

if (enc1.isTurn()){lcd.backlight();home_timerMenu = millis();QR=false;w=true;                          
 switch (menu){ 
   case 1: if(w==true){lcd.clear();         
             lcd.setCursor(1,0);lcd.print("t");lcd.write(1);lcd.setCursor(3,0);lcd.print(val_temperature);lcd.write(4);lcd.write(1);lcd.setCursor(8,0);lcd.print(Time.gettime("H:i:s"));
             lcd.setCursor(1,1);lcd.write(2);lcd.setCursor(3,1);lcd.print(val_humidity);w=false;} break;                        
   
   case 2: if(w==true){lcd.clear();      
             lcd.setCursor(0,0);lcd.write(3);lcd.setCursor(1,0);lcd.print("t");lcd.write(1);lcd.setCursor(3,0);lcd.print(userTemp);lcd.write(4);lcd.write(1);lcd.setCursor(8,0);lcd.print("users");
             lcd.setCursor(1,1);lcd.write(2);lcd.setCursor(3,1);lcd.print(userHum);lcd.print("%");lcd.setCursor(8,1);lcd.print("users");w=false;}
                                              
   case 3: if(w==true){lcd.clear();         
             lcd.setCursor(1,0);lcd.print("t");lcd.write(1);lcd.setCursor(3,0);lcd.print(userTemp);lcd.write(4);lcd.write(1);lcd.setCursor(8,0);lcd.print("users");
             lcd.setCursor(0,1);lcd.write(3);lcd.setCursor(1,1);lcd.write(2);lcd.setCursor(3,1);lcd.print(userHum);lcd.print("%");lcd.setCursor(8,1);lcd.print("users");w=false;}break;
   
   case 4: if(w==true){lcd.clear();         
              lcd.setCursor(0,0);lcd.write(3);lcd.setCursor(3,0);lcd.print("h");lcd.setCursor(1,0);lcd.print(hours1);lcd.setCursor(7,0);lcd.print("m");lcd.setCursor(5,0);lcd.print(minutes1);lcd.setCursor(11,0);lcd.print("s");lcd.setCursor(9,0);lcd.print(seconds1);lcd.setCursor(12,0);lcd.print("Morn");
              lcd.setCursor(3,1);lcd.print("h");lcd.setCursor(1,1);lcd.print(hours2);lcd.setCursor(7,1);lcd.print("m");lcd.setCursor(5,1);lcd.print(minutes2);lcd.setCursor(11,1);lcd.print("s");lcd.setCursor(9,1);lcd.print(seconds2);lcd.setCursor(12,1);lcd.print("Late"); w=false;}break;                     
   
   case 5: if(w==true){lcd.clear();         
              lcd.setCursor(3,0);lcd.print("h");lcd.setCursor(1,0);lcd.print(hours1);lcd.setCursor(7,0);lcd.print("m");lcd.setCursor(4,0);lcd.write(3);lcd.setCursor(5,0);lcd.print(minutes1);lcd.setCursor(11,0);lcd.print("s");lcd.setCursor(9,0);lcd.print(seconds1);lcd.setCursor(12,0);lcd.print("Morn");
              lcd.setCursor(3,1);lcd.print("h");lcd.setCursor(1,1);lcd.print(hours2);lcd.setCursor(7,1);lcd.print("m");lcd.setCursor(5,1);lcd.print(minutes2);lcd.setCursor(11,1);lcd.print("s");lcd.setCursor(9,1);lcd.print(seconds2);lcd.setCursor(12,1);lcd.print("Late");w=false;}break; 

   case 6: if(w==true){lcd.clear();         
              lcd.setCursor(3,0);lcd.print("h");lcd.setCursor(1,0);lcd.print(hours1);lcd.setCursor(7,0);lcd.print("m");lcd.setCursor(5,0);lcd.print(minutes1);lcd.setCursor(8,0);lcd.write(3);lcd.setCursor(9,0);lcd.print(seconds1);lcd.setCursor(11,0);lcd.print("s");lcd.setCursor(12,0);lcd.print("Morn");
              lcd.setCursor(3,1);lcd.print("h");lcd.setCursor(1,1);lcd.print(hours2);lcd.setCursor(7,1);lcd.print("m");lcd.setCursor(5,1);lcd.print(minutes2);lcd.setCursor(11,1);lcd.print("s");lcd.setCursor(9,1);lcd.print(seconds2);lcd.setCursor(12,1);lcd.print("Late"); w=false;}break;
               
   
   case 7: if(w==true){lcd.clear();         
              lcd.setCursor(3,0);lcd.print("h");lcd.setCursor(1,0);lcd.print(hours1);lcd.setCursor(7,0);lcd.print("m");lcd.setCursor(5,0);lcd.print(minutes1);lcd.setCursor(11,0);lcd.print("s");lcd.setCursor(9,0);lcd.print(seconds1);lcd.setCursor(12,0);lcd.print("Morn");
              lcd.setCursor(0,1);lcd.write(3);lcd.setCursor(1,1);lcd.print(hours2);lcd.setCursor(3,1);lcd.print("h");lcd.setCursor(7,1);lcd.print("m");lcd.setCursor(5,1);lcd.print(minutes2);lcd.setCursor(11,1);lcd.print("s");lcd.setCursor(9,1);lcd.print(seconds2);lcd.setCursor(12,1);lcd.print("Late"); w=false;}break;                     
   
   case 8: if(w==true){lcd.clear();         
              lcd.setCursor(3,0);lcd.print("h");lcd.setCursor(1,0);lcd.print(hours1);lcd.setCursor(7,0);lcd.print("m");lcd.setCursor(5,0);lcd.print(minutes1);lcd.setCursor(11,0);lcd.print("s");lcd.setCursor(9,0);lcd.print(seconds1);lcd.setCursor(12,0);lcd.print("Morn");
              lcd.setCursor(3,1);lcd.print("h");lcd.setCursor(1,1);lcd.print(hours2);lcd.setCursor(4,1); lcd.write(3);lcd.setCursor(5,1);lcd.print(minutes2);lcd.setCursor(7,1);lcd.print("m");lcd.setCursor(11,1);lcd.print("s");lcd.setCursor(9,1);lcd.print(seconds2);lcd.setCursor(12,1);lcd.print("Late");w=false;}break;   

   case 9: if(w==true){lcd.clear();         
              lcd.setCursor(3,0);lcd.print("h");lcd.setCursor(1,0);lcd.print(hours1);lcd.setCursor(7,0);lcd.print("m");lcd.setCursor(5,0);lcd.print(minutes1);lcd.setCursor(11,0);lcd.print("s");lcd.setCursor(9,0);lcd.print(seconds1);lcd.setCursor(12,0);lcd.print("Morn");
              lcd.setCursor(3,1);lcd.print("h");lcd.setCursor(1,1);lcd.print(hours2);lcd.setCursor(7,1);lcd.print("m");lcd.setCursor(5,1);lcd.print(minutes2);lcd.setCursor(8,1); lcd.write(3);lcd.setCursor(9,1);lcd.print(seconds2);lcd.setCursor(11,1);lcd.print("s");lcd.setCursor(12,1);lcd.print("Late");w=false;}break;
  
   case 10:  lcd.clear();lcd.setCursor(1,0);lcd.print("DokopM");lcd.write(3);lcd.setCursor(10,1);lcd.print(TimsWorker);
           switch (c){case 1:lcd.setCursor(8,0);lcd.print("Experemen");break;                                                          
                      case 2:lcd.setCursor(8,0);lcd.print("1/2      ");break;                                 
                      case 3:lcd.setCursor(8,0);lcd.print("Doza     ");break;                                                                    
                                                                      }break;
   
   case 11:if(w==true){lcd.clear();lcd.setCursor(0,1);lcd.write(3);lcd.setCursor(2,1);lcd.print("TimsWork");lcd.setCursor(10,1);lcd.print(TimsWorker);w=false;}break;
   
   case 12:if(w==true){lcd.clear();lcd.setCursor(1,0);lcd.write(3);lcd.setCursor(2,0);lcd.print(secT);lcd.setCursor(4,0);lcd.print("s");lcd.setCursor(6,0);lcd.print(minT);lcd.setCursor(8,0);lcd.print("m");lcd.setCursor(10,0);lcd.print(hoursT);lcd.setCursor(12,0);lcd.print("h");lcd.setCursor(14,0);lcd.print(weekdayT);lcd.setCursor(16,0);lcd.print("w");     
                       lcd.setCursor(2,1);lcd.print(dayT);lcd.setCursor(4,1);lcd.print("d");lcd.setCursor(6,1);lcd.print(monthT);lcd.setCursor(8,1);lcd.print("m");lcd.setCursor(10,1);lcd.print(yearT);lcd.setCursor(14,1);lcd.print("yr");w=false;}break;
   
   case 13:if(w==true){lcd.clear();lcd.setCursor(2,0);lcd.print(secT);lcd.setCursor(4,0);lcd.print("s");lcd.setCursor(5,0);lcd.write(3);lcd.setCursor(6,0);lcd.print(minT);lcd.setCursor(8,0);lcd.print("m");lcd.setCursor(10,0);lcd.print(hoursT);lcd.setCursor(12,0);lcd.print("h");lcd.setCursor(14,0);lcd.print(weekdayT);lcd.setCursor(16,0);lcd.print("w");     
                       lcd.setCursor(2,1);lcd.print(dayT);lcd.setCursor(4,1);lcd.print("d");lcd.setCursor(6,1);lcd.print(monthT);lcd.setCursor(8,1);lcd.print("m");lcd.setCursor(10,1);lcd.print(yearT);lcd.setCursor(14,1);lcd.print("yr");w=false;}break;
   
   case 14:if(w==true){lcd.clear();lcd.setCursor(2,0);lcd.print(secT);lcd.setCursor(4,0);lcd.print("s");lcd.setCursor(6,0);lcd.print(minT);lcd.setCursor(8,0);lcd.print("m");lcd.setCursor(9,0);lcd.write(3);lcd.setCursor(10,0);lcd.print(hoursT);lcd.setCursor(12,0);lcd.print("h");lcd.setCursor(14,0);lcd.print(weekdayT);lcd.setCursor(16,0);lcd.print("w");     
                       lcd.setCursor(2,1);lcd.print(dayT);lcd.setCursor(4,1);lcd.print("d");lcd.setCursor(6,1);lcd.print(monthT);lcd.setCursor(8,1);lcd.print("m");lcd.setCursor(10,1);lcd.print(yearT);lcd.setCursor(14,1);lcd.print("yr");w=false;}break;
    
   case 15:if(w==true){lcd.clear();lcd.setCursor(2,0);lcd.print(secT);lcd.setCursor(4,0);lcd.print("s");lcd.setCursor(6,0);lcd.print(minT);lcd.setCursor(8,0);lcd.print("m");lcd.setCursor(10,0);lcd.print(hoursT);lcd.setCursor(12,0);lcd.print("h");lcd.setCursor(13,0);lcd.write(3);lcd.setCursor(14,0);lcd.print(weekdayT);lcd.setCursor(16,0);lcd.print("w");     
                       lcd.setCursor(2,1);lcd.print(dayT);lcd.setCursor(4,1);lcd.print("d");lcd.setCursor(6,1);lcd.print(monthT);lcd.setCursor(8,1);lcd.print("m");lcd.setCursor(10,1);lcd.print(yearT);lcd.setCursor(14,1);lcd.print("yr");w=false;}break;
   
   case 16:if(w==true){lcd.clear();lcd.setCursor(2,0);lcd.print(secT);lcd.setCursor(4,0);lcd.print("s");lcd.setCursor(6,0);lcd.print(minT);lcd.setCursor(8,0);lcd.print("m");lcd.setCursor(10,0);lcd.print(hoursT);lcd.setCursor(12,0);lcd.print("h");lcd.setCursor(14,0);lcd.print(weekdayT);lcd.setCursor(16,0);lcd.print("w");     
                       lcd.setCursor(1,1);lcd.write(3);lcd.setCursor(2,1);lcd.print(dayT);lcd.setCursor(4,1);lcd.print("d");lcd.setCursor(6,1);lcd.print(monthT);lcd.setCursor(8,1);lcd.print("m");lcd.setCursor(10,1);lcd.print(yearT);lcd.setCursor(14,1);lcd.print("yr");w=false;}break;
   
   case 17:if(w==true){lcd.clear();lcd.setCursor(2,0);lcd.print(secT);lcd.setCursor(4,0);lcd.print("s");lcd.setCursor(6,0);lcd.print(minT);lcd.setCursor(8,0);lcd.print("m");lcd.setCursor(10,0);lcd.print(hoursT);lcd.setCursor(12,0);lcd.print("h");lcd.setCursor(14,0);lcd.print(weekdayT);lcd.setCursor(16,0);lcd.print("w");     
                       lcd.setCursor(2,1);lcd.print(dayT);lcd.setCursor(4,1);lcd.print("d");lcd.setCursor(5,1);lcd.write(3);lcd.setCursor(6,1);lcd.print(monthT);lcd.setCursor(8,1);lcd.print("m");lcd.setCursor(10,1);lcd.print(yearT);lcd.setCursor(14,1);lcd.print("yr");w=false;}break;
   
   case 18:if(w==true){lcd.clear();lcd.setCursor(2,0);lcd.print(secT);lcd.setCursor(4,0);lcd.print("s");lcd.setCursor(6,0);lcd.print(minT);lcd.setCursor(8,0);lcd.print("m");lcd.setCursor(10,0);lcd.print(hoursT);lcd.setCursor(12,0);lcd.print("h");lcd.setCursor(14,0);lcd.print(weekdayT);lcd.setCursor(16,0);lcd.print("w");     
                       lcd.setCursor(2,1);lcd.print(dayT);lcd.setCursor(4,1);lcd.print("d");lcd.setCursor(6,1);lcd.print(monthT);lcd.setCursor(8,1);lcd.print("m");lcd.setCursor(9,1);lcd.write(3);lcd.setCursor(10,1);lcd.print(yearT);lcd.setCursor(14,1);lcd.print("yr");w=false;}break;
  
  }}
 
  enc1.tick();
  if(enc1.isClick()){if(menu==18){Time.settime(secT,minT,hoursT,dayT,monthT,yearT,weekdayT);}
                     if(menu==10){switch(c){case 1:        servoOpen();     servoToClose();break;
                                            case 2:W2=true;servoOpen();TimeWork = millis();break;
                                            case 3:W3=true;servoOpen();TimeWork = millis();break;}}}                                   
    
  if (W2==true &&millis()-TimeWork>=TimsWorker/2)  {servoToClose();TimeWork=0;W2=false;}
  if (W3==true &&millis()-TimeWork>=TimsWorker  )  {servoToClose();TimeWork=0;W3=false;}  
 
  if (menu==1){if (millis() - filter_timer2 > 1000ul) {lcd.setCursor(1,0);lcd.print("t");lcd.write(1);lcd.setCursor(3,0);lcd.print(val_temperature);lcd.write(4);lcd.write(1);lcd.setCursor(8,0);lcd.print(Time.gettime("H:i:s"));
                                                       lcd.setCursor(1,1);lcd.write(2);lcd.setCursor(3,1);lcd.print(val_humidity);filter_timer2=millis();}}   

  Time.gettime();         
  if (qr == true && Time.Hours == hours1 && Time.minutes == minutes1 && Time.seconds == seconds1){
      qr = false;QR=false;TimeWork = millis();home_timerMenu=millis();lcd.backlight();servoOpen();}  
           
  if (qr == true && Time.Hours == hours2 && Time.minutes == minutes2 && Time.seconds == seconds2){                 
      qr = false;QR=false;TimeWork = millis();home_timerMenu=millis();lcd.backlight();servoOpen();}                                                                              //присвоить переменной значение false
 
 /* if (qr == true && Time.Hours == hours3 && Time.minutes == minutes3 && Time.seconds == seconds3){                 
      qr = false;QR=false;TimeWork = millis();home_timerMenu=millis();lcd.backlight();servoOpen();}  */  
 
  if (val_humidity    -        userHum> 10  && statusVent == LOW ){digitalWrite (ventilation,HIGH);}                
  if (userHum         -   val_humidity> 10  && statusVent == HIGH){digitalWrite (ventilation, LOW);}                 
  if (userTemp        -val_temperature> 4   && statusHeat == LOW ){digitalWrite (heater,     HIGH);}    
  if (val_temperature -       userTemp> 4   && statusHeat == HIGH){digitalWrite (heater,      LOW);}

  if (millis() - home_timerMenu>= 30000      && QR == false){lcd.noBacklight();home_timerMenu=0;QR=true;menu=1;c=1;lcd.clear();}   
  if (millis() - TimeWork      >= TimsWorker && qr == false){qr=true; servoToClose();}
  if (millis() - filter_timer  > FILTER_STEP){filter_timer = millis();
    switch(sensor.read()){
          case DHT_OK:humidity=sensor.hum; temperature=sensor.tem;
                  val_humidity   =(val_humidity   *5 + humidity   )/6;
                  val_temperature=(val_temperature*5 + temperature)/6; 
                  if (menu==1){lcd.setCursor(8,1);lcd.print("     ");}break;                     
          default:lcd.setCursor(8,1);lcd.print("ERROR");break;}}
  
  if(enc !=0)       {menu+=enc;enc=0;}
  if(ench!=0){switch(menu){ 
                case 2:userTemp +=ench;break;                             
                case 3:userHum  +=ench;break;                              
                case 4:hours1   +=ench;if (h1 != hours1    ){writeEEPROM(disk1, address,  hours1    );h1= hours1    ;}break;                               
                case 5:minutes1 +=ench;if (m1 != minutes1  ){writeEEPROM(disk1, address1, minutes1  );m1= minutes1  ;}break;                              
                case 6:seconds1 +=ench;if (s1 != seconds1  ){writeEEPROM(disk1, address2, seconds1  );s1= seconds1  ;}break;                                           
                case 7:hours2   +=ench;if (h2 != hours2    ){writeEEPROM(disk1, address3, hours2    );h2= hours2    ;}break;                               
                case 8:minutes2 +=ench;if (m2 != minutes2  ){writeEEPROM(disk1, address4, minutes2  );m2= minutes2  ;}break;            
                case 9:seconds2 +=ench;if (s2 != seconds2  ){writeEEPROM(disk1, address5, seconds2  );s2= seconds2  ;}break;            
                case 10:c       +=ench;break;                             
                case 11:TimsWorker+=ench*100;if (T1 != TimsWorker){writeEEPROM(disk1, address9, TimsWorker);T1= TimsWorker;}break;
                case 12:secT    +=ench;break;
                case 13:minT    +=ench;break;
                case 14:hoursT  +=ench;break;
                case 15:weekdayT+=ench;break;
                case 16:dayT    +=ench;break;
                case 17:monthT  +=ench;break;
                case 18:yearT   +=ench;break;}ench=0;}  
  
  //if (h2 != hours3    ){writeEEPROM(disk1, address6, hours3    );h3= hours3    ;}
  //if (m2 != minutes3  ){writeEEPROM(disk1, address7, minutes3  );m3= minutes3  ;}
  //if (s2 != seconds3  ){writeEEPROM(disk1, address8, seconds3  );s3= seconds3  ;}
  

        if (c>3)               {c=3;} if(c<1)               {c=1;}
        if (menu>18)        {menu=1;} if(menu<1)        {menu=18;} 
        if (hours1>23)    {hours1=0;} if(hours1<0)    {hours1=23;}                              
        if (minutes1>59){minutes1=0;} if(minutes1<0){minutes1=59;}        
        if (seconds1>59){seconds1=0;} if(seconds1<0){seconds1=59;} 
        if (hours2>23)    {hours2=0;} if(hours2<0)    {hours2=23;} 
        if (minutes2>59){minutes2=0;} if(minutes2<0){minutes2=59;}         
        if (seconds2>59){seconds2=0;} if(seconds2<0){seconds2=59;}         
        if (secT>60)        {secT=0;} if(secT<0)        {secT=60;}
        if (minT>60)        {minT=0;} if(minT<0)        {minT=60;} 
        if (hoursT>23)    {hoursT=0;} if(hoursT<0)    {hoursT=23;}                              
        if (dayT>31)        {dayT=1;} if(dayT<1)        {dayT=31;}        
        if (monthT>12)    {monthT=1;} if(monthT<1)    {monthT=12;} 
        if (yearT<2021) {yearT=2021;} if(yearT>3000) {yearT=3000;} 
        if (weekdayT>7) {weekdayT=1;} if(weekdayT<1) {weekdayT=7;}  
  if (TimsWorker<100){TimsWorker=100;}if(TimsWorker>20000){TimsWorker=20000;}

}

void writeEEPROM(int deviceaddress, unsigned int eeaddress, byte data ){ 

  Wire.beginTransmission(deviceaddress);
  Wire.write((int)(eeaddress >> 8));   // MSB
  Wire.write((int)(eeaddress & 0xFF)); // LSB
  Wire.write(data);
  Wire.endTransmission();
  delay(5);
}
 
byte readEEPROM(int deviceaddress, unsigned int eeaddress ){
  byte rdata = 0xFF;
  Wire.beginTransmission(deviceaddress);
  Wire.write((int)(eeaddress >> 8))    ;   
  Wire.write((int)(eeaddress & 0xFF))  ; 
  Wire.endTransmission();
  Wire.requestFrom(deviceaddress,1);
  if (Wire.available()) rdata = Wire.read();
  return rdata;
}
void servoOpen() {                                                                                    
  for (pos = 90; pos >= 0; pos -= 1) {                                                               
    servo.write(pos);                                                                                
    delay(5);}                                                                                        
    lcd.setCursor(2,1);
    lcd.print("OPEN");
  }
void servoToClose() {                                                                               
  for (pos = 0; pos <= 90; pos += 1) {servo.write(pos);delay(5);}    
  servoDo();
}
void servoDo() {
  for (pos = 90; pos >= 88; pos -= 1) {servo.write(pos);delay(5);}                            
  lcd.setCursor(2,1);
  lcd.print("CLOSE ");
}
void encoder (){
  if(enc1.isRight ()){enc ++;}
  if(enc1.isLeft  ()){enc --;}
  if(enc1.isRightH()){ench++;}
  if(enc1.isLeftH ()){ench--;}
                 }

 

Kakmyc
Offline
Зарегистрирован: 15.01.2018

Ты сделал всё , как обычно, через жопу.

Posol88
Offline
Зарегистрирован: 14.11.2019
if(cliCk!=0){cliCk=0;
                     switch(menu){case 21:Time.settime(secT,minT,hoursT,dayT,monthT,yearT,weekdayT);break;
                                  case 13:switch(c){case 1:        servoOpen();     servoToClose();break;
                                                    case 2:W2=true;servoOpen();TimeWork = millis();break;
                                                    case 3:W3=true;servoOpen();TimeWork = millis();break;}
                                  case  6: if (On_Off1==true) {On_Off1=false;lcd.setCursor(13,0);lcd.print("OFF");}
                                           if (On_Off1==false){On_Off1= true;lcd.setCursor(13,0);lcd.print("ON ");}break;                    
                    
                                  case  9: if (On_Off2==true) {On_Off2=false;lcd.setCursor(13,0);lcd.print("OFF");}
                                           if (On_Off2==false){On_Off2= true;lcd.setCursor(13,0);lcd.print("ON ");}break;                    
                    
                                  case 12: if (On_Off3==true) {On_Off3=false;lcd.setCursor(13,0);lcd.print("OFF");}
                                           if (On_Off3==false){On_Off3= true;lcd.setCursor(13,0);lcd.print("ON ");}break;}}

Что не так в этой конструкции? положение ON принимает (с трудом)  OFF не принимает вообще