подскажите, а лучше на примере моём покажите как избавится от делэев и настроить щочик фор

ВладимирN
Offline
Зарегистрирован: 14.11.2019

помогите сирому и убогому со скейчем. идея фикс избавится от делеев и запустить цикл фор так как последний не работает. Хотя отдельно от основного скейча работает.




/ длиные провода экранируются от новодок борт сети стоит две кренки  12 и 5 вольт. если стоит саб то желательно на делителе поставить кондёр 1000 мф для стобилизацыи при просадке
#include <Wire.h>                            // подключаем библиотеку для работы с шиной I2C
#include <OneWire.h>                         // подключаем библиотеку  для работы датчика температуры
#include <LiquidCrystal_I2C.h>               // подключаем библиотеку для работы с LCD дисплеем
#include <iarduino_RTC.h>                    // подключаем библиотеку для работы с RTC модулем
#include <DS3232RTC.h>
LiquidCrystal_I2C lcd(0x3F, 16, 2);          // объявляем  переменную для работы с LCD дисплеем, указывая параметры дисплея (адрес I2C = 0x27, количество столбцов = 16, количество строк = 2)
LiquidCrystal_I2C lcd2(0x27, 16, 2);
iarduino_RTC time(RTC_DS3231);               // объявляем  переменную для работы с RTC модулем,  указывая название модуля
DS3232RTC myRTC;
OneWire ds(9);                               // в скобках задаём пин ардуино, к которому подключен датчик температуры

volatile unsigned int int_tic = 0;
volatile unsigned long tic;

const int analogIn = A0;
int Analog1Value = A1;
int Analog2Value = A2;
int Water;
byte Oil;
byte Ry = 4;
byte PD = 7;
byte LD = 8;
byte  but = 10;
byte rele = 2;
byte buzer = 3;
float val = 0;
int kon = 0;


void setup() {
  Serial.begin(9600);
  myRTC.begin();
  time.begin();                              // инициируем RTC модуль
  lcd.init();                                //инициируем LCD дисплей
  lcd2.init();                               
  lcd.backlight();                           // включаем подсветку LCD дисплея
  lcd2.backlight();
  pinMode(but, OUTPUT );
  pinMode(Ry, INPUT);                        // к + через 10к минус кнопка и диод
  pinMode(PD, INPUT);                        // к + через 10к минус кнопка и диод
  pinMode(LD, INPUT);                        // к + через 10к минус кнопка и диод
  pinMode(rele, OUTPUT);                     // реле
  pinMode(buzer, OUTPUT);                    // пищалка
  TCCR1A = 0; TIMSK1 = 1 << TOIE1;           //прерывание по переполнению
}
ISR (TIMER1_OVF_vect) {
  int_tic++;
}

