спасибо) выходит этот указатель нужен только для монитора порта, если мне просто нужно присвоить считываемое значение переменной, его указывать не нужно. я правильно понял?
это переводчик перевел. пример с сайта, а я английский очень плохо знаю, по этому пользуюсь переводчиком
Посол, вы эту тему уже мучаете полтора года - а прогресса никакого, как были дерево - так только в пень и превратились. Еще и английского не знаете. хотя базовый уровень за это время можно было выучить...
это переводчик перевел. пример с сайта, а я английский очень плохо знаю, по этому пользуюсь переводчиком
Это-то я понял, а в коде зачем так оставлять.
Попытайтесь понять, сюда нужно выкладывать ИМЕННО ТОТ код, с которым у Вас проблемы. Повторяю для альтернативно понятливых: ну, вот совсем тот самый код, прямо копипастом из IDE и никакой другой!
Если же у Вас не работает один код, а сюда Вы выложили другой (как в данном случае), то, не знаю как остальные, но я расцениваю это как издевательство: я потрачу своё время на разбор кода, чтобы Вы мне потом сказали: "Да нет, эти ошибки не при делах, т.к. реально у меня код другой". И как Вы думаете, куда я Вас после такого пошлю? Вы это понимаете?
это переводчик перевел. пример с сайта, а я английский очень плохо знаю, по этому пользуюсь переводчиком
Это-то я понял, а в коде зачем так оставлять.
Попытайтесь понять, сюда нужно выкладывать ИМЕННО ТОТ код, с которым у Вас проблемы. Повторяю для альтернативно понятливых: ну, вот совсем тот самый код, прямо копипастом из IDE и никакой другой!
Если же у Вас не работает один код, а сюда Вы выложили другой (как в данном случае), то, не знаю как остальные, но я расцениваю это как издевательство: я потрачу своё время на разбор кода, чтобы Вы мне потом сказали: "Да нет, эти ошибки не при делах, т.к. реально у меня код другой". И как Вы думаете, куда я Вас после такого пошлю? Вы это понимаете?
дело было так - нашел я образец по которому делать. повторил его , поигрался с разными значениями и типами переменных - все работает.(и записывает и считывает) адаптировал в свой код - не работает. помучал его, поискал отличия от образца - не нашел почти. кроме того что в образце функцией" readEEPROM(disk1, address), DEC;" значение выводится в порт, а у меня оно присваивается переменной "hours1 =readEEPROM(disk1, address );" стал перебирать по пунктам все что происходит. дошел до "DEC" и понял, что вроде как кроме этого момента все понятно, а тут нет. ну думаю ладно... грузить форумчан своим огромным кодом... кому он там нужен еще копаться в нем, я там такого понаписал, половина слов на английском не правильно написаны. Вот и решил спросить то что было не понятно, с надеждой найти ключ к проблеме в своем коде самостоятельно.
Posol88 - совет. НИКОГДА не переводите исходный код программы гугло переводчиком. Гугл не понимает. где операторы. а где комментарии. получается полная каша. в которой и опытный программист не разберется. И вам этот перевод для понимания не дает ничего.
прогресса никакого, как были дерево - так только в пень и превратились. Еще и английского не знаете. хотя базовый уровень за это время можно было выучить...
прогресс конечно ни как у студента МГУ , с интересом к знаниям, но он есть. даже уровень знания английского языка растёт. Если бы я в этом жил с этим работал - конечно бы разбирался лучше, но пока что это хобби
а не ошибается только тот - кто ни чего не делает.
И своим решением заставили человека (пост #657) анализировать совершенно левый код и писать Вам замечание, которое Вы тут же отмели, т.к. код левый. Этот как раз то, что я Вам пытаюсь объяснить.
Что же касается Вашего "огромного кода". Ешьте слона по частям! Отлаживайте маленькие куски!Я всегда так делаю, хотя программирую уже более сорока лет!
посмотрел, вы что. охренели? у вас же половина программы засунута в прерывания по энкодеру. В том числе и запись на ЕЕПРОМ, которая сама использует прерывания. Конечно это будет виснуть.
В процедуре encoder() необходимо только считать тики энкодера. то есть буквально в ней должно быть пара строк.
Я вам год назад писал - ну читайте же книжки! А вы все как обезьяна с гранатой - то туда повернете, то сюда, а толку ноль. Если нет способностей - займитесь чем-то другим
выкидывайте из прерываний все, все свои бесконечные путанные 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;}
}}
внутри прерывания по энкодеру делаем еще один enc1.tick(); ???
это какой-то особый вывих мозга.
Да и сама логика кода просто из психолечебницы. В строчках 2 и 3 приведенного фрагмента у вас поворот энкодера перемещает вас в новый раздел меню. ВСЕГДА И этот же поворот меняет в новом разделе параметр? - это же бред.
Пример -представьте, что мне нужно поменять минуту более чем на единицу... вы поворачиваете энкодер - минута меняется на один и система сама перескакивает в следующее меню. Вы возвращаетесь обратно - но при этому у вас минута автоматически уменьшается... Это не меню, а инструмент издевательств какой-то
Посол, вы все время игнорируете вопрос - ЗАЧЕМ ВЫ ЗАНИМАЕТЕСЬ ТЕМ, К ЧЕМУ У ВАС НЕТ НИ МАЛЕЙШИХ СПОСОБНОСТЕЙ???
внутри прерывания по энкодеру делаем еще один enc1.tick(); ???
это какой-то особый вывих мозга.
в первых вариантах программы - прерываний не было... и энкодер то и дело не срабатывал
потом пришел к выводу о необходимости использования прерываний, но накосячил с именами переменных из-за чего, опять появились задержки и я напихал тиков во все места, до куда только дотянулся. затем разобрался с причиной, а поудалял но не все и не везде...
//Это в прерываниии
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--;}
}
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 не принимает вообще
но вот что такое "корень"? я догадываюсь что это главный фаил библиотеки. А как его распознать?
Запишитесь на Курсы ПК для домохозяек.
Ну ведь вопрос явно не для этого форума.
в 13й строчке кода "DEC" что означает?
Ну матьтваю, ну прям на этом же сайте написано
http://arduino.ru/Reference/Serial/Print
Ну ведь вопрос явно не для этого форума.
конечно. ведь за значением жаргонного слова программистов явно к сантехникам обращаться нужно.
пришел тут... фигню всякую спрашивает))
пришел тут... фигню всякую спрашивает))
Реально так. И даже хуже.
на этом же сайте написано
http://arduino.ru/Reference/Serial/Print
спасибо) выходит этот указатель нужен только для монитора порта, если мне просто нужно присвоить считываемое значение переменной, его указывать не нужно. я правильно понял?
Во-первых, где ты тут чо присваиваешь?
Serial
.print(readEEPROM(disk1, address), DEC);
Во-вторых, может потратишь своё время на изучение матчасти, а не наше, чтоб отвечать на идиотские вопросы?
Во-первых, где ты тут чо присваиваешь?
Serial
.print(readEEPROM(disk1, address), DEC);
Во-вторых, может потратишь своё время на изучение матчасти, а не наше, чтоб отвечать на идиотские вопросы?
не тут. это код примера. присваиваю я вот тут:
в строчках с 268й по 287ю. просто делаю 1в1 как в примере, а код виснет вместо того что бы записать. вот и ищу где налажал
в 13й строчке кода "DEC" что означает?
А в первой строчке "#включить <Wire.h>" что означает?
Нет. Коррекционная педагогика - сегодня вапще не моё, у мня внучка родилась в 4:09. Наданапицца.
А в первой строчке "#включить <Wire.h>" что означает?
это переводчик перевел. пример с сайта, а я английский очень плохо знаю, по этому пользуюсь переводчиком
Нет. Коррекционная педагогика - сегодня вапще не моё, у мня внучка родилась в 4:09. Наданапицца.
примите мои поздравления!
https://www.forum-volgograd.ru/threads/21514/
Скажите пожалуйста, за что нынче в гугле банят? За политику? Или порнушку слишком активно искал?
Очень жирный тролль. Совсем толстый и беспонтовый. Предлагаю забанить нах.
https://www.forum-volgograd.ru/threads/21514/
Скажите пожалуйста, за что нынче в гугле банят? За политику? Или порнушку слишком активно искал?
я Вас понял)))) корень - это корневая папка получается (а не фаил, как я думал)
по выше указанной ссылке много веселого, особенно "Сантехника - оборудование от Sun Microsystems Computer Corporation;" но про корень не написано)
Нет. Коррекционная педагогика - сегодня вапще не моё, у мня внучка родилась в 4:09. Наданапицца.
Поздравляю!!! Это которая по счёту? Скольки раз ты уже дед?
это переводчик перевел. пример с сайта, а я английский очень плохо знаю, по этому пользуюсь переводчиком
Посол, вы эту тему уже мучаете полтора года - а прогресса никакого, как были дерево - так только в пень и превратились. Еще и английского не знаете. хотя базовый уровень за это время можно было выучить...
Может хватит уже?
это переводчик перевел. пример с сайта, а я английский очень плохо знаю, по этому пользуюсь переводчиком
Это-то я понял, а в коде зачем так оставлять.
Попытайтесь понять, сюда нужно выкладывать ИМЕННО ТОТ код, с которым у Вас проблемы. Повторяю для альтернативно понятливых: ну, вот совсем тот самый код, прямо копипастом из IDE и никакой другой!
Если же у Вас не работает один код, а сюда Вы выложили другой (как в данном случае), то, не знаю как остальные, но я расцениваю это как издевательство: я потрачу своё время на разбор кода, чтобы Вы мне потом сказали: "Да нет, эти ошибки не при делах, т.к. реально у меня код другой". И как Вы думаете, куда я Вас после такого пошлю? Вы это понимаете?
код виснет вместо того что бы записать. вот и ищу где налажал
так и не нашел
так и не нашел
с вашими знаниями и не найдете. разве что кто-то носом ткнет.
Скажите. зачем вам внешняя ЕЕПРОМ? встроенной мало?
это переводчик перевел. пример с сайта, а я английский очень плохо знаю, по этому пользуюсь переводчиком
Это-то я понял, а в коде зачем так оставлять.
Попытайтесь понять, сюда нужно выкладывать ИМЕННО ТОТ код, с которым у Вас проблемы. Повторяю для альтернативно понятливых: ну, вот совсем тот самый код, прямо копипастом из IDE и никакой другой!
Если же у Вас не работает один код, а сюда Вы выложили другой (как в данном случае), то, не знаю как остальные, но я расцениваю это как издевательство: я потрачу своё время на разбор кода, чтобы Вы мне потом сказали: "Да нет, эти ошибки не при делах, т.к. реально у меня код другой". И как Вы думаете, куда я Вас после такого пошлю? Вы это понимаете?
дело было так - нашел я образец по которому делать. повторил его , поигрался с разными значениями и типами переменных - все работает.(и записывает и считывает) адаптировал в свой код - не работает. помучал его, поискал отличия от образца - не нашел почти. кроме того что в образце функцией" readEEPROM(disk1, address), DEC;" значение выводится в порт, а у меня оно присваивается переменной "hours1 =readEEPROM(disk1, address );" стал перебирать по пунктам все что происходит. дошел до "DEC" и понял, что вроде как кроме этого момента все понятно, а тут нет. ну думаю ладно... грузить форумчан своим огромным кодом... кому он там нужен еще копаться в нем, я там такого понаписал, половина слов на английском не правильно написаны. Вот и решил спросить то что было не понятно, с надеждой найти ключ к проблеме в своем коде самостоятельно.
Скажите. зачем вам внешняя ЕЕПРОМ? встроенной мало?
у внешней жизнеспособность больше . ето раз
я их 5 штук купил. етодва
давно хотел ее победить, мне показалось - время пришло. ето три. вот
Posol88 - совет. НИКОГДА не переводите исходный код программы гугло переводчиком. Гугл не понимает. где операторы. а где комментарии. получается полная каша. в которой и опытный программист не разберется. И вам этот перевод для понимания не дает ничего.
я их 5 штук купил. етодва
каких конкретно, точное обозначение можете дать?
прогресса никакого, как были дерево - так только в пень и превратились. Еще и английского не знаете. хотя базовый уровень за это время можно было выучить...
прогресс конечно ни как у студента МГУ , с интересом к знаниям, но он есть. даже уровень знания английского языка растёт. Если бы я в этом жил с этим работал - конечно бы разбирался лучше, но пока что это хобби
а не ошибается только тот - кто ни чего не делает.
каких конкретно, точное обозначение можете дать?
atmel536 24C256 .PI27 B
дело было так ... Вот и решил
И своим решением заставили человека (пост #657) анализировать совершенно левый код и писать Вам замечание, которое Вы тут же отмели, т.к. код левый. Этот как раз то, что я Вам пытаюсь объяснить.
Что же касается Вашего "огромного кода". Ешьте слона по частям! Отлаживайте маленькие куски! Я всегда так делаю, хотя программирую уже более сорока лет!
посмотрел, вы что. охренели? у вас же половина программы засунута в прерывания по энкодеру. В том числе и запись на ЕЕПРОМ, которая сама использует прерывания. Конечно это будет виснуть.
В процедуре encoder() необходимо только считать тики энкодера. то есть буквально в ней должно быть пара строк.
Я вам год назад писал - ну читайте же книжки! А вы все как обезьяна с гранатой - то туда повернете, то сюда, а толку ноль. Если нет способностей - займитесь чем-то другим
половина программы засунута в прерывания по энкодеру. В том числе и запись на ЕЕПРОМ, которая сама использует прерывания. Конечно это будет виснуть.
понял, сейчас попробую исправить. а вот то что ЕЕПРОМ для записи прерывания использует - не знал и даже не догадывался...
понял, сейчас попробую исправить. а вот то что ЕЕПРОМ для записи прерывания использует - не знал и даже не догадывался...
выкидывайте из прерываний все, все свои бесконечные путанные if-ы. и не имейте привычки набивать прерывания ерундой.
Все это должно быть в ЛУПЕ.
заставили человека (пост #657) анализировать совершенно левый код и писать Вам замечание, которое Вы тут же отмели, т.к. код левый.
ЕвгенийП, прости пожалуйста засранца)). я был искренен в своих заблуждениях.
все осознал больше такого не повторится.
выкидывайте из прерываний все, все свои бесконечные путанные if-ы.
а вот так тоже плохо?
внутри прерывания по энкодеру делаем еще один enc1.tick(); ???
это какой-то особый вывих мозга.
Да и сама логика кода просто из психолечебницы. В строчках 2 и 3 приведенного фрагмента у вас поворот энкодера перемещает вас в новый раздел меню. ВСЕГДА И этот же поворот меняет в новом разделе параметр? - это же бред.
Пример -представьте, что мне нужно поменять минуту более чем на единицу... вы поворачиваете энкодер - минута меняется на один и система сама перескакивает в следующее меню. Вы возвращаетесь обратно - но при этому у вас минута автоматически уменьшается... Это не меню, а инструмент издевательств какой-то
Посол, вы все время игнорируете вопрос - ЗАЧЕМ ВЫ ЗАНИМАЕТЕСЬ ТЕМ, К ЧЕМУ У ВАС НЕТ НИ МАЛЕЙШИХ СПОСОБНОСТЕЙ???
внутри прерывания по энкодеру делаем еще один enc1.tick(); ???
это какой-то особый вывих мозга.
в первых вариантах программы - прерываний не было... и энкодер то и дело не срабатывал
потом пришел к выводу о необходимости использования прерываний, но накосячил с именами переменных из-за чего, опять появились задержки и я напихал тиков во все места, до куда только дотянулся. затем разобрался с причиной, а поудалял но не все и не везде...
поворот энкодера перемещает вас в новый раздел меню. ВСЕГДА И этот же поворот меняет в новом разделе параметр?
нет. там в строчках 2 и 3 enc1.isRight() это просто поворот
а в switch enc1.isRightH() это поворот с нажатием
ЗАЧЕМ ВЫ ЗАНИМАЕТЕСЬ ТЕМ, К ЧЕМУ У ВАС НЕТ НИ МАЛЕЙШИХ СПОСОБНОСТЕЙ???
мне нравится. это хороший способ не дать мозгу прокиснуть. и к тому же это интересно
Посол, ты уже продай все это нахрен, купи себе пива ящег, и забуть все эти микроконтроллеры какстрашныйсон. Лиарьна, это не твое.
А мозгу не давай закиснуть вычисляя НДС в уме, када вотку покупаешь.
Посол, ты уже продай все это нахрен, купи себе пива ящег, и забуть все эти микроконтроллеры какстрашныйсон. Лиарьна, это не твое.
А мозгу не давай закиснуть вычисляя НДС в уме, када вотку покупаешь.
настоящих гениев всегда недооценивают))
настоящих гениев всегда недооценивают))
Это - да! Тут хрен поспоришь.
Клоун ты а не посол.
Энкодер нужно как то так описывать:
Клоун ты а не посол.
посол - это по тому что меня обычно проще послать чем закончить разговор.
но я над этим работаю.
Энкодер нужно как то так описывать:
пойду искать что означают "?"и":"
Вот еще один повод узнать что то новое)
пойду искать что означают "?"и":"
Вот еще один повод узнать что то новое)
А может это ещё один повод просто взять какую-нибудь книжку по языку (хоть тоненькую) и прочитать полностью?
А может это ещё один повод просто взять какую-нибудь книжку по языку (хоть тоненькую) и прочитать полностью?
одно другого не исключает)) вообще я начинал читать, но почему то не закончил
digitalRead(encoderA)==digitalRead(encoderB)
ни разу не могу понять, что имеется ввиду под "encoderA" и "encoderB"
не пины же ,на которые посажен энкодер, в самом деле...
[ни разу не могу понять, что имеется ввиду под "encoderA" и "encoderB"
не пины же ,на которые посажен энкодер, в самом деле...
это троллинг очередной? что это может быть еще, кроме пинов?
что это может быть еще, кроме пинов?
просто я библиотеку использовал всегда... и не задумывался о работе напрямую...
Артель "Напрасный труд"
Клоун ты а не посол.
Энкодер нужно как то так описывать:
сделал как в предложенном варианте, только через библиотеку, по тому как напрямую было много дребезгов.
но получилось неочень - дребезгов много меньше, но все равно есть, а в первом варианте(когда все в прерывании было) работало четко без проблем. новый вариант :
Ты сделал всё , как обычно, через жопу.
Что не так в этой конструкции? положение ON принимает (с трудом) OFF не принимает вообще