Автоматизация оборотов хх на карбюраторных авто

gaara
Offline
Зарегистрирован: 26.03.2014
int sensorValue = digitalRead(RPMpin);

тоесть надо выкинуть вообще? почему аналоговый, я вроде расчитываю на цифровой датчик

gaara
Offline
Зарегистрирован: 26.03.2014

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

astral0
Offline
Зарегистрирован: 26.03.2013

Насколько я знаю, однократно выполняемый код надо пихать в void setup() {...}, а многократно выполняемый - в void loop() {...}

 

gaara
Offline
Зарегистрирован: 26.03.2014

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

gaara
Offline
Зарегистрирован: 26.03.2014
#include <Servo.h>
#include <OneWire.h>// Инициализация библиотеки шины OneWire.
#include <DallasTemperature.h>// Инициализация библиотеки термодатчиков.

#define ONE_WIRE_BUS 10// Подключение цифрового вывода датчика к 10-му пину Ардуино.
#define RPMpin 2 // датчик Холла

long microsold = 0;
int rpm = 0;

OneWire oneWire(ONE_WIRE_BUS);// Запуск интерфейса OneWire для подключения OneWire устройств.
 DallasTemperature sensors(&oneWire);// Указание, что устройством oneWire является термодатчик от  Dallas Temperature.
Servo myservo; // привод

 
void setup() {
  Serial.begin(9600);
  digitalWrite(RPMpin, 1);
  attachInterrupt(0, RPM, FALLING);
  myservo.attach(11); // привод на 11 порт.
  sensors.begin(); // Запуск сенсора.
  sensors.requestTemperatures(); // Команда опроса температуры.
  if(sensors.getTempCByIndex(0)<40){myservo.write(90);} //Если температура меньше заданной серво в 90
}
 
void loop(void) {
  sensors.requestTemperatures(); // Команда опроса температуры.
  Serial.print("T0=");
  Serial.println(sensors.getTempCByIndex(0)); // Печать в порт температуры
  Serial.println(rpm, DEC); // об/мин
  delay(200);
    if(sensors.getTempCByIndex(0)>40){myservo.write(0);} //Если температура больше заданной серво в 0
    if (digitalRead(RPMpin)>2500){myservo.write(30);} //Если оборотов больше заданных, серво в 30
}

void RPM (){
  rpm = (1000000.0/(micros() - microsold))*60;
  microsold = micros();
}

скажите пожалуйста, на сколько всё правельно и как закончить тем, чтобы в какой то момент когда температура дошла до поворота сервы в 0 от датчика холла больше не чего не зависело, тоесть отключилась схема до следующего поворота ключа?

gaara
Offline
Зарегистрирован: 26.03.2014

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

 

if(sensors.getTempCByIndex(0)>40){myservo.write(0);} //Если температура больше заданной серво в 0

 

leshak
Offline
Зарегистрирован: 29.09.2011

gaara пишет:

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

Нет, не так, смотрите на свой же код выше. У вас есть какой-то датчик. У него есть ПОКАЗАНИЯ (температурный, оборотов, фазы луны) - не важно. Просто "показания датчика". Какое ЗНАЧЕНИЕ. У вас есть ТАБЛИЦА. Где прописано какому показанию датчика какое положение сервы должно быть.
Вы с какой-то переодичностью:

1. Сняли показание датчика
2. По табличке (это ваш набор IF-ов) выяснили "какой должен быть угол сервы"
3. Дали серве стать в этот угол.

 

Все. Далее вы повторяете и повторяете эти три пункта. Где стоит сейчас серва - вам не важно. Если не стоит в требуемом положении - значит встанет. Если уже стоит - ну ничего страшного. Значит будет стоять где стояла.

Это как выключатель света. Если вы один раз клацнули выключателем и включили свет. То потом можете хоть 25-ть раз нажимать выключатель в тоже положение. Свет будет продолжать гореть.
Это если Васе, каждые пять секунд говорить "залезь на подоконник" (а он со вчера не слазил с него), то он взбеленится и даст в глаз. А серва - она терпеливая. "На подоконник, так на подоконник".

