Как лучше сделать цикл?

SLKH
Offline
Зарегистрирован: 17.08.2015

qwone пишет:

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

Дык вот этим " Когда процессору нечем занятся, то он постоянно включает включенный вентилятор и выключает выключеный вентилятор. Флаг  экономит  производительность процессора" навеяло - можно же по этому принципу производительность D-триггера экономить.  Э?

SLKH
Offline
Зарегистрирован: 17.08.2015

asam пишет:

ua6em пишет:

Осциллографом можно и не увидеть...Такие вещи ловить надо триггером с защёлкой, ...есть у кого такой пробник?

Да прекрасно все ловится осциллографом. Естественно при условии  n*(1 / Tимп) < Fмах осциллографа. Где n обычно равно 2м, но зависить от степени китайскости в определении максимальной рабочей часторы осциллографа.

Нечего там ловить.

asam
asam аватар
Offline
Зарегистрирован: 12.12.2018

SLKH пишет:

asam пишет:

ua6em пишет:

Осциллографом можно и не увидеть...Такие вещи ловить надо триггером с защёлкой, ...есть у кого такой пробник?

Да прекрасно все ловится осциллографом. Естественно при условии  n*(1 / Tимп) < Fмах осциллографа. Где n обычно равно 2м, но зависить от степени китайскости в определении максимальной рабочей часторы осциллографа.

Нечего там ловить.

Вы сейчас про что? То что осцил не сможет словить импульс? Тут я с вами не соглашусь. А если об импульск на пине при повоторной записи того же значения в порт, так про это, естественно, речь и не идет. Конечно там ничего не будет.

Assassinsnake
Offline
Зарегистрирован: 29.01.2018

Наверное я решил свою проблему, но все таки есть нюансы

  if (OutsideT < -50 || EngineT < -50 || InsideT < -50) //если температура датчиков < 50 то
   {
   analogWrite(A1, LOW); //выключаем питание
   }
   
  if (EngineT >= 95  && digitalRead(A1) == LOW) //если температура двигателя >= 95 то
   {
     digitalWrite(A1, HIGH); //включаем питание
   }

  if (OutsideT <= 15 && InsideT < 22 && digitalRead(A1) == LOW) //если температура на улице <= 15 и температура в салоне < 22 то
   {
    digitalWrite(A1, HIGH); //включаем питание
   }
   
  if (InsideT >= 22 && EngineT <= 90 && digitalRead(A1) == HIGH) //если температура в салоне >= 22 и температура двигателя <= 90 то
   {
    digitalWrite(A1, LOW); //выключаем питание
   }
   
  if (OutsideT > 15 && EngineT <= 90 && digitalRead(A1) == HIGH) //если температура на улице > 15 и температура двигателя <= 90 то
   {
    digitalWrite(A1, LOW); //выключаем питание
   }

  delay(1000); //ждем 1 сек

Например:

Если температура в салоне >= 22, а температура двигателя успела поднятся до 91-94 градусов то это условие не сработает 

 if (InsideT >= 22 && EngineT <= 90 && digitalRead(A1) == HIGH) //если температура в салоне >= 22 и температура двигателя <= 90 то
   {
    digitalWrite(A1, LOW); //выключаем питание
   }

и вентилятор продолжит работать. Допустим это пустяк, но если температура будет держаться очень долго 91-94 градуса, то это не правильно и вентилятор будет молотить.

В целом должно работать.
 

Есть ли у кого какие замечания по коду?

SLKH
Offline
Зарегистрирован: 17.08.2015

asam пишет:

SLKH пишет:

asam пишет:

ua6em пишет:

Осциллографом можно и не увидеть...Такие вещи ловить надо триггером с защёлкой, ...есть у кого такой пробник?

Да прекрасно все ловится осциллографом. Естественно при условии  n*(1 / Tимп) < Fмах осциллографа. Где n обычно равно 2м, но зависить от степени китайскости в определении максимальной рабочей часторы осциллографа.

Нечего там ловить.

Вы сейчас про что? То что осцил не сможет словить импульс? Тут я с вами не соглашусь. А если об импульск на пине при повоторной записи того же значения в порт, так про это, естественно, речь и не идет. Конечно там ничего не будет.

Про то, что осциллограф не сможет словить импульс, которого нет.

SLKH
Offline
Зарегистрирован: 17.08.2015

b707 пишет:

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

Таким образом экономится ресурс микросхемы.

Куда обратиться за премией?

В премии отказать - отсуствует новизна подхода :)  Данный принцип давно используетсяв методе EEPROM.update()

У EEPROM лимит перезаписи. А экономить digitalWrite(), если состояние порта при этом не меняется - ещё какая новизна!

Или супержлобство?

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

SLKH пишет:

ua6em пишет:

sadman41 пишет:

Это же легко проверить осциллографом: while(true) {digitalWrite(13,1); delay(500);} 

Осциллографом можно и не увидеть...Такие вещи ловить надо триггером с защёлкой, ...есть у кого такой пробник?

Пробник слепить недолго, всего одна микросхема. Но смысла в нем нет: если бы эта строка генерила иголки, они давно бы себя проявили у кого-то в какой-то схеме с триггерным эффектом.

Вы меня успокоили, но бережоного ...
В копилку добавлю -

if(Temp >= dataTemp[4] && digitalRead(PIN_pump) == 0 )   digitalWrite(PIN_pump,1);  // включить насос
if(Temp <= dataTemp[3] && digitalRead(PIN_pump) == 1 )   digitalWrite(PIN_pump,0);  // выключить насос