void loop() {

  val = analogRead(A0);
  val = val / 1024 * 55.0;                       //  делитель 10k 100k к бортовой сети
  Analog1Value = analogRead(A1);
  Analog2Value = analogRead(A2);
  Water = map (Analog1Value, 0, 1024, 130, -10); // делитель 1к притянут к + минус к дачику температуры
  Oil = map (Analog2Value, 1024, 360, 6,0);       // делитель 1к притянут к + минус к дачику давления

  byte data[9];
  ds.reset();
  ds.write(0xCC);
  ds.write(0x44);
  delay(750);
  ds.reset();
  ds.write(0xCC);
  ds.write(0xBE);
  data[0] = ds.read();
  data[1] = ds.read();
  int Temp = (data[1] << 8) + data[0];
  Temp = Temp >> 4;
  pinMode (5, INPUT); // вход сигнала T1 (only для atmega328)
  TCCR1B = (1 << CS10) | (1 << CS11) | (1 << CS12); //тактировани от входа Т1
  delay(500);
  TCCR1B = 0;
  tic = ((uint32_t)int_tic << 16) | TCNT1; //сложить что натикало
  int_tic = 0; TCNT1 = 0;
  int RpM = tic * 60;
  lcd.setCursor(0, 0);
  lcd.print("RpM= ");
  lcd.print(RpM);
  lcd.print("      ");

  lcd2.setCursor(0, 0);
  lcd2.print(val, 1);
  lcd2.print("Volt");
  lcd2.setCursor(9, 0);
  lcd2.print(Oil, 1);
  lcd2.print("_Oil");
  lcd2.setCursor(0, 1);
  lcd2.print(Water, 1);
  lcd2.print((char)223); // Знак градуса
  lcd2.print("Water");
  lcd2.setCursor(9, 1);
  lcd2.print(Temp, 1); //выводим цифры с температурой
  lcd2.print((char)223);
  lcd2.print("Temp");
  delay(1000);
     
  if (digitalRead(LD) ==  LOW && RpM > 1000 ) {  // открытая дверь лв
    delay(200);
    tone(3, 2000, 200);
    lcd.clear();
    lcd.print("LEVAYA DVER");
    lcd.setCursor(0, 1);                   // устанавливаем курсор в позицию: столбец 0, строка 1
    lcd.print(time.gettime("H:i:s d-mD"));

  } else {
    digitalWrite(buzer, LOW);
    lcd.setCursor(0, 1);                   // устанавливаем курсор в позицию: столбец 0, строка 1
    lcd.print(time.gettime("H:i:s d-mD"));

  }
  if (digitalRead(PD) == LOW && RpM > 1000 ) {   // открытая дверь пр
    delay(200);
    tone(3, 2000, 200);
    lcd.clear();
    lcd.print("PRAVAYA DVER");

  } else {
    digitalWrite(buzer, LOW);
    lcd.setCursor(0, 1);                   // устанавливаем курсор в позицию: столбец 0, строка 1
    lcd.print(time.gettime("H:i:s d-mD"));

  }
  if (digitalRead(Ry) == LOW && RpM > 1000 ) { //условие поднятия ручника
    delay(200);  
     tone(3, 2000, 500);
    lcd.clear();
    lcd.print("RYCHNIK");

  } else {
    digitalWrite(buzer, LOW);
    lcd.setCursor(0, 1);
    lcd.print(time.gettime("H:i:s d-mD"));
  }
  if (val < 12 && RpM > 1000 ) {    // условия при заведеном маторе
    delay(200);
    tone(3, 2000, 700);
    lcd.clear();
    lcd.print("HET 3APYADKI");
  }
  if (val < 11) {  // сдесь условия проверяются при заглушоном моторе 11  чтоб при просадки сети когда игрет муз не пищал
    delay(200);
    tone(3, 2000, 900);
    lcd.clear();
    lcd.print("clabjii zarayd");

  } else {
    (val > 12);
    digitalWrite(buzer, LOW);
    lcd.setCursor(0, 1);
    lcd.print(time.gettime("H:i:s d-mD"));
  }
  if (Water > 99 && RpM > 1000 ) {  //условия перегрева мотора при заведёном моторе
    delay(200);
    tone(3, 2000, 800);
    lcd.clear();
    lcd.print("PEREGREV");

  } else {
    (Water < 96);
    digitalWrite(buzer, LOW);
    lcd.setCursor(0, 1);
    lcd.print(time.gettime("H:i:s d-mD"));
  }
  if (Oil < 1 && RpM > 1000 ) {  // условия давления масла при заведёном моторе
    delay(200);
    tone(3, 2000, 900);
    lcd.clear();
    lcd.print("DAVLENIE MASLO");

  } else {
    (Oil > 2);
    digitalWrite(buzer, LOW);
    lcd.setCursor(0, 1);
    lcd.print(time.gettime("H:i:s d-mD"));
  }
  if (Temp <= 0) {
    delay(100);
    lcd2.setCursor(15 , 0);
    lcd2.print("*");

  } else {
    (Temp > 0); {
      lcd2.setCursor(15, 0);                   // устанавливаем курсор в позицию: столбец 0, строка 1
      lcd2.print(" ");
    }
   if (digitalRead (rele) == HIGH ){
       delay(100);
      lcd.setCursor(15 , 0);
      lcd.print("#");
    } else {
      lcd.setCursor(15, 0);                   // устанавливаем курсор в позицию: столбец 0, строка 1
      lcd.print(" ");
    } 
     kon = digitalRead(  but );
    // если состояние кнопки - истина, выполняем действие
    if( kon == HIGH ){
        // цикл от 0 до ..., с шагом 1
        for(int j=0; j<105; j++ ){
            digitalWrite( rele, HIGH );
         
          delay(200);
           j>105;
           digitalWrite( rele, LOW );
    }
    }
  }        }
   

 

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

У автора кода спроси. 

ВладимирN
Offline
Зарегистрирован: 14.11.2019

Ну так я его из разных кусков кода собрал. боюсь не один автор уже и не узнает что это его код был. 

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