P.S. Вообщем не ищите сложнойстей там где их нет. У вас уже более-менее рабочий код был. Теперь - пробовать. 

leshak
Offline
Зарегистрирован: 29.09.2011

gaara пишет:

 или например ещё как мне думается проще, просто отследить исполнена ли эта функция или нет 

Проще "дать команду серве и подождать". Если у вас серва поворачивается на 180 град. за 1 сек., дав команду и выждав 1 сек. вы всегда уверенны что она стоит там где вы сказали. Это самое простое.

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

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

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

gaara
Offline
Зарегистрирован: 26.03.2014

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

  if(sensors.getTempCByIndex(0)>40){myservo.write(0);} //Если температура больше заданной серво в 0
    else if (digitalRead(RPMpin)>2500){myservo.write(30);} //Если оборотов больше заданных, серво в 30

 

gaara
Offline
Зарегистрирован: 26.03.2014
#include <Servo.h>
#include <OneWire.h>// Инициализация библиотеки шины OneWire.
#include <DallasTemperature.h>// Инициализация библиотеки термодатчиков.

#define ONE_WIRE_BUS 10// Подключение цифрового вывода датчика к 10-му пину Ардуино.
#define RPMpin 2 // датчик Холла

long microsold = 0;
int rpm = 0;

OneWire oneWire(ONE_WIRE_BUS);// Запуск интерфейса OneWire для подключения OneWire устройств.
 DallasTemperature sensors(&oneWire);// Указание, что устройством oneWire является термодатчик от  Dallas Temperature.
Servo myservo; // привод

 
void setup() {
  Serial.begin(9600);
  digitalWrite(RPMpin, 1);
  attachInterrupt(0, RPM, FALLING);
  myservo.attach(11); // привод на 11 порт.
  sensors.begin(); // Запуск сенсора.
  sensors.requestTemperatures(); // Команда опроса температуры.
  if(sensors.getTempCByIndex(0)<40){myservo.write(90);} //Если температура меньше заданной серво в 90
}
 
void loop(void) {
  sensors.requestTemperatures(); // Команда опроса температуры.
  Serial.print("T0=");
  Serial.println(sensors.getTempCByIndex(0)); // Печать в порт температуры
  Serial.println(rpm, DEC); // об/мин
  delay(200);
    if(sensors.getTempCByIndex(0)>40){myservo.write(0);} //Если температура больше заданной серво в 0
    else if (digitalRead(RPMpin)>2500){myservo.write(30);} //Если оборотов больше заданных, серво в 30
  
}

void RPM (){
  rpm = (1000000.0/(micros() - microsold))*60;
  microsold = micros();
}

вот полный код как мне представляется)))))

gaara
Offline
Зарегистрирован: 26.03.2014

Ну что граждане хорошие, должно заработать? :)

leshak
Offline
Зарегистрирован: 29.09.2011

Неа

gaara
Offline
Зарегистрирован: 26.03.2014

Почему нет, подновитесь пожалуйста :)

gaara
Offline
Зарегистрирован: 26.03.2014

Без спорно, тот код который только с датчиком будет пробываться и стоять он будет на моем мотоцикле, но хочется еще и другой мотег усовершенствовать :)

leshak
Offline
Зарегистрирован: 29.09.2011

Ну, к пример строка (33). Максимально подробно опишите что она делает (какие действия будет предпренимать ардуина ее выполняя). Переведите ее на "человеческий язык" (только переведите именно "что делает строка", а не повторите "что вы хотели сделать"). Представте что вы микроконтроллер (который ничего не знает про подсос и т.п.) и вы читаете и выполняете "инструкцию". 

gaara
Offline
Зарегистрирован: 26.03.2014

Пока железок то нету все равно, по этому эксперименты пока с кодом ))))

gaara
Offline
Зарегистрирован: 26.03.2014

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

gaara
Offline
Зарегистрирован: 26.03.2014

