Через реле, для стартера реле понадобится соответствующее его току
Последний раз редактировалось Chip; 05.01.2014 в 14:25.
30 и 85 это обмотка реле?
У Вас в автомобиле сигналы ACC, Стартер и Зажигание, в активном состоянии что на выходе выдают?
Обмотка реле 85 и 86.
Я не знаю что они выдают, Кнопку парень на сайте Drive2 делал как подцеплял говорит, что не помнит, и посмотреть сейчас не может, так как машина далеко на ремонте. Мне он скинул скетчь программы, могу отправить
Привет Сергей174 скинь скетчь ,тоже хотелось бы реализовать такое дело ,только я хочу добавить в схему еще и "AD2000-M",это типа того что в "перевозчике" получится.Вложение 17465
Хорошо скину ближе к вечеру.
maestro777 Твое вложение не открывается, залей еще раз
Вот скетчь, Ты знаешь как подключить выходы??
**byte ACCPin = 11; //Выход на транзистор переферии ACC
**byte EnginePin = 10; //Выход на транзистор зажигания
**byte StarterPin = 9; //Выход на транзистор стартера
**
**byte ButtonPin = 8; //Вход + с кнопки <----------------------------- Стягивающий резистор на "-"
**byte StopPin = 12; //Вход с тормоза <----------------------------- Стягивающий резистор на "-"
**
**byte ImmoPin = 7; //Вход с иммо <----------------------------- Подтягивающий резистор на "+"
**byte TahoPin = 6; //Вход с тахометра <----------------------------- Стягивающий резистор на "-"
**
**byte WordsPin = 5; //Выход на глазок 1
**byte YellowGlazokPin = 4; //Выход на глазок 2
**byte GreenGlazokPin = 3; //Выход на глазок 3
**
**byte statusEngine = 0;
**//byte rotate = 0;
**unsigned int rotate=0;
**boolean stateACC = false;
**
**unsigned long lastPress = 0;
**unsigned long lastImmo = 0;
**unsigned long splitTime = 0;
**unsigned long time =0;
**
**byte stat = 0;
**
**void setup(){
****pinMode(EnginePin, OUTPUT);
****pinMode(StarterPin, OUTPUT);
****pinMode(ACCPin, OUTPUT);
****pinMode(WordsPin, OUTPUT);
****pinMode(YellowGlazokPin, OUTPUT);
****pinMode(GreenGlazokPin, OUTPUT);
****//time = 0;
****lastImmo*=*millis();
****lastPress*=*millis();
****Serial.begin(9600);
****Serial.println("Arduino is started");
**}
**
**// 0 - Все выключенно
**// 1 - Включено только зажигание
**// 2 - Крутиться стартер, ждем оборотов
**// 3 - Двигатель работает, все включено
**// 4 - Неудачная попытка запуска, включено только зажигание
**// 5 - Двигатель заглушен, АСС пока еще работает
**
**void loop(){
********
****if (stat != statusEngine) {stat = statusEngine; Serial.println(stat);}
****unsigned long newTime = millis() - lastPress;
****unsigned int button = pressButton();
****//if (button != 0) Serial.println(button);
**
******lastImmoTest();
****switch (statusEngine) {
******//----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
****case 0:
****
****
********digitalWrite(GreenGlazokPin, LOW);
********if (stateACC) digitalWrite(YellowGlazokPin, HIGH); else digitalWrite(YellowGlazokPin, LOW);
********if (millis() - lastImmo > 10000) digitalWrite(WordsPin, HIGH); else digitalWrite(WordsPin, LOW);
********
********
******if (button == 1500 && stateACC) {
********StopAll();
******}
******
******else if (button == 1500 && !stateACC) StartACC();
******
******else if (button != 0 && millis() - lastImmo > 2000 && newTime > 500) {
********StartEngine();
********statusEngine*=*1;
******}
******
******
******break;
**
**
******//----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
****case 1:
****if (digitalRead(ImmoPin) == LOW) StopAll();
**********digitalWrite(WordsPin, HIGH);
********
********if (stateACC) digitalWrite(YellowGlazokPin, HIGH); else digitalWrite(YellowGlazokPin, LOW);
********
********if (millis() - lastImmo > 2000 && StopIsPress() && newTime < 900)
********{
**********digitalWrite(GreenGlazokPin, HIGH);
**********digitalWrite(WordsPin, HIGH);
********}
*******/* else
********{
**********digitalWrite(GreenGlazokPin,*!digitalRea d(GreenGlazokPin));
**********delay(100);
********}*/
********
********
******if (button == 1500) {
********StopAll();
******}
******else if (button != 0 && newTime > 500) {
********if (!stateACC)
**********StopAll();
********else
********{********
**********StopEngine();
**********statusEngine*=*5;
********}
******}
******else if (newTime > 800 && newTime < 900 && StopIsPress()) {
********StartStarter();
********statusEngine*=*2;
******}
******break;
**
**
******//----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
**
****case 2:
****
****
**********digitalWrite(WordsPin, HIGH);
**********digitalWrite(GreenGlazokPin, HIGH);
**********if (stateACC) digitalWrite(YellowGlazokPin, HIGH);
********
**
******if (digitalRead(TahoPin) == HIGH) {
********rotate++;
********while (digitalRead(TahoPin) == HIGH) if (digitalRead(ImmoPin) == LOW) {StopAll(); break;}
********
******}
**
******if (rotate>=2) {
********unsigned int rpm = (rotate*60000*10000/2)/(micros()-splitTime);
********Serial.print("rpm: ");Serial.println(rpm);
********rotate=0;
********splitTime*=*micros();
**
********if (rpm>1500) { //<-------ВЕРНУТЬ СЮДА ТЫЩУ!!!! <-------
**********StopStarter();
**********StartACC();
**********statusEngine*=*3;
**********Serial.println("Engine is WORK!!");
**********break;
********}
******}
******
******if (button != 0 && newTime > 500) {
********StopAll();
******}
******else if (newTime > 5000 || !StopIsPress()){
********StopStarter();
********statusEngine*=*4;
******}
******break;
**
******//----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
**
****case 3:
********digitalWrite(GreenGlazokPin, HIGH);
********digitalWrite(YellowGlazokPin, LOW);
********if (newTime > 5000) digitalWrite(WordsPin, LOW); else digitalWrite(WordsPin, HIGH);
********
******if (button == 1500) {
********StopAll();*****
******}
******else if (button != 0 && newTime > 500) {
********StopEngine();
********statusEngine*=*5;
******}
******break;
**
******//----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
**
****case 4:
****
********digitalWrite(WordsPin, HIGH);
********digitalWrite(GreenGlazokPin, !digitalRead(GreenGlazokPin)); delay(50);
********digitalWrite(YellowGlazokPin, LOW);
****
******if (button == 1500 || newTime > 10000) {
********StopAll();***
******}
******else if (button != 0 && newTime > 500 && StopIsPress()) {
********StartStarter();
********statusEngine*=*2;
******}
******else if (button != 0 && newTime > 500 && !StopIsPress()) {
********StopAll();
******}
**
******break;
**
******//----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
**
****case 5:
****
*********digitalWrite(GreenGlazokPin, LOW);
********if (stateACC) digitalWrite(YellowGlazokPin, HIGH); else digitalWrite(YellowGlazokPin, LOW);
********
********if (newTime > 5000)
********{
**********if (millis() - lastImmo > 5000) digitalWrite(WordsPin, HIGH); else digitalWrite(WordsPin, LOW);
********}
********else
**********digitalWrite(WordsPin, HIGH);
********
****
******if (button == 1500) {
********StopAll();
******}
******else if (millis() - lastImmo < 2000) StopAll();
******else if (button != 0 && newTime > 500) {
********StartEngine();
********statusEngine*=*1;
******}
******lastImmoTest();
******break;
******//----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
**
**
****}**
**}
**
****void StartEngine(){
****digitalWrite(EnginePin, HIGH);
******Serial.println("Engine is ON");
******lastPress*=*millis();
****}
****
****void StopEngine(){
****digitalWrite(EnginePin, LOW);
******Serial.println("Engine is OFF");
******lastPress*=*millis();
****}
****
****void StopAll(){
****digitalWrite(EnginePin, LOW);
****digitalWrite(StarterPin, LOW);
****digitalWrite(ACCPin, LOW);
******Serial.println("All OFF");
*****while (!digitalRead(ButtonPin)){}
******stateACC*=*false;
******lastPress*=*millis();
******statusEngine*=*0;
******lastPress*=*millis();
****}
****
****void StartStarter(){
****digitalWrite(StarterPin, HIGH);
******Serial.println("Starter START!");
******splitTime*=*micros();
******lastPress*=*millis();
****}
****
****void StopStarter(){
****digitalWrite(StarterPin, LOW);
******Serial.println("Starter if OFF!");
******lastPress*=*millis();
****}
****
****void StartACC(){
****digitalWrite(ACCPin, HIGH);
******Serial.println("Starter ACC!");
******stateACC*=*true;
******lastPress*=*millis();
****}
****
****void lastImmoTest(){
******if (digitalRead(ImmoPin) == LOW) { //<----------------------------- Поменял на LOW
********lastImmo*=*millis();
********Serial.println("Immo+");
******}
****}
****
****unsigned int pressButton(){
******unsigned long newTime = millis();
******boolean currentPosition = digitalRead(ButtonPin);
****
******if (currentPosition == HIGH){
********delay(50);
********currentPosition*=*digitalRead(ButtonPin);
******}
******while (!currentPosition) {
********currentPosition*=*digitalRead(ButtonPin);
********if (millis() - newTime > 1000) return 1500;
******}
******newTime*=*millis() - newTime;
******if (newTime < 60) newTime = 0;
******return newTime;
****}
****
****boolean StopIsPress(){
******return digitalRead(StopPin);
****}
Привет Сергей ,ну и код громадный да еще и звездочек сколько ,новогодние снежинки прям ,ща разберемся шо куда!
Задолбался удалять звезды ну вроде код пошел:сейчас прошью и буду пробовать проверять на работоспособность ,а выхода там все описаны в прошивке ,что-то не поймешь спрашивай.PHP код:
byte ACCPin = 11; //Выход на транзистор переферии ACC
byte EnginePin = 10; //Выход на транзистор зажигания
byte StarterPin = 9; //Выход на транзистор стартера
byte ButtonPin = 8; //Вход + с кнопки <----------------------------- Стягивающий резистор на "-"
byte StopPin = 12; //Вход с тормоза <----------------------------- Стягивающий резистор на "-"
byte ImmoPin = 7; //Вход с иммо <----------------------------- Подтягивающий резистор на "+"
byte TahoPin = 6; //Вход с тахометра <----------------------------- Стягивающий резистор на "-"
byte WordsPin = 5; //Выход на глазок 1
byte YellowGlazokPin = 4; //Выход на глазок 2
byte GreenGlazokPin = 3; //Выход на глазок 3
byte statusEngine = 0;
//byte rotate = 0;
unsigned int rotate=0;
boolean stateACC = false;
unsigned long lastPress = 0;
unsigned long lastImmo = 0;
unsigned long splitTime = 0;
unsigned long time =0;
byte stat = 0;
void setup(){
pinMode(EnginePin, OUTPUT);
pinMode(StarterPin, OUTPUT);
pinMode(ACCPin, OUTPUT);
pinMode(WordsPin, OUTPUT);
pinMode(YellowGlazokPin, OUTPUT);
pinMode(GreenGlazokPin, OUTPUT);
//time = 0;
lastImmo=millis();
lastPress=millis();
Serial.begin(9600);
Serial.println("Arduino is started");
}
// 0 - Все выключенно
// 1 - Включено только зажигание
// 2 - Крутиться стартер, ждем оборотов
// 3 - Двигатель работает, все включено
// 4 - Неудачная попытка запуска, включено только зажигание
// 5 - Двигатель заглушен, АСС пока еще работает
void loop(){
if (stat != statusEngine) {stat = statusEngine; Serial.println(stat);}
unsigned long newTime = millis() - lastPress;
unsigned int button = pressButton();
//if (button != 0) Serial.println(button);
lastImmoTest();
switch (statusEngine) {
//----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
case 0:
digitalWrite(GreenGlazokPin, LOW);
if (stateACC) digitalWrite(YellowGlazokPin, HIGH); else digitalWrite(YellowGlazokPin, LOW);
if (millis() - lastImmo > 10000) digitalWrite(WordsPin, HIGH); else digitalWrite(WordsPin, LOW);
if (button == 1500 && stateACC) {
StopAll();
}
else if (button == 1500 && !stateACC) StartACC();
else if (button != 0 && millis() - lastImmo > 2000 && newTime > 500) {
StartEngine();
statusEngine=1;
}
break;
//----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
case 1:
if (digitalRead(ImmoPin) == LOW) StopAll();
digitalWrite(WordsPin, HIGH);
if (stateACC) digitalWrite(YellowGlazokPin, HIGH); else digitalWrite(YellowGlazokPin, LOW);
if (millis() - lastImmo > 2000 && StopIsPress() && newTime < 900)
{
digitalWrite(GreenGlazokPin, HIGH);
digitalWrite(WordsPin, HIGH);
}
else
{
digitalWrite(GreenGlazokPin,!digitalRead(GreenGlazokPin));
delay(100);
}
if (button == 1500) {
StopAll();
}
else if (button != 0 && newTime > 500) {
if (!stateACC)
StopAll();
else
{StopEngine();
statusEngine=5;
}
}
else if (newTime > 800 && newTime < 900 && StopIsPress()) {
StartStarter();
statusEngine=2;
}
break;
//----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
case 2:
digitalWrite(WordsPin, HIGH);
digitalWrite(GreenGlazokPin, HIGH);
if (stateACC) digitalWrite(YellowGlazokPin, HIGH);
if (digitalRead(TahoPin) == HIGH) {
rotate++;
while (digitalRead(TahoPin) == HIGH) if (digitalRead(ImmoPin) == LOW) {StopAll(); break;}
}
if (rotate>=2) {
unsigned int rpm = (rotate/60000/10000/2)/(micros()-splitTime);
Serial.print("rpm: ");Serial.println(rpm);
rotate=0;
splitTime=micros();
if (rpm>1500) { //<-------ВЕРНУТЬ СЮДА ТЫЩУ!!!! <-------
StopStarter();
StartACC();
statusEngine=3;
Serial.println("Engine is WORK!!");
break;
}
}
if (button != 0 && newTime > 500) {
StopAll();
}
else if (newTime > 5000 || !StopIsPress()){
StopStarter();
statusEngine=4;
}
break;
//----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
case 3:
digitalWrite(GreenGlazokPin, HIGH);
digitalWrite(YellowGlazokPin, LOW);
if (newTime > 5000) digitalWrite(WordsPin, LOW); else digitalWrite(WordsPin, HIGH);
if (button == 1500) {
StopAll();
}
else if (button != 0 && newTime > 500) {
StopEngine();
statusEngine=5;
}
break;
//----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
case 4:
digitalWrite(WordsPin, HIGH);
digitalWrite(GreenGlazokPin, !digitalRead(GreenGlazokPin)); delay(50);
digitalWrite(YellowGlazokPin, LOW);
if (button == 1500 || newTime > 10000) {
StopAll();
}
else if (button != 0 && newTime > 500 && StopIsPress()) {
StartStarter();
statusEngine=2;
}
else if (button != 0 && newTime > 500 && !StopIsPress()) {
StopAll();
}
break;
//----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
case 5:
digitalWrite(GreenGlazokPin, LOW);
if (stateACC) digitalWrite(YellowGlazokPin, HIGH); else digitalWrite(YellowGlazokPin, LOW);
if (newTime > 5000)
{
if (millis() - lastImmo > 5000) digitalWrite(WordsPin, HIGH); else digitalWrite(WordsPin, LOW);
}
else
digitalWrite(WordsPin, HIGH);
if (button == 1500) {
StopAll();
}
else if (millis() - lastImmo < 2000) StopAll();
else if (button != 0 && newTime > 500) {
StartEngine();
statusEngine=1;
}
lastImmoTest();
break;
//----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
}
}
void StartEngine(){
digitalWrite(EnginePin, HIGH);
Serial.println("Engine is ON");
lastPress=millis();
}
void StopEngine(){
digitalWrite(EnginePin, LOW);
Serial.println("Engine is OFF");
lastPress=millis();
}
void StopAll(){
digitalWrite(EnginePin, LOW);
digitalWrite(StarterPin, LOW);
digitalWrite(ACCPin, LOW);
Serial.println("All OFF");
while (!digitalRead(ButtonPin)){}
stateACC=false;
lastPress=millis();
statusEngine=0;
lastPress=millis();
}
void StartStarter(){
digitalWrite(StarterPin, HIGH);
Serial.println("Starter START!");
splitTime=micros();
lastPress=millis();
}
void StopStarter(){
digitalWrite(StarterPin, LOW);
Serial.println("Starter if OFF!");
lastPress=millis();
}
void StartACC(){
digitalWrite(ACCPin, HIGH);
Serial.println("Starter ACC!");
stateACC=true;
lastPress=millis();
}
void lastImmoTest(){
if (digitalRead(ImmoPin) == LOW) { //<----------------------------- Поменял на LOW
lastImmo=millis();
Serial.println("Immo+");
}
}
unsigned int pressButton(){
unsigned long newTime = millis();
boolean currentPosition = digitalRead(ButtonPin);
if (currentPosition == HIGH){
delay(50);
currentPosition=digitalRead(ButtonPin);
}
while (!currentPosition) {
currentPosition=digitalRead(ButtonPin);
if (millis() - newTime > 1000) return 1500;
}
newTime=millis() - newTime;
if (newTime < 60) newTime = 0;
return newTime;
}
boolean StopIsPress(){
return digitalRead(StopPin);
}
Эту тему просматривают: 6 (пользователей: 0 , гостей: 6)