тогда разные куски по очереди и настраивай. 

ВладимирN
Offline
Зарегистрирован: 14.11.2019

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

 

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

Цикл работает так, как написан. Говорить, что он не работает - нельзя.

Первый виток цикла:

В строке 207 включается реле.

Задержка 200.

Строка 210 - для мебели, ничего не делает.

Строка 211 - выключение реле.

Второй виток цикла:

В строке 207 включается реле.

И т.д.

Можно посчитать, но не интересно, сколько пройдет времени между выключением реле (в конце первого витка цикла) и включением его в начале второго витка цикла. Да всё просто. 0 (ноль). Точнее достаточно малый промежуток времени, за который реле даже не успеет чухнуться (выключиться), потому что реле - штука медленная, чтобы изменить состояние, нужно подождать. Поэтому кажется, что цикл не работает.

Для тупой проверки, поставь после строки 211 задержку. И тогда цикл будет добивать это реле, каждый раз 105 раз включать и выключать реле. Только лучше сразу закупить запас релюшек, потому что такая игра им не понравится.

Удачи!

ВладимирN
Offline
Зарегистрирован: 14.11.2019

может даже и ваша строчка в нём есть. кто ведает

ВладимирN
Offline
Зарегистрирован: 14.11.2019

я так понимаю что мне теперь надо как-то объявить что J = rele/ или я совсем боран... извините за назойливость. спасибо. и по чему он отдельно от общего кода работает.как положено и включает реле на заданный интервал. 

ВладимирN
Offline
Зарегистрирован: 14.11.2019

DetSimen пишет:

тогда разные куски по очереди и настраивай. 

так он из этих кусков настроенных и собран. вот только фор и не работает. я так понимаю от вас помощи ждать не придется. вы так решили своё фи сказать. поздравляю с этой задачей вы справелись на 1000 %

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

скажи мне, что у тебя делает строка 210?

ВладимирN
Offline
Зарегистрирован: 14.11.2019

DetSimen пишет:

скажи мне, что у тебя делает строка 210?

проверяет ровно ли J заданной сумме или нет. 

ВладимирN
Offline
Зарегистрирован: 14.11.2019

ВладимирN пишет:

DetSimen пишет:

скажи мне, что у тебя делает строка 210?

проверяет ровно ли J заданной сумме или нет. 

извините я правильно вас понял мне надо как-то J  в отдельном условии указать что пока J = 1...  то реле включать реле как только равна нулю так выключить. 

ВладимирN
Offline
Зарегистрирован: 14.11.2019

DetSimen пишет:

скажи мне, что у тебя делает строка 210?

извините я правильно вас понял мне надо как-то J  в отдельном условии указать что пока J = 1...  то реле включать  как только  J =равна нулю так выключить. 

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

Посчитай, сколько времени у тебя выполняется один раз loop, например, при открытых дверях и включенном двигателе?

750+500+1000+200+200... уже около 2.5 секунд. А если еще и кнопка kon нажата, то больше 20 секунд - это один проход по loop.

Это для того, чтобы не говорить, что цикл "не работает". Работает ровно так, как написан.

В Arduino IDE есть в примерах Blink без delay - это и есть простой пример, как обходиться без delay (используй для того, чтобы включить/выключить реле вместо светодиода, для начала). На форуме море тем и вопросов как обойтись без delay. Разбираться и делать как надо. Других вариантов нет. Впрочем, можно заказать - сделают, если самому не получится.

Сначала разберись, что делает программа. Что делает каждая строка. Для чего там нужны задержки. Потом выбрось инициализацию датчиков и дисплея за пределы loop, вынеси в setup. Затем, примерно, нужно определить, какое время выполнения одного прохода loop приемлимо. Например, сейчас, от 2 до 25 секунд - это явно перебор. Вот тогда возникнет понимание, насколько быстро нужно выполнить loop и возможно ли это вообще. Разделить задачу не подзадачи. Выделить среди них наиболее приоритетные, какие нужно выполнять каждый раз, а какие - не обязательно, а достаточно, например, раз в 5-10 секунд.

Звук (tone) - это тоже задержка. delay натыканы как попало, такое впечатление, что они методом тыка вставлялись без понимания общей задачи.

Поверь, что никто тебе не даст пример, как избавиться от delay в твоем случае. Для этого нужно переписать весь loop. Т.е. сделать за тебя всё задачу. Ну может и есть тут добрые дядя, хз, только не я, уж извини.

 

ВладимирN
Offline
Зарегистрирован: 14.11.2019

kisoft пишет:

Посчитай, сколько времени у тебя выполняется один раз loop, например, при открытых дверях и включенном двигателе?

750+500+1000+200+200... уже около 2.5 секунд. А если еще и кнопка kon нажата, то больше 20 секунд - это один проход по loop.

Это для того, чтобы не говорить, что цикл "не работает". Работает ровно так, как написан.

В Arduino IDE есть в примерах Blink без delay - это и есть простой пример, как обходиться без delay (используй для того, чтобы включить/выключить реле вместо светодиода, для начала). На форуме море тем и вопросов как обойтись без delay. Разбираться и делать как надо. Других вариантов нет. Впрочем, можно заказать - сделают, если самому не получится.

Сначала разберись, что делает программа. Что делает каждая строка. Для чего там нужны задержки. Потом выбрось инициализацию датчиков и дисплея за пределы loop, вынеси в setup. Затем, примерно, нужно определить, какое время выполнения одного прохода loop приемлимо. Например, сейчас, от 2 до 25 секунд - это явно перебор. Вот тогда возникнет понимание, насколько быстро нужно выполнить loop и возможно ли это вообще. Разделить задачу не подзадачи. Выделить среди них наиболее приоритетные, какие нужно выполнять каждый раз, а какие - не обязательно, а достаточно, например, раз в 5-10 секунд.

Звук (tone) - это тоже задержка. delay натыканы как попало, такое впечатление, что они методом тыка вставлялись без понимания общей задачи.

Поверь, что никто тебе не даст пример, как избавиться от delay в твоем случае. Для этого нужно переписать весь loop. Т.е. сделать за тебя всё задачу. Ну может и есть тут добрые дядя, хз, только не я, уж извини.

 

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

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

На счет помойки - это зря. Какой-то опыт приобрёл. Положительный и отрицательный. Если есть цель, то нужно использовать полученный опыт, читать/искать, как решают другие подобные задачи, разбираться почему и как они реализуют то или иное действие. Это жизнь. Если просто проехаться по магазинам автозапчастей и накупить разных запчастей от разных марок, то после сборки Феррари не получится. Или, во всяком случае, придётся очень потрудиться. Это уже потом, когда возникнет понимание, можно будет придумывать своё (впрочем всё уже давно написано до нас).

Иногда, когда нет понимания, например, у людей получается код, который, типа, работает. Даже если написан полный говнокод. Ура! Только при первой же правке, код ломается и больше не работает. Что за нафиг! Так ничесна! Но такова се ля ви. Вот и меня ждёт моя работа, пойду дальше свой говнокод писать.

 

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

Что то не пойму, кто кого пытается н****ть.
Тут же таймеры аппаратные , тут же , "не знаю как убрать delay()".

ВладимирN
Offline
Зарегистрирован: 14.11.2019

Kakmyc пишет:
Что то не пойму, кто кого пытается н****ть. Тут же таймеры аппаратные , тут же , "не знаю как убрать delay()".
не кого не н.....ь как есть так и говорю. собрал код из разных составляющих. не всё сам понимаю что в нём происходит. вот и прошу совета чтоб на моём скейче ткнули носом в ошибки. так как на примере будет нагляднее. вот в самом начале изучения ардуинки я не как не мог въехать вообще не во что пока на примере тот который мне нужен я не прочитал код с подробным описания действий... 

ВладимирN
Offline
Зарегистрирован: 14.11.2019

ВладимирN пишет:

Kakmyc пишет:
Что то не пойму, кто кого пытается н****ть. Тут же таймеры аппаратные , тут же , "не знаю как убрать delay()".
не кого не н.....ь как есть так и говорю. собрал код из разных составляющих. не всё сам понимаю что в нём происходит. вот и прошу совета чтоб на моём скейче ткнули носом в ошибки. так как на примере будет нагляднее. вот в самом начале изучения ардуинки я не как не мог въехать вообще не во что пока на примере тот который мне нужен я не прочитал код с подробным описания действий... 

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

ВладимирN
Offline
Зарегистрирован: 14.11.2019
unsigned long timing; // Переменная для хранения точки отсчета
void setup() {
 Serial.begin(9600);
}

void loop() {
/* 
 В этом месте начинается выполнение аналога delay()
 Вычисляем разницу между текущим моментом и ранее сохраненной точкой отсчета.
 Если разница больше нужного значения, то выполняем код. 
 Если нет - ничего не делаем 
*/
 if (millis() - timing > 10000){ // Вместо 10000 подставьте нужное вам значение паузы 
  timing = millis(); 
  Serial.println ("10 seconds");
 }
вот что мне данный  пример может  подсказать как мне делей заменить кто скажет. можете меня шапками забросать но всё что я понял из данного примера что надо в начале объявить переменную unsigned long timing; // Переменная для хранения точки отсчета/ куда я должен if (millis() - timing > 10000){ // Вместо 10000 подставьте нужное вам значение паузы 
  timing = millis(); 
  Serial.println ("10 seconds");я

это всё и в какой последовательности должен писать.

ВладимирN
Offline
Зарегистрирован: 14.11.2019

ВладимирN пишет:

unsigned long timing; // Переменная для хранения точки отсчета
void setup() {
 Serial.begin(9600);
}

void loop() {
/* 
 В этом месте начинается выполнение аналога delay()
 Вычисляем разницу между текущим моментом и ранее сохраненной точкой отсчета.
 Если разница больше нужного значения, то выполняем код. 
 Если нет - ничего не делаем 
*/
 if (millis() - timing > 10000){ // Вместо 10000 подставьте нужное вам значение паузы 
  timing = millis(); 
  Serial.println ("10 seconds");
 }
вот что мне данный  пример может  подсказать как мне делей заменить кто скажет. можете меня шапками забросать но всё что я понял из данного примера что надо в начале объявить переменную unsigned long timing; // Переменная для хранения точки отсчета/ куда я должен if (millis() - timing > 10000){ // Вместо 10000 подставьте нужное вам значение паузы 
  timing = millis(); 
  Serial.println ("10 seconds");я

это всё и в какой последовательности должен писать.

 if (digitalRead(LD) ==  LOW && RpM > 1000 ) {  // открытая дверь лв
106     delay(200);
107     tone(3, 2000, 200);
108     lcd.clear();
109     lcd.print("LEVAYA DVER");
110     lcd.setCursor(0, 1);                   // устанавливаем курсор в позицию: столбец 0, строка 1
111     lcd.print(time.gettime("H:i:s d-mD"));
112  
113   else {
114     digitalWrite(buzer, LOW);
115     lcd.setCursor(0, 1);                   // устанавливаем курсор в позицию: столбец 0, строка 1
116     lcd.print(time.gettime("H:i:s d-mD"));
117

 

может хоть кто нибудь написать вот на даном примере вместо делей подставить (millis)

чтоб нагляднее было. спасибо.

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

А почему кто то должен писать за вас, если у вас даже нет желания понять что происходит в данном коде ?
Даже если у кого то есть свободное время , то почему он должен его тратить на ваше обучение ?

Если вы не поняли чего то из примера, то это означает только то, что это не ваше.

Объясните для начала , хотя бы себе, пошагово, что должна делать ваша программа.
Написание кода , это 5-40%(в зависимости от скилла) работы непосредственно в редакторе.
Все остальное это обдумывание алгоритма и чтение мануалов.

Поясню про millis():
Это системная функция внутри которой 32-битная беззанковая переменная раз в миллисекунду увеличивает свое значение на 1.

Т.е. в любой момент времени мы можем узнать , сколько времени прошло с начала работы программы.
А дальше уже нужно включить логику и использовать это знание .
Как мне включить за вас вашу логику ?
Моя логика мне вот подсказывает, что если нам нужно отмерить отрезок времени, то нам нужно запомнить значение на начало отрезка и сравнивать время начала с временем которое будет концом отрезка. А это простая арифметика.
Просто переодически сравниваем :
millis()-timer_start>=interval;
На первое значение мы повлиять не можем , оно без нас тикает и растет раз в мс. Второе мы запомнили, когда начали отсчёт. Ну а когда их разность станет равна (или превысит, потому , что не факт что цикл у нас будет проходить быстрее 1мс и вариант "=" мы можем просто проскочить, поэтому ">="), то третье значение это и будет наша задержка.

Теперь за вас придумать как это использовать в вашем коде ?
Репетиторство денег стоит.
Если интересно , то для этого есть другой раздел.

sadman41
Offline
Зарегистрирован: 19.10.2016

Кактус, для "бизнеса" есть другой раздел.

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

sadman41 пишет:
Кактус, для "бизнеса" есть другой раздел.

не придирайся, Кактус потратил 20 строк на обьяснение по сути и лишь в паре последних написал "про бизнес". по мне так совершенно нормально.

По сути я с ним полностью согласен - если человек не понимает даже примеров из специальных туториалов для новичков - то остается только нанимать платных репетиторов

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

ВладимирN - вы прислушайтесь к тому, что написал kisoft, если позабыли перечитайте еще раз.

Прежде чем внедрять в программу millis(). вам нужно разобраться. что у вас вообще каждая часть кода делает. Например. вы вот собрались переписывать цикл for . А зачем? - в той программе. что вы показали. цикл фор вообще не нужен, вместо него можно вставить просто 20-секундуную задержку - все будет работать даже лучше.

так зачем тратить время на переписывание кода, который ничего не делает?

ВладимирN
Offline
Зарегистрирован: 14.11.2019

b707 пишет:

ВладимирN - вы прислушайтесь к тому, что написал kisoft, если позабыли перечитайте еще раз.

Прежде чем внедрять в программу millis(). вам нужно разобраться. что у вас вообще каждая часть кода делает. Например. вы вот собрались переписывать цикл for . А зачем? - в той программе. что вы показали. цикл фор вообще не нужен, вместо него можно вставить просто 20-секундуную задержку - все будет работать даже лучше.

так зачем тратить время на переписывание кода, который ничего не делает?

да даная программа лишь для опытов чтоб на использование ее в деле наглядно было работу свою наблюдать ведь просто моргания лампочкой скучное занятия. да не спорю и полностью с вами согласен моих знаний мало. но для сего я к вам и обратился к (светилам кода и скейча) а почитав ваши отзывы складывается впечатления что вы меня отговариваете от не нужного занятия. чего мозг паришь пойди купи отдельно часики отдельно. то и это. а у меня проблема. дурная голова рукам покоя не даёт. да и опыт со знаниями лишними не бывают. а один отзыв вообще убил человек потратил кучу времени на изложения своих мыслей. какой я далёкий а по теме не чего не сказал. не ужели не понятно. то что я не понимаю я и сам знаю мне бы носом ткнуть или пример на моём коде показать куда бы меньше времени заняло. чем доказывать глупцу что он глуп. причем он (глупец) и сам то знает что глуп. вот только в чём его глупость не кто так и не говорит    

ВладимирN
Offline
Зарегистрирован: 14.11.2019

Kakmyc пишет:
А почему кто то должен писать за вас, если у вас даже нет желания понять что происходит в данном коде ? Даже если у кого то есть свободное время , то почему он должен его тратить на ваше обучение ? Если вы не поняли чего то из примера, то это означает только то, что это не ваше. Объясните для начала , хотя бы себе, пошагово, что должна делать ваша программа. Написание кода , это 5-40%(в зависимости от скилла) работы непосредственно в редакторе. Все остальное это обдумывание алгоритма и чтение мануалов. Поясню про millis(): Это системная функция внутри которой 32-битная беззанковая переменная раз в миллисекунду увеличивает свое значение на 1. Т.е. в любой момент времени мы можем узнать , сколько времени прошло с начала работы программы. А дальше уже нужно включить логику и использовать это знание . Как мне включить за вас вашу логику ? Моя логика мне вот подсказывает, что если нам нужно отмерить отрезок времени, то нам нужно запомнить значение на начало отрезка и сравнивать время начала с временем которое будет концом отрезка. А это простая арифметика. Просто переодически сравниваем : millis()-timer_start>=interval; На первое значение мы повлиять не можем , оно без нас тикает и растет раз в мс. Второе мы запомнили, когда начали отсчёт. Ну а когда их разность станет равна (или превысит, потому , что не факт что цикл у нас будет проходить быстрее 1мс и вариант "=" мы можем просто проскочить, поэтому ">="), то третье значение это и будет наша задержка. Теперь за вас придумать как это использовать в вашем коде ? Репетиторство денег стоит. Если интересно , то для этого есть другой раздел.
  а в магазине ещё проще купил  и не паришься. что вы данным сообщением до меня донести хотите тоже в толк не пойму. знаете повар вам тоже может сказать да что тут думать берёшь капусту, морковку. итд.. режешь, чистишь и варишь. но ведь только ему известно сколько и в кокой последовательности всё это варится и жарится. 

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

Владимир, вы совсем ничего сами читать не хотите? - тогда ищите себе другой форум, писать код и разбирать стандартные примеры за вас никто не будет

По предыдущему ответу отлично видно, что вы даже не пытались вникнуть в то, что вам написали.

Удачи

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

Дак он реально думает, что ему 5 лет института за 3 сообщения разжуют. Наивный. 

ВладимирN
Offline
Зарегистрирован: 14.11.2019

DetSimen пишет:

Дак он реально думает, что ему 5 лет института за 3 сообщения разжуют. Наивный. 

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

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

Выше у тебя не код, а яйца всмятку.  Ты можешь своими словами написать алгоритм своих дествий после того как жена тебе скажет: "Выключи суп через 15 минут". 

Напиши. Потом будем переводить твои слова в millis() если я еще трезвый буду

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

ВладимирN пишет:

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

вы никак не хотите понять, что "переписывать код на миллис" ради самого переписывания - бред. Нужно понимать, зачем это делается? - если вы хотите за время этого delay(200) сделать что-то еще в программе - то надо значть что и где. А этого в коде нет.

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

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

DetSimen пишет:

Дак он реально думает, что ему 5 лет института за 3 сообщения разжуют. Наивный. 

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

ВладимирN
Offline
Зарегистрирован: 14.11.2019

b707 пишет:

ВладимирN пишет:

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

вы никак не хотите понять, что "переписывать код на миллис" ради самого переписывания - бред. Нужно понимать, зачем это делается? - если вы хотите за время этого delay(200) сделать что-то еще в программе - то надо значть что и где. А этого в коде нет.

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

то что он работает об этом мне lcd подсказывает на нём всё тикает и мерцает как и прописано в коде я хочу уйти от делея вот моя задача. если я кого от более важных тем отвлекаю прошу понять и простить.

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

Все. Вопросов больше не имею. Пойду лучше тяпну с устатку.

ВладимирN
Offline
Зарегистрирован: 14.11.2019

b707 пишет:

DetSimen пишет:

Дак он реально думает, что ему 5 лет института за 3 сообщения разжуют. Наивный. 

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

то что не умею согласен. всё что я прошу на куске кода пример привести. что бы мне было оталкиватся  как дальше свой вопрос сформулировать. если у меня наглядного примера нет. как я вам могу его сформулировать. мы свами как на разных языках говорим. я понимаю что нужно создать переменную в которой будет храница время запуска ардуино но как с ней с этой переменной дальше работать не знаю. сухой пример про милис раз 300 перечитал а вот толк так и не возьму что да как

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

DetSimen пишет:

Все. Вопросов больше не имею. Пойду лучше тяпну с устатку.

Писец твоему супу и от жены писец :)

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

ВладимирN пишет:
по теме не чего не сказал. не ужели не понятно. то что я не понимаю я и сам знаю мне бы носом ткнуть или пример на моём коде показать куда бы меньше времени заняло. чем доказывать глупцу что он глуп. причем он (глупец) и сам то знает что глуп. вот только в чём его глупость не кто так и не говорит    

Вот в английском языке есть такое понятие как порядок слов. Меняешь порядок слов и все смысл в топку. Как объяснить русскому, что такое порядок слов. Он же русский и в русском языке на порядок слов можно забить болт.  Вот так и с программированием. Ну если с делеями куда не шло, то с miilis() уже русское нафиг не пройдет. Вот про эту глупость вам и говорят.

Перейти с делай на millis() это перейти с вождения слона на коня(шахматного). Вроде равноценные фигуры, но просчитывать ходы и их последствия сложнее. Вот и тактика меняется и описывать ходы коня приходится иначе.

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

ВладимирN пишет:

[я понимаю что нужно создать переменную в которой будет храница время запуска ардуино но как с ней с этой переменной дальше работать не знаю. сухой пример про милис раз 300 перечитал а вот толк так и не возьму что да как

блин, если вы первый пример не поняли - нафига вам второй?

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

Протираю сертификат потихоньку.  Готовимся вручать. 

ВладимирN
Offline
Зарегистрирован: 14.11.2019

b707 пишет:

ВладимирN пишет:

[я понимаю что нужно создать переменную в которой будет храница время запуска ардуино но как с ней с этой переменной дальше работать не знаю. сухой пример про милис раз 300 перечитал а вот толк так и не возьму что да как

блин, если вы первый пример не поняли - нафига вам второй?

сейчас не понял завтра ещё раз перечитаю как мантру глядь и всплывет светлая мысль

ВладимирN
Offline
Зарегистрирован: 14.11.2019

Всех прошу извинить за потраченное на меня время всем СПАСИБО. громадное. 

bwn
Offline
Зарегистрирован: 25.08.2014

Володимир, вам ведь деда Сёма сделал шикарное предложение (алгоритм написать о времени, жене и супе), чем оно не устраивает, он не прикалывался, кста.  Любая программа начинается с идеи, которая должна быть переложена в алгоритм. И вот либо вы можете алгоритм составить, либо нет.

ВладимирN
Offline
Зарегистрирован: 14.11.2019

bwn пишет:

Володимир, вам ведь деда Сёма сделал шикарное предложение (алгоритм написать о времени, жене и супе), чем оно не устраивает, он не прикалывался, кста.  Любая программа начинается с идеи, которая должна быть переложена в алгоритм. И вот либо вы можете алгоритм составить, либо нет.

переведите.... свой вопрос. не понял

bwn
Offline
Зарегистрирован: 25.08.2014

Вам в #30, Дед предложил расписать определенный алгоритм, с тем чтобы потом показать как сделать это на миллисе. Вы знаете, что значит слово алгоритм и как он составляется?

ВладимирN
Offline
Зарегистрирован: 14.11.2019

bwn пишет:

Вам в #30, Дед предложил расписать определенный алгоритм, с тем чтобы потом показать как сделать это на миллисе. Вы знаете, что значит слово алгоритм и как он составляется?

сейчас вернусь к 30 и гляну задачу спасибо за подсказку.

bwn
Offline
Зарегистрирован: 25.08.2014

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

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

кстати, о замене цикла ФОР миллисами сегодня еще вот тут

http://arduino.ru/forum/programmirovanie/pomogite-novichku-s-plavnym-vkl-i-vykl-lenty#comment-512264

обсуждали и MaksVV ссылку на хороий примерчик кидал

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

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

ТС тут бесплатно за тебя делать не будут. Объяснить попытаются. Если тебе не нужно объяснять, потому, что "ты и сам знаешь, что ты тупой и ничего не поймёшь", тогда тебе тут и делать наверное нечего.

Green
Offline
Зарегистрирован: 01.10.2015

qwone пишет:
Вот в английском языке есть такое понятие как порядок слов. Меняешь порядок слов и все смысл в топку. Как объяснить русскому, что такое порядок слов. Он же русский и в русском языке на порядок слов можно забить болт.

Это да. Сразу же вспомнилось армейское выражение "образ сурка ведёте жизни". Извиняюсь за офф.)

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Green пишет:

qwone пишет:
Вот в английском языке есть такое понятие как порядок слов. Меняешь порядок слов и все смысл в топку. Как объяснить русскому, что такое порядок слов. Он же русский и в русском языке на порядок слов можно забить болт.

Это да. Сразу же вспомнилось армейское выражение "образ сурка ведёте жизни". Извиняюсь за офф.)

Конечно. Вот порядок слов на delay

/*delay_order*/
void setup() {
  Serial.begin(9600);
}
void loop() {
  Serial.println("blok A");
  delay(100);
  Serial.println("blok B");
  delay(200);
  Serial.println("blok C");
  delay(400);
}

А вот порядок слов с millis()

/*millis_order*/
const byte sA = 0;
const byte sB = 10;
const byte sC = 20;
byte state;
uint32_t past;
void set( byte s) {
  state = s;
  past = millis();
  switch (state) {
    case sA:
      Serial.println("blok A"); break;
    case  sB:
      Serial.println("blok B"); break;
    case  sC:
      Serial.println("blok C"); break;
  }
}

void setup() {
  Serial.begin(9600);
  set(sA);
}
void loop() {
  switch (state) {
    case sA:
      if (millis() - past >= 100)set(sB);
      break;
    case  sB:
      if (millis() - past >= 200)set(sC);
      break;
    case  sC:
      if (millis() - past >= 400)set(sA);
      break;
  }
}

Но как очередному новичку "русскому", которому под сраку лет, объяснить что надо включать голову и писать правильно, а не как бог на русскую душу положит , и потом этот бред выложит на "русский" форум, потому что "русские своих не бросают" :))