Я пытаюсь сделать так как понимаю, если делаю, что то не так, то направте меня пожалуйста, подскажите как лучше сделать ? :)

leshak
Offline
Зарегистрирован: 29.09.2011

gaara пишет:

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

Это вы описали "что вы хотели сказать сделать". А какие инструкции вы дали контроллеру?
Ну нету в C/C++ таких понятий как "проверит обороты". Есть переменные, функции, условные операторы.

Ладно, давайте по другому... как по вашему, в 33-ть строке, ардуино проверит обороты?

То что ВЫ хотели, проверить обороты - это и так понятно. А вот в строке 33 - я этого не вижу. Где там проверка оборотов? 

gaara
Offline
Зарегистрирован: 26.03.2014

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

gaara
Offline
Зарегистрирован: 26.03.2014

Я кстати спрашивал тут, как снять и передать показания датчика, ответ дали if вроде так :)

leshak
Offline
Зарегистрирован: 29.09.2011

gaara пишет:

Вот теперь все понятно, сейчас буду искать как проверить обороты :) 

Не.... как говорится "а теперь заглуши двигатель, поставь на ручник выйди и посмотри что ты натворил". Так учатся парковатся :)

Вам все равно нужно учится читать код. Понимать "что он делает". И свой и чужой. Так, все-таки, что будет делаться в (33) строке? Что вы прочитаете/проверите?

gaara пишет:

если не трудно то опишите сами как спросить ардуине у датчика про обороты :)

А вообще-то оно у вас уже есть. Нужно только "взять". Опять-таки нужно учится читать свой код :) Это программирование, а не фэнтези :)  Тут нет "магических заклинаний который нужно знать". Нужно просто понять...

Так что давайте вначале, все-таки разберемся что же все-таки у вас происходит в 33 строке. Вы должны разобратся "почему она неправильная". И не "потому что я leshak так сказал" (я ведь и соврать могу :) или ошибится). Что там происходит?

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

leshak
Offline
Зарегистрирован: 29.09.2011

gaara пишет:

Я кстати спрашивал тут, как снять и передать показания датчика, ответ дали if вроде так :)

Я кстати, несколько раз говорил "лучше показания датчика читать в отдельную переменную", и в If-ах смотреть уже эту переменную.

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

Вы же сами решили "совместить". Ну можно и так. Только так даже обсуждать труднее.

Так, все-таки, в строке (33) показание чего вы снимали по факту?

gaara
Offline
Зарегистрирован: 26.03.2014

И так по факту, он смотрит digitalread на датчик и видит фигу, это я понял и дальше без смысленный текст идет, вроде так :)

leshak
Offline
Зарегистрирован: 29.09.2011

gaara пишет:

И так по факту, он смотрит digitalread на датчик и видит фигу, это я понял и дальше без смысленный текст идет, вроде так :)

Верно. Он смотреть на текущие состояние датчика. А моментальное состояние датчика - не несет нам никакой информации.

Ладно. С этим разобрались.

А что происходит в строках 37-40? Что они делают, зачем нужны?

gaara
Offline
Зарегистрирован: 26.03.2014
Тут труднее, это готовый код, я его впехнул, пока не разбирался , нашел тут на форуме, если не трудно поясните его :)
gaara
Offline
Зарегистрирован: 26.03.2014
Serial.println(rpm, DEC); // об/мин

  int sensorValue = digitalRead(RPMpin);

  if (digitalRead(RPMpin)>1000){myservo.write(0);}

Я так понимаю правильное решение кроется в этих строчках ?

gaara
Offline
Зарегистрирован: 26.03.2014
Serial.println(rpm, DEC); // об/мин

  int sensorValue = digitalRead(RPMpin);

  if (digitalRead(RPMpin)>1000){myservo.write(0);}

Я так понимаю правильное решение кроется в этих строчках ?

astral0
Offline
Зарегистрирован: 26.03.2013

х@йнёй како-то маетесь, элементарейшую программу обсасываете уже хрен знает сколько, одна вода...

