Кнопка запуска двигателя

maksim
Offline
Зарегистрирован: 12.02.2012

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

Nikelbak
Nikelbak аватар
Offline
Зарегистрирован: 22.03.2011

_____Сложно сказать зачем так сделано, может одно замыкается/размыкается чуть раньше другого, это надо видеть замок изнутри, а вообще и стартер и ECCS запускаются в одном положении... но может быть так, что ECCS продалжает работать и после того как ключ не в положении ST и на этом проводе (на ECCS) остается 12 вольт.... а выключается ECCS например при отключении зажигания.____

Не там происходит по другому, сначало ключем коммутируется АСС, затем IGN и печ при этом АСС включено, затем одновременно ECCS и Стартер при этом АСС и печ выключино, потом отпускаем ключ и он возвращается в положение IGN и печ и АСС. 

Я в предыдущем своем посте залил новую схемку.

 

maksim
Offline
Зарегистрирован: 12.02.2012

Nikelbak пишет:

Не там происходит по другому, сначало ключем коммутируется АСС, затем IGN и печ при этом АСС включено, затем одновременно ECCS и Стартер при этом АСС и печ выключино, потом отпускаем ключ и он возвращается в положение IGN и печ и АСС.

Я в предыдущем своем посте залил новую схемку.

Я говорил только о положении ключа ST и о том можно ли соединить стартер с ECCS, а не о том как работает все остальное. ECCS разве работает только при старте?

Nikelbak
Nikelbak аватар
Offline
Зарегистрирован: 22.03.2011

 Да, я вот как раз об этом и говорю что цепь ECCS только когда стартует двигатель.

maksim
Offline
Зарегистрирован: 12.02.2012

Уверены? Уверены что ECCS не продолжает работать во время работы двигателя? проверяли мультиметром? Уверены что или стартер или ECCS не может замыкаться/разъеденяться чуть раньше/позже? разбирали замок? Ведь не зря же провода отдельные...

Nikelbak
Nikelbak аватар
Offline
Зарегистрирован: 22.03.2011

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

maksim
Offline
Зарегистрирован: 12.02.2012

Нужно не проводимость замка проверять, а напряжение на этом проводе на заведенном двигателе.

Nikelbak
Nikelbak аватар
Offline
Зарегистрирован: 22.03.2011

 Все проверил. на этом контакте нет напряжения. В книге написано - 34 контакт ECCS - Когда ключ повернут в положение START - Сигнал старт от замка зажигания.

maksim
Offline
Зарегистрирован: 12.02.2012

Тогда их можно параллелить...

Dmitry23
Offline
Зарегистрирован: 16.09.2012

 Вот пример моей программы для запуска двигателя Hyundai accent. Все сыро еще конечно же, но это моя первая программа надеюсь получится сделать ее лучше!

//константы
const int ACCPin =  2; //контакт подключения реле АСС
const int IG2Pin = 3; // контакт подключения доп оборудования
const int IG1Pin = 4; // контакт подключения "зажигание"
const int STARTPin = 5; // контакт подключения реле стартера
const int passengerPin = 8; // контакт контроля нахождения людей в салоне
const int doorPin = 9; // контакт контроля состояния тригеров дверей
const int clutch_pedalPin = 10; //контакт контроля состояния педали сцепления
const int indicatorPin = 11; //контакт контроля состояния индикатора заряда батареи аккумуляторов
const int brakePin = 12; //контакт контроля состояния бензонасоса
const int start_stopButton = 7; // кнопка старт стоп
boolean lastButton = 0;
int Button = LOW;
int ledPin = 13;
int X;
//переменные
int passenger = 0; //переменная для хранения данных с контакта контроля нахождения людей в салоне
int door = 0;//переменная для хранения данных с контакта контроля состояния тригеров дверей
int indicator = 0; //переменная для хранения данных с индикатора заряда АКБ
int brake = 0; //переменная для хранения данных с контакта реле бензонасоса
int startButton = 0; //переменная для хранения данных с кнопки старт стоп
int clutch_pedal = 0; //переменная для хранения данных с контакта контроля педали сцепления

void setup() {
  // задаем режим выхода для порта, подключенного к реле
  pinMode(ACCPin, OUTPUT);
  pinMode(IG2Pin, OUTPUT);
  pinMode(IG1Pin, OUTPUT);
  pinMode(STARTPin, OUTPUT);
  pinMode(ledPin, OUTPUT);
  // задаем режим входа для портов подключенных к кнопкам и датчикам
  pinMode (passengerPin, INPUT);
  pinMode (doorPin, INPUT);
  pinMode (clutch_pedalPin, INPUT);
  pinMode (indicatorPin, INPUT);
  pinMode (brakePin, INPUT);
  pinMode (start_stopButton, INPUT);
  
}
 