gaara, ты задаёшь просто немыслимые вопросы. Пока едет твоё железо, хотя бы азы программирования на ардуине выучи, например тут, как раз очень похожий случай http://arduino.ru/forum/programmirovanie/upravlenie-servoi-cherez-fotorezistorugol-zavisit-ot-osveshcheniya

И вообще, любая программа должна начинаться не с ковыряния кода, а с блок-схемы! Нарисуй блок-схему и сразу станет всё понятно!

gaara
Offline
Зарегистрирован: 26.03.2014

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

astral0
Offline
Зарегистрирован: 26.03.2013

да мне пофиг, это я так просто)

Заказал себе железо. жду.

gaara
Offline
Зарегистрирован: 26.03.2014

ну раз пофиг, то может не составит труда подсказать правельно я сделал или нет ? :)

void loop(void) {
  sensors.requestTemperatures(); // Команда опроса температуры.
  Serial.print("T0=");
  Serial.println(sensors.getTempCByIndex(0)); // Печать в порт температуры
  Serial.println(rpm, DEC); // об/мин
  delay(200);
    if(sensors.getTempCByIndex(0)>40){myservo.write(0);} //Если температура больше заданной серво в 0
    else {int val=digitalRead(RPMpin); if (val>2300){myservo.write(30);}} //Если оборотов больше заданных, серво в 30

 

k_rka
Offline
Зарегистрирован: 11.02.2014

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

Еще вопрос  есть планшет на андроиде. Можно ли  него скетчи на мк заливать?

k_rka
Offline
Зарегистрирован: 11.02.2014

Есть ли в этом Языке команда выхода из цикла? Или перехода на определенную строку (как в паскале гоу ту 20 например)? Если да, то составить несколько циклов под каждую температуру и по мере превышения температуры перескакивать на след. цикл с меньшими оборотами. А уже в каждом из них одно и то же, только нужные обороты разные и в конце условие, которое проверяет текущую температуру и не пора ли переходить к след. циклу

k_rka
Offline
Зарегистрирован: 11.02.2014

Расписать могу только словами т к из языков только паскаль на институтском уровне

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

break

goto

Все есть

Pnewmoslon
Offline
Зарегистрирован: 26.07.2014

100ком и 47ком последовательно. 47к в землю , 100к на 6 вывод коммутатора зажигания(ваз2109), средний контакт делителя на цифровой вход ардуино- это тахометр. температура - датчик штатный, подключение аналогичное на аналоговый вход

Pnewmoslon
Offline
Зарегистрирован: 26.07.2014

Уважаемый Leshak ? прошу вас по наличию свободного времени отписаться мне на эл. почту, для обсуждения вопроса, технически связывающего нас обоих)  gav707090@yandex.ru  заранее благодарю. Александр.

Pnewmoslon
Offline
Зарегистрирован: 26.07.2014

 на серву нельзя подавать 12, максимум 7.4 вольта. иначе хана. а как на счет того чтоб, запитать и ардуину и серву 7 вольтами посредством понижающего преобразователя? http://www.dx.com/ru/p/lm2596-adjustable-step-down-voltage-regulator-buck-converter-module-with-voltmeter-display-for-diy-351220?tc=RUB&gclid=Cj0KEQiAzb-kBRDe49qh9s75m-wBEiQATOxgwY02XIzRMQPSjL-QjtNw40xfayGTknbqMreymELS3iUaAl1O8P8HAQ только контроллер нужно питать через вход внешнего питания. и ни в коем случае не подаать на вход +5 вольт.

Saha pasura
Offline
Зарегистрирован: 06.04.2019

Ребята скинте пожалуйста скетч для автоподсоса ppetia12@gmail.com заранее спасибо........................

bwn
Онлайн
Зарегистрирован: 25.08.2014

Вы, на 4,5 года опоздали.

almaz80
Offline
Зарегистрирован: 09.02.2019

Saha pasura пишет:
Ребята скинте пожалуйста скетч для автоподсоса ppetia12@gmail.com заранее спасибо........................

#include <OneWire.h>
#include <Servo.h>

OneWire ds1  (7);
OneWire ds2  (8);

String res = "";


Servo myservo;  // create servo object to control a servo
// twelve servo objects can be created on most boards

int srv_pos = 0;    // variable to store the servo position
int srv_control_pin = 12;

int srv_pos_max = 170;
int srv_pos_min = 80;

//----------------------------------------------------------------------------
int srv_step = 5;
unsigned long ColdStartTime = 5000;// время прогрема двигателя после которого можно начина регулировать
unsigned long CompensationTime = 90000; //Реально 90 сек. если без движения воздуха.
const float TempOptimal = 22.0;
float delta_temp = 2;
//----------------------------------------------------------------------------
byte type_s;
int led_pin = 13;

byte data[12];
byte addr_ds1[8];// = {0x28, 0xB3, 0x6C, 0x05, 0x05, 0x00, 0x00, 0xC4};
byte addr_ds2[8];
bool temp_sensor_2_found = false;

byte i;
float temp, temp_avg;

float temp1 = 999;

unsigned long start_time, ControlActionTime, NextActionStartTime;
bool ColdStartEnd = false;

float An0, An1;

//==========================================================================================

bool get_sensor(byte addr[8], OneWire ds) {

  // Ищем адрес датчика
  if  (! ds.search  (addr)) {
    ds.reset_search  ();
    delay  (250);
    return false;
  }

  // Проверяем не было ли помех при передаче
  if (OneWire::crc8(addr, 7) != addr[7])
  {
    Serial.println("get_sensor:CRC is not valid!");
    return false;
  }

  // Определяем серию датчика
  switch (addr[0])
  {
    case 0x10:
      //Chip = DS18S20
      type_s = 1;
      break;
    case 0x28:
      //Chip = DS18B20
      type_s = 0;
      break;
    case 0x22:
      //Chip = DS1822
      type_s = 0;
      break;
    default:
      Serial.println("get_sensor:Device is not a DS18x20 family device.");
      return false;
  }
  return true;
}

//==========================================================================================

float get_temp(byte addr[8], OneWire ds) {

  float celsius;

  digitalWrite(led_pin, HIGH);

  ds.reset  ();
  ds.select  (addr);   // Выбираем адрес
  ds.write  (0x44, 1); // Производим замер, в режиме паразитного питания

  delay  (750); // maybe 750ms is enough, maybe not
  // we might do a ds.depower  () here, but the reset will take care of it.

  ds.reset  ();
  ds.select  (addr);
  ds.write  (0xBE); // Считываем оперативную память датчика

  for  (i = 0; i < 9; i++) { // Заполняем массив считанными данными
    data[i] = ds.read  ();
  }

  // Данные о температуре содержатся в первых двух байтах, переведем их в одно значение и преобразуем в шестнадцатиразрядное число
  unsigned int raw =  (data[1] << 8) | data[0];
  if  (type_s) {
    raw = raw << 3; // 9 bit resolution default
    if  (data[7] == 0x10) {
      raw =  (raw & 0xFFF0) + 12 - data[6];
    }
  }
  else
  {
    byte cfg =  (data[4] & 0x60);
    if  (cfg == 0x00) raw = raw << 3; // 9 bit resolution, 93.75 ms
    else if  (cfg == 0x20) raw = raw << 2; // 10 bit res, 187.5 ms
    else if  (cfg == 0x40) raw = raw << 1; // 11 bit res, 375 ms
    // default is 12 bit resolution, 750 ms conversion time
  }
  celsius =  (float)raw / 16.0;
  digitalWrite(led_pin, LOW);
  return celsius;
};
//=================================================================================
void srv(int pos) {

  if (pos >= srv_pos_max)pos = srv_pos_max;
  if (pos <= srv_pos_min)pos = srv_pos_min;

  srv_pos = pos;

  myservo.write(srv_pos);
  delay(200);
  digitalWrite(srv_control_pin, HIGH);
  //delay(200);
  //myservo.write(srv_pos);
  delay(200);
  digitalWrite(srv_control_pin, LOW);

}
//=================================================================================

void setup  (void) {

  myservo.attach(11);
  analogReference(INTERNAL);
  //analogReference(DEFAULT);
  pinMode(srv_control_pin, OUTPUT);
  pinMode(led_pin, OUTPUT);
  Serial.begin  (9600);

  while (!get_sensor(addr_ds1, ds1));

  temp_sensor_2_found = get_sensor(addr_ds2, ds2);
  if (temp_sensor_2_found)temp1 = get_temp(addr_ds2, ds2);

  temp = get_temp(addr_ds1, ds1); // Получили текущую температуру до начала работы.

  // тест сервы
  //for (srv_pos = srv_pos_min; srv_pos <= srv_pos_max; srv_pos += srv_step)srv(srv_pos);
  //for (srv_pos = srv_pos_max; srv_pos >= srv_pos_min; srv_pos -= srv_step)srv(srv_pos);

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

  if (temp > TempOptimal) srv(srv_pos_max);
  if (temp < TempOptimal) srv(srv_pos_min);

  // засекаем относительное время запуска основного цикла
  start_time = millis();

  while (!ColdStartEnd)
  { temp_avg = (temp_avg + get_temp(addr_ds1, ds1)) / 2; //меряем и усредняем температуру пока ждем
    if ((millis() - start_time) > ColdStartTime) {
      //если машина прогрета то устанавливаем флаг и больше не проверяем
      ColdStartEnd = true;
    }
  }
}
//=============================================================================
void loop  (void) {
  /*Serial.print  ("[");
   for  (i = 0; i < 8; i++)
   {
     Serial.print  ("0x");
     Serial.print  (addr[i], HEX);
   };
   Serial.println  ("]");*/

  temp = get_temp(addr_ds1, ds1); // меряем температуру и усредняем
  temp_avg = (temp_avg + temp) / 2;

  if (temp_sensor_2_found)temp1 = get_temp(addr_ds2, ds2);

  NextActionStartTime = millis() - ControlActionTime;

  if (NextActionStartTime > CompensationTime) {

    if (temp_avg < (TempOptimal - delta_temp)) { // если температура меньше уставочной
      if (srv_pos >= (srv_pos_min + srv_step))
        if (srv_pos == srv_pos_max)
          srv(srv_pos - 25);
      srv(srv_pos - srv_step);
    }

    if (temp_avg > (TempOptimal + delta_temp)) {
      if (srv_pos <= (srv_pos_max - srv_step))
        if (srv_pos == srv_pos_min)
          srv(srv_pos + 20);
      srv(srv_pos + srv_step);
    }

    ControlActionTime = millis();
  }

  /*Serial.print  ("SrvPos:");
  Serial.print  (srv_pos);
  Serial.print  (" TempAvg:");
  Serial.print  (temp_avg);
  Serial.print  (" Temp:");
  Serial.print  (temp);
  Serial.print  (" Temp1:");
  Serial.print  (temp1);
  Serial.print  (" NextAction:");
  Serial.println  (NextActionStartTime);
  */

  res = res + "SrvPos:";
  res = res +  String(srv_pos);
  res = res + (" TempAvg:");
  res = res +  String(temp_avg);
  res = res + (" Temp:");
  res = res +  String(temp);
  res = res + (" Temp1:");
  res = res +  String(temp1);
  res = res + (" 12V:");
  An0 = (float)analogRead(3) * (1.112 / 1024) / (357.0 / (357.0 + 9000.0)); // U = U1 / 360 / (360 + 8950) //0.0386680
  //An0 = analogRead(0);
  res = res +  String(An0);
  res = res + (" AnIn1:");
  An1 = (float)analogRead(1) * (1.112 / 1024) / (360.0 / (360.0 + 9000.0)); // U = U1 / 360 / (360 + 8950) //0.0386680
  //An1 = analogRead(1);
  res = res +  String(An1);
  res = res + (" NxtAct:");
  res = res +  String(NextActionStartTime);
  Serial.println(res);
  res = "";
}

 

almaz80
Offline
Зарегистрирован: 09.02.2019