void loop()
{
  // код АСС

  passenger = digitalRead (passengerPin); //сохраняем состояние с контакта контроля пассажиров в переменную
  door = digitalRead (doorPin); //сохраняем состояние с контакта контроля тригеров дверей в переменную
  unsigned long currentMillis = millis(); //записываем время в переменную  currentMillis
  if (door == 1 && currentMillis>1) //если дверь открыта и прошло более 1 млСек, ТО
  {
  digitalWrite (ACCPin, HIGH); // Становится под ток реле АСС
 }
  if(currentMillis >900000 && door==0 && passenger == 0 ) //если прошло более 15 мин и дверь закрыта и нет пассажиров в салоне
  {
    delay(1000); //ТО ждем 1 Секунду
    digitalWrite(ACCPin, LOW); //Обесточиваем реле АСС
  } 
  // код запуска
  startButton = digitalRead(start_stopButton);//сохраняем состояние с контакта кнопки в переменную
  clutch_pedal = digitalRead(clutch_pedalPin);//сохраняем состояние с контакта педали сцепления в переменную
  indicator = digitalRead(indicatorPin);//сохраняем состояние с индикатора заряда АКБ в переменную
  brake = digitalRead(brakePin);//сохраняем состояние с контакта реле бензонасоса в переменную
  
  if (startButton == HIGH && lastButton == LOW)
  {
    lastButton = HIGH;
    if (Button == LOW) Button = HIGH;
    else               Button = LOW;
  }
  else
  {
    lastButton = startButton;
  }
  
 
  if(Button==1)
  {
  digitalWrite(IG2Pin, HIGH);
  digitalWrite(IG1Pin, HIGH);
  digitalWrite(ledPin, HIGH);
  if(clutch_pedal == HIGH && indicator == HIGH && brake == HIGH)
  {
   digitalWrite(ledPin, LOW);
   delay (500);
   digitalWrite(ledPin, HIGH);
   delay(500);
   digitalWrite(ledPin, LOW);
   digitalWrite(STARTPin, HIGH);
  }
  else if (indicator == LOW)
  digitalWrite(STARTPin, LOW);
  } 
  if(Button==0)
  {
  digitalWrite(IG2Pin, LOW);
  digitalWrite(IG1Pin, LOW);
  digitalWrite(ledPin, LOW);  
  }
  
  
}
  

 

Mastino
Offline
Зарегистрирован: 03.12.2011

 Ну вот появилось время и у меня. Кто нибудь из понимающих кинте взгляд на схему, нету ли грубых ошибок?

 

maksim
Offline
Зарегистрирован: 12.02.2012

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

maksim
Offline
Зарегистрирован: 12.02.2012

Вот так полевик будет работать

Mastino
Offline
Зарегистрирован: 03.12.2011

понял

Mastino
Offline
Зарегистрирован: 03.12.2011

 какой марки полевик брат?

Mastino
Offline
Зарегистрирован: 03.12.2011

 P.S.по вашей схеме maxim, выходит что когда на пине LOW стартер работает, а когда HIGH не работает?

maksim
Offline
Зарегистрирован: 12.02.2012

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

maksim
Offline
Зарегистрирован: 12.02.2012

 

Mastino пишет:

P.S.по вашей схеме maxim, выходит что когда на пине LOW стартер работает, а когда HIGH не работает?

Нет, транзистор то P-канальный, напряжение на затвор прикладывается относительно +12В, то есть когда на затворе +12В транзистор закрыт, а когда 0В транзистор открыт.

Mastino
Offline
Зарегистрирован: 03.12.2011

 не знаю почему но в симуляторе взрывается транзистор если подаем 5V. или это симулятор глючит?

Mastino
Offline
Зарегистрирован: 03.12.2011

 а если уменьшить вольтаж с 12 до 5 и поставить диод тогда работает...

maksim
Offline
Зарегистрирован: 12.02.2012

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

Mastino
Offline
Зарегистрирован: 03.12.2011

 Без реле.. Можно ваш skype? :)

maksim
Offline
Зарегистрирован: 12.02.2012
maksimkstovo1985

 

AlexFisher
AlexFisher аватар
Offline
Зарегистрирован: 20.12.2011

Вместо 50 кОм поставте делитель - нет ничего проще, чем уменьшить напряжение с 12 до 5 вольт.

maksim
Offline
Зарегистрирован: 12.02.2012

И что даст делитель?

AlexFisher
AlexFisher аватар
Offline
Зарегистрирован: 20.12.2011

Делитель уменшит управляющее напряжение на затворе транзистора до 5 вольт. 

maksim
Offline
Зарегистрирован: 12.02.2012

Не понял, оно и так с дуины 5 вольт, а управлять затвором нужно именно 12-ю, так как на сколько я знаю полевые транзисторы управляются тем напряжением, которым и управляют. Схему можно?

AlexFisher
AlexFisher аватар
Offline
Зарегистрирован: 20.12.2011

maksim пишет:

Не понял, оно и так с дуины 5 вольт, а управлять затвором нужно именно 12-ю, так как на сколько я знаю полевые транзисторы управляются тем напряжением, которым и управляют. Схему можно?

Я имел в виду схему с оптроном выше. А с чего бы это "тем напряжением, которым управляют"? Это ток затвора нормируется для этого случая. Вот, взял первый попавшийся p-транзистор IRF5210 - максимальное коммутируемое напряжение 100В, ток 40А, напряжение управления до 20 вольт. Для этого транзистора никаких делителей не потребуется, хотя он стабильно откроется при 5-ти вольтах (максимальный ток 10А), полностью откроется при 10-ти вольтах.

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

Mastino
Offline
Зарегистрирован: 03.12.2011

 Вы меня запутали..:) Так как делать? :) Вчера купил IRF4905, он такой маленький не сгорит ли он? :)

AlexFisher
AlexFisher аватар
Offline
Зарегистрирован: 20.12.2011

 Чего бы ему гореть? Максимальный ток 74А :)

Включайте им втягивающее смело. Не забудте поставить на радиатор. Радиатор должен быть изолирован от корпуса автомобиля. Хватит небольшого радиатора.

Dmitry23
Offline
Зарегистрирован: 16.09.2012

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

const int ACCPin =  2; //контакт подключения реле АСС
const int IG2Pin = 3; // контакт подключения доп оборудования
const int IG1Pin = 4; // контакт подключения "зажигание"
const int STARTPin = 5; // контакт подключения реле стартера
const int passengerPin = 10; // контакт контроля нахождения людей в салоне
const int doorPin = 9; // контакт контроля состояния тригеров дверей
const int clutch_pedalPin = 8; //контакт контроля состояния педали сцепления
const int indicatorPin = 11; //контакт контроля состояния индикатора заряда батареи аккумуляторов
const int brakePin = 12; //контакт контроля состояния ручного тормоза
const int fuelPumpPin = 1; //контакт контроля состояния бензонасоса
const int start_stopButton = 7; // кнопка старт стоп
boolean lastButton = 0;
int Button = LOW;
int ledPin = 13;
int interval = 500;
int previousMillis = 0; 
int ledMig = LOW;
//переменные
int passenger = 0; //переменная для хранения данных с контакта контроля нахождения людей в салоне
int door = 0;//переменная для хранения данных с контакта контроля состояния тригеров дверей
int indicator = 0; //переменная для хранения данных с индикатора заряда АКБ
int brake = 0; //переменная для хранения данных с контакта индикатора ручного тормоза
int fuelPump = 0;//переменная для хранения данных с контакта реле бензонасоса
int startButton = 0; //переменная для хранения данных с кнопки старт стоп
int clutch_pedal = 0; //переменная для хранения данных с контакта контроля педали сцепления

void setup() {
  // задаем режим выхода для порта, подключенного к реле
  pinMode(ACCPin, OUTPUT);
  pinMode(IG2Pin, OUTPUT);
  pinMode(IG1Pin, OUTPUT);
  pinMode(STARTPin, OUTPUT);
  pinMode(ledPin, OUTPUT);
  // задаем режим входа для портов подключенных к кнопкам и датчикам
  pinMode (passengerPin, INPUT);
  pinMode (doorPin, INPUT);
  pinMode (clutch_pedalPin, INPUT);
  pinMode (indicatorPin, INPUT);
  pinMode (brakePin, INPUT);
  pinMode (start_stopButton, INPUT);
  pinMode (fuelPumpPin, INPUT);
  
}
 
void loop()
{
  // код АСС

  passenger = digitalRead (passengerPin); //сохраняем состояние с контакта контроля пассажиров в переменную
  door = digitalRead (doorPin); //сохраняем состояние с контакта контроля тригеров дверей в переменную
  unsigned long currentMillis = millis(); //записываем время в переменную  currentMillis
  if (door == 1 && currentMillis>1 || passenger == HIGH ) //если дверь открыта и прошло более 1 млСек, ТО
  {
  digitalWrite (ACCPin, HIGH); // Становится под ток реле АСС
 }
  if(currentMillis >900000 && door==0 && passenger == 0 ) //если прошло более 15 мин и дверь закрыта и нет пассажиров в салоне
  {
    delay(1000); //ТО ждем 1 Секунду
    digitalWrite(ACCPin, LOW); //Обесточиваем реле АСС
  } 
  // код запуска
  startButton = digitalRead(start_stopButton);//сохраняем состояние с контакта кнопки в переменную
  clutch_pedal = digitalRead(clutch_pedalPin);//сохраняем состояние с контакта педали сцепления в переменную
  indicator = digitalRead(indicatorPin);//сохраняем состояние с индикатора заряда АКБ в переменную
  brake = digitalRead(brakePin);
  fuelPump = digitalRead(fuelPumpPin);//сохраняем состояние с контакта реле бензонасоса в переменную
  if (startButton == HIGH && lastButton == LOW && brake== HIGH)
  {
    lastButton = HIGH;
    if (Button == LOW) Button = HIGH;
    else               Button = LOW;
  }
  else
  {
    lastButton = startButton;
  }
  if(Button==1)
  {
   
  digitalWrite(IG2Pin, HIGH);
  digitalWrite(IG1Pin, HIGH); 
  if (indicator == HIGH){ led();}
  
  
  if(indicator == HIGH && clutch_pedal == HIGH && fuelPump == LOW)
  {
    digitalWrite(STARTPin, HIGH);
    if (clutch_pedal == LOW)
    digitalWrite(STARTPin, LOW);
 
  }
  if (clutch_pedal == LOW)
  digitalWrite(STARTPin, LOW);
  else if (indicator == LOW)
  {
    digitalWrite(STARTPin, LOW);
    digitalWrite(ledPin, HIGH);
  }
  } 
  if(Button==0)
  {
  digitalWrite(IG2Pin, LOW);
  digitalWrite(IG1Pin, LOW);
  digitalWrite(ledPin, LOW);  
  digitalWrite(STARTPin, LOW);
  }
 
  
}
  
void led()
{
  unsigned long currentMillis = millis();
  
     if(currentMillis - previousMillis > interval) 
     {
    // сохраняем время последнего переключения
    previousMillis = currentMillis;  
 
    // если светодиод не горит, то зажигаем, и наоборот
    if (ledMig == LOW)
      ledMig = HIGH;
    else
      ledMig = LOW;
 
    // устанавливаем состояния выхода, чтобы включить или выключить светодиод
    digitalWrite(ledPin, ledMig);
     }
     
   
  
}
  
  

 

Dmitry23
Offline
Зарегистрирован: 16.09.2012

Вот практически готово устройство!!! скоро буду ставить в авто!

печатная плата---

плата без Arduino

и с ним 

ну и со стороны пайки!

Dmitry23
Offline
Зарегистрирован: 16.09.2012

Прошу помощи!!!

Есть код вот он 

const int ACCPin =  9; //контакт подключения реле АСС
const int IG2Pin = 12; // контакт подключения доп оборудования
const int IG1Pin = 10; // контакт подключения "зажигание"
const int STARTPin = 11; // контакт подключения реле стартера
const int passengerPin = 6; // контакт контроля нахождения людей в салоне
const int doorPin = 5; // контакт контроля состояния тригеров дверей
const int clutch_pedalPin = 3; //контакт контроля состояния педали сцепления
const int indicatorPin = 4; //контакт контроля состояния индикатора заряда батареи аккумуляторов
const int brakePin = 2; //контакт контроля состояния ручного тормоза
const int fuelPumpPin = 7; //контакт контроля состояния бензонасоса
const int start_stopButton = 1  ; // кнопка старт стоп
const int safeSist = 8; //имобилайзер
boolean lastButton = 0;
int Button = LOW;
int ledPin = 13;
int interval = 500;
int previousMillis = 0; 
int ledMig = LOW;

//переменные
int passenger = 0; //переменная для хранения данных с контакта контроля нахождения людей в салоне
int door = 0;//переменная для хранения данных с контакта контроля состояния тригеров дверей
int indicator = 0; //переменная для хранения данных с индикатора заряда АКБ
int brake = 0; //переменная для хранения данных с контакта индикатора ручного тормоза
int fuelPump = 0;//переменная для хранения данных с контакта реле бензонасоса
int startButton = 0; //переменная для хранения данных с кнопки старт стоп
int clutch_pedal = 0; //переменная для хранения данных с контакта контроля педали сцепления
int safe = 0;

void setup() {
  // задаем режим выхода для порта, подключенного к реле
  pinMode(ACCPin, OUTPUT);
  pinMode(IG2Pin, OUTPUT);
  pinMode(IG1Pin, OUTPUT);
  pinMode(STARTPin, OUTPUT);
  pinMode(ledPin, OUTPUT);
  // задаем режим входа для портов подключенных к кнопкам и датчикам
  pinMode (passengerPin, INPUT);
  pinMode (doorPin, INPUT);
  pinMode (clutch_pedalPin, INPUT);
  pinMode (indicatorPin, INPUT);
  pinMode (brakePin, INPUT);
  pinMode (start_stopButton, INPUT);
  pinMode (fuelPumpPin, INPUT);
  pinMode (safeSist, INPUT);
}
 
void loop()
{
  // код АСС

  passenger = digitalRead (passengerPin); //сохраняем состояние с контакта контроля пассажиров в переменную
  door = digitalRead (doorPin); //сохраняем состояние с контакта контроля тригеров дверей в переменную
  unsigned long currentMillis = millis(); //записываем время в переменную  currentMillis
  if (door == HIGH) //если дверь открыта , ТО
  {
  digitalWrite (ACCPin, HIGH); // Становится под ток реле АСС
 }
  if(currentMillis >900000 && door==LOW && passenger ==LOW ) //если прошло более 15 мин и дверь закрыта и нет пассажиров в салоне
  {
    digitalWrite(ACCPin, LOW); //Обесточиваем реле АСС
  } 
  // код запуска
  startButton = digitalRead(start_stopButton);//сохраняем состояние с контакта кнопки в переменную
  clutch_pedal = digitalRead(clutch_pedalPin);//сохраняем состояние с контакта педали сцепления в переменную
  indicator = digitalRead(indicatorPin);//сохраняем состояние с индикатора заряда АКБ в переменную
  brake = digitalRead(brakePin); // состояние ручного тормоза
  fuelPump = digitalRead(fuelPumpPin);//сохраняем состояние с контакта реле бензонасоса в переменную
  safe = digitalRead (safeSist);
  if (startButton == HIGH && lastButton == LOW && brake== HIGH)
  {
    lastButton = HIGH;
    if (Button == LOW) Button = HIGH;
    else               Button = LOW;
  }
  else
  {
    lastButton = startButton;
  }
  if(Button==HIGH)
  {
   
  digitalWrite(IG2Pin, HIGH);
  digitalWrite(IG1Pin, HIGH); 
  if (indicator == HIGH){ led();}
  
  
  if(indicator == HIGH && clutch_pedal == HIGH && fuelPump == LOW)
  {
    if( safe == HIGH)
    {
      digitalWrite(STARTPin, HIGH);
    }
   }
  if (clutch_pedal == LOW || safe == LOW)
  digitalWrite(STARTPin, LOW);
  else if (indicator == LOW)
  {
    digitalWrite(STARTPin, LOW);
    digitalWrite(ledPin, HIGH);
  }
  } 
  if(Button==0)
  {
  digitalWrite(IG2Pin, LOW);
  digitalWrite(IG1Pin, LOW);
  digitalWrite(ledPin, LOW);  
  digitalWrite(STARTPin, LOW);
  }
 
  
}
  
void led()
{
  unsigned long currentMillis = millis();
  
     if(currentMillis - previousMillis > interval) 
     {
    // сохраняем время последнего переключения
    previousMillis = currentMillis;  
 
    // если светодиод не горит, то зажигаем, и наоборот
    if (ledMig == LOW)
      ledMig = HIGH;
    else
      ledMig = LOW;
 
    // устанавливаем состояния выхода, чтобы включить или выключить светодиод
    digitalWrite(ledPin, ledMig);
     }
     
   
  
}
  

с 53 строки начинается код для работы ACC в автомобиле!!!

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

хочу сделать таким образом чтобы если ты встал или потерялся контакт на сиденье не пропадало питание на АСС, чтобы если пассажиров на сиденьях нет и двери закрыты реле обесточивалось через 2 минуты, а если пассажиры появились то АСС все время было включено!

Dmitry23
Offline
Зарегистрирован: 16.09.2012

может попробовать вот так


  passenger = digitalRead (passengerPin); //сохраняем состояние с контакта контроля пассажиров в переменную
  door = digitalRead (doorPin); //сохраняем состояние с контакта контроля тригеров дверей в переменную
  
  if (door == HIGH) //если дверь открыта , ТО
  {
  digitalWrite (ACCPin, HIGH); // Становится под ток реле АСС
  }
  if(door==LOW && passenger ==LOW ) //и дверь закрыта и нет пассажиров в салоне
  {
    unsigned long currentMillis = millis(); //записываем время в переменную  currentMillis
    if(currentMillis - previousMillis > interval2)
    {
      previousMillis = currentMillis;
    digitalWrite(ACCPin, LOW); //Обесточиваем реле АСС
  } 
  }

 

Mastino
Offline
Зарегистрирован: 03.12.2011

С помощью leshak`a – firmware, maksim`a – PCB design, вот и моя кнопка.

Все как и писал раньше, только еще добавилось управление webasto(автономный предпусковой подогреватель двигателя). Webasto управляется нажав на кнопку - закрыть 3 раза, и выключается нажав один раз - открыть. Дистанционный пульт заводской! - Никого колхоза :) Встроено и множество других функций, слежение за вольтажом акумулятора, слежение за температурой тосола, слежение нажата ли педаль тормоза, управление климат контролем и так далее..

http://www.youtube.com/watch?v=2Yi3lukcjrU

maksim
Offline
Зарегистрирован: 12.02.2012

Да... если учесть, что блок ДУ + пульт Webasto стоит ~15 000 рублей... то получилась не плохая вещь + не нужно два брелка таскать.

Mastino
Offline
Зарегистрирован: 03.12.2011

ну так... :) хоть я в технической части не селен.., за то знаю что есть хорошо :)

Dmitry23
Offline
Зарегистрирован: 16.09.2012

Да вообще четко, за 15 то тыщщщщ XD

Да и за помощь спасибо!!! ОГРОМНОЕ!!!

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

Dmitry23 пишет:

Да вообще четко, за 15 то тыщщщщ XD

Вы не правильно поняли. Максим не советовал вам купить за 15-тысяч, а сравнил решение Mastino с аналогичным из магазина (хотя "аналогичность" там очень далекая. Это 15-тысячное решение не умеет и трети того что вышло у Mastino). 

Dmitry23 пишет:

Да и за помощь спасибо!!! ОГРОМНОЕ!!!

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

Но... скажем так. Помощь о которой вы просили - весьма времязатратна. Найти что не так "в такой портянке" - не просто. Как для "первой программы" - ваш код просто замечательный (нет. правда, большинство и к 20-той так хорошо не пишут), но все равно он не соотвествует архитектурно сложности поставленой задачи. Для мелких задач - так и нужно писать, но вот когда у вас начитается "куча датчиков, куча состояний"... сложно начинает расти не линейно. Поменял что-то одно - навернулось другое. И "удержать картину  в голове целиком" - уже проблематично.

Если вы смотрели ролик Mastino, то заметили как он в конце показывает код. Обратили внимание на его объем? Да он гораздо более многословен чем ваш. Но именно для того что-бы сделать независимыми разные части. Куча дополнительных слоев и абстракций (отдельный классы для работы с железом, машины состояний и т.п.) И писалось все "так длинно" имено для того что-бы избежать "разбирательств" с кодом похожий на ваш.

И в "двух словах", на форуме, типа "поменяй эту строчку" - объяснить его не выйдет :(

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

Я не хочу сказать что ваш код - нужно выкинуть. "Дожать его можно", но это "морокливая работа".  Тот кто за "это возмется" - дожен реально хотеть его "дожать" :)  

Так что тут два выхода. Либо "заказывать исполнение", либо "раскапывать самому" (уж кто как ни вы мотивированы на это). А бесплатную помощь - тут можно получить, только выделяя "проблемные" части, сводя проблемки к "маленьким и обозримым". Которые и другие форумчане могут легко "у себя воспроизвести", да и просто "окинуть взглядом легче". Вообщем "не весь автомобиль сюда тащить", а только "не работающий блок". Старатся по максимуму локализировать проблему (кстати в результате этого, в большинстве случаев вы и сами сразу поймете причину).

Вообщем нужно идти по тому пути, который вы верно пошли в другой своей ветке http://arduino.ru/forum/programmirovanie/hc-sr04-